一、RAID
1.RAID好處:
可以不用到機房現場,就能夠坐在辦公室里面遠程連接並控制服務器的配件。
-
更多的容量
-
得到更多的冗余(數據更安全)
-
得到更高的性能
數據還是要備份
2.RAID的運行方式:
- 軟RAID(了解)
- 硬RAID(看視頻,網址 https://www.bilibili.com/video/av46656120?from=search&seid=8213679239129642497)
3.RAID的級別:
- RAID0 :條帶卷,容量最大。單塊容量*N,讀寫最快。沒有容錯機制,壞了一塊就全都不能用了。 主要提供訪問速度,不存儲數據。理論是2塊磁盤
具有最高的存儲性能(磁盤容量不浪費,讀寫很快),這些磁盤的總和
要制作RAID 0至少要1塊物理磁盤,不做raid不能安裝系統
**安全:任何一塊硬盤損壞,所有的數據無法使用
- RAID1 : 鏡像卷,50%容量,讀一般,寫特慢,相當於寫兩分數據,有50%容錯機制。只能是兩塊
鏡像:損失50%的數據容量。例如2塊1T的盤,做完RAID 1后容量為1T**
raid只能2塊硬盤
Mirror不能提高存儲性能。理論上寫性能和單盤相差不大
- RAID5 : 檢驗卷 ,總容量的三分之二,讀寫稍快。容錯機制,可以損壞三分之一,最低三塊
需要至少3塊,損失一塊硬盤**
安全:最多可以損壞一塊硬盤
**性能:寫入速度不快,讀取Ok
- RAID10 :10 ,損失一半,讀寫快。容錯50%,只能四塊。
最少4塊硬盤,增加硬盤必須是2的倍數;所有硬盤容量的一半**
安全:最多損壞一半硬盤
**性能:寫入和讀取都很快
總結:
性能從高到低:RAID0 -----> RAID10----->RAID4----->RAIID1
安全從高到低: RAID1------>RAID10------>RAID5------>RAID0
價格從高到低: raid10------->RAID1------->RAID5------->RAID0
注意:RAID硬盤失效處理--熱備和熱插拔
二、RAID實戰
軟RAID
mdadm 安裝
[root@web ~]# yum install -y mdadm
mdadm命令常見選項解釋:
-A #激活磁盤陣列
-C #建立一個新陣列
-D #打印陣列設備的信息
-G #改變陣列大小或形態
-S #停止陣列
-r #移除設備
-l #設定磁盤陣列的級別
-n #指定陣列磁盤的數量
-x #指定陣列中備用盤的數量
-f #將設備狀態定為故障
-a #添加設備到陣列
-v #顯示詳細信息軟RAID:通過操作系統實現
1.RAID0
創建RAID0實驗環境:
Raid種類 磁盤 熱備盤
Raid0 sdb、sdc
創建磁盤陣列RAID0
[root@web ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
查看RAID陣列
[root@web ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jul 18 18:30:52 2019
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:30:52 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : none
Name : web:0 (local to host web)
UUID : be7fa2cc:94484da2:cb10af97:caa583f0
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
把信息寫入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
掛載使用
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
[root@web ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid0
[root@web ~]# mount /dev/md0 /raid0
[root@web ~]# df -h |grep /dev/md0
/dev/md0 40G 33M 40G 1% /raid0
[root@web ~]# cp /etc/services /raid0/
2.RAID1
創建RAID0實驗環境:
Raid種類 磁盤 熱備盤
Raid1 sdd、sde sdf
1)創建RAID1,並添加1個熱備盤
2)模擬磁盤故障,看備用盤是否會自動頂替故障盤
3)從raid1中移出故障盤
創建磁盤陣列
[root@web ~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[e,d,f]
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: size set to 20954112K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
查看RAID信息
[root@web ~]# mdadm -D /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Thu Jul 18 18:41:45 2019
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:44:23 2019
State : clean, resyncing
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Resync Status : 44% complete
Name : web:1 (local to host web)
UUID : 9d654e3a:12cf017f:eb091033:852f1ea6
Events : 7
Number Major Minor RaidDevice State
0 8 48 0 active sync /dev/sdd
1 8 64 1 active sync /dev/sde
2 8 80 - spare /dev/sdf
追加到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
掛載使用
[root@web ~]# mkfs.xfs /dev/md1
meta-data=/dev/md1 isize=512 agcount=4, agsize=1309632 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5238528, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid1
[root@web ~]# mount /dev/md1 /raid1
[root@web ~]# df -h |grep /dev/md1
/dev/md1 20G 33M 20G 1% /raid1
[root@web ~]# cp /etc/services /raid1
指定一塊盤故障
[root@web ~]# mdadm -f /dev/md1 /dev/
檢查數據有沒有丟失
[root@web ~]# ll /raid1
total 656
-rw-r--r--. 1 root root 670293 Jul 18 18:47 services
移除損壞的盤
[root@web ~]# mdadm -r /dev/md1 /dev/sde
mdadm: hot removed /dev/sde from /dev/md1
添加一塊盤
[root@web ~]# mdadm -a /dev/md1 /dev/sde
3.RAID5
創建RAID5實驗環境:
Raid種類 磁盤 熱備盤
Raid5 sdg、sdh、sdi sdj
1)使用三塊盤創建RAID5, 使用-x添加1個熱備盤
2)模擬損壞一塊磁盤,然后備用盤自動頂上,只能頂一次
3)在模擬損壞,檢測數據是否丟失,如果沒有再次模擬損壞.
創建陣列
[root@web ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 /dev/sd[g,h,i,j]
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
查看RAID信息
[root@web ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Jul 18 18:54:45 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:56:43 2019
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 36% complete
Name : web:5 (local to host web)
UUID : 42d49a3d:f3dfcbb4:1c44c59c:90b62a9f
Events : 6
Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdg
1 8 112 1 active sync /dev/sdh
4 8 128 2 spare rebuilding /dev/sdi
3 8 144 - spare /dev/sdj
將配置信息寫入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
掛載使用
[root@web ~]# mkfs.xfs /dev/md5
meta-data=/dev/md5 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid5
[root@web ~]# mount /dev/md5 /raid5
[root@web ~]# cp /etc/services /raid5
[root@web ~]# ll /raid5
total 656
-rw-r--r--. 1 root root 670293 Jul 18 18:58 services
模擬一塊盤損壞
[root@web ~]# mdadm -f /dev/md5 /dev/sdh
移除損壞的盤
[root@web ~]# mdadm -r /dev/md5 /dev/sdh
添加一塊盤
[root@web ~]# mdadm -a /dev/md5 /dev/sdh
4.RAID10
創建RAID10實驗環境:
Raid種類 磁盤 熱備盤
Raid10 分區:sdk1,sdk2, sdk3.sdk4
分區
[root@web ~]# gdisk /dev/sdk
[root@web ~]# lsblk /dev/sdk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdk 8:160 0 20G 0 disk
├─sdk1 8:161 0 5G 0 part
├─sdk2 8:162 0 5G 0 part
├─sdk3 8:163 0 5G 0 part
└─sdk4 8:164 0 5G 0 part
創建磁盤陣列
[root@web ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sdk[1-4]
查看RAID信息
[root@web ~]# mdadm -D /dev/md10
寫入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
掛載使用
[root@web ~]# mkfs.xfs /dev/md10
meta-data=/dev/md10 isize=512 agcount=16, agsize=163712 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2618112, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid10
[root@web ~]# mount /dev/md10 /raid10
[root@web ~]# cp /etc/services /raid10
[root@web ~]# ll /raid10
total 656
-rw-r--r--. 1 root root 670293 Jul 18 19:12 services
模擬故障
[root@web ~]# mdadm -f /dev/md10 /dev/sdk3
移除損壞的盤
[root@web ~]# mdadm -r /dev/md10 /dev/sdk2
mdadm: hot removed /dev/sdk2 from /dev/md10
[root@web ~]# mdadm -r /dev/md10 /dev/sdk3
mdadm: hot removed /dev/sdk3 from /dev/md10
添加一塊硬盤
[root@web ~]# mdadm -a /dev/md10 /dev/sdk[2,3]
mdadm: added /dev/sdk2
mdadm: added /dev/sdk3
[root@web ~]# mdadm -D /dev/md10
三、LVM介紹
1. 什么是LVM?
LVM是Logical Volume Manager (邏輯卷管理)的簡寫,它是Linux環境下對磁盤分區進行管理的一種機制。又譯為邏輯卷宗管理器、邏輯扇區管理器、邏輯磁盤管理器,是Linux核心所提供的邏輯卷管理(Logical volume management)功能。它在硬盤的分區之上,又創建一個邏輯層,以方便系統管理硬盤分區系統。
最先由IBM開發,在AIX系統上實現,OS/2 操作系統與 HP-UX也支持這個功能。在1998年,Heinz Mauelshagen 根據在 HP-UX 上的邏輯卷管理器,寫作出第一個 Linux 版本的邏輯卷管理器。
2. LVM解決了什么問題
當我們剛開始安裝Linux操作系統是遇到的一個常見的難以決定的問題就是如何正確地評估各分區大小,以分配合適的硬盤空間。
普通的磁盤分區好之后就無法改變其大小,而遇到出現某個分區空間耗盡時,解決的方法可以是符號鏈接,或者調整分區大小的工具,但這只是暫時解決方法,沒有從根本上解決問題。
隨着Linux的邏輯卷管理功能的出現,這些問題都迎刃而解,用戶可以在無需停機的請款下可以方便的調整各個分區大小。
3.LVM的名詞
1.物理卷(PV):
(physical volume),把常規的磁盤設備通過pvcreate命令對其進行初始化,形成了物理卷。其實就是硬盤或分區。(面粉)
2.卷組(VG):
(volume group),把多個物理卷組成一個邏輯的整體,這樣卷組的大小就是多個硬盤之和。或者理解就是由一個或多個PV組成的整體。(面團)
3.邏輯卷(LV):
(logical volume),從卷組中划分需要的空間大小出來。用戶僅需對其格式化然后即可掛載使用。從VG中切割出的空間用於創建文件系統。(切成饅頭)
4.基本單元(PE):
(physical extend),分配的邏輯大小的最小單元,默認為4MB的基本塊。(假設分配100MB邏輯空間,則需要創建25個PE)
四、LVM實戰
1. 創建物理卷,加入卷組
1) 創建物理卷,將普通磁盤轉換為物理卷。
2)創建卷組,將物理卷加入到卷組中。
3)在卷組中划分邏輯卷,然后掛載使用。
#1.准備物理磁盤,如果是虛擬機需要關閉添加磁盤,以便更好的實驗
[root@qiudao ~]# lsblk
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
#2.下載安裝軟件包
[root@web ~]# yum install lvm2 -y
#3.將/dev/sdb創建為物理卷
[root@web ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
#4.創建卷組,並將物理卷加入進去卷組--->名字lvm_test
[root@web ~]# vgcreate lvm_test /dev/sdb
#5.檢查卷組
[root@web ~]# vgs
#6.檢查當前邏輯卷VG中PV使用情況
[root@web ~]# pvs
創建一個邏輯卷,分配名稱,以及大小,指定卷組
選項:
-L #邏輯卷大小
-n #邏輯卷名字
#1.創建一個邏輯卷
[root@web ~]# lvcreate -L 1G -n lv1 lvm_test
#2.將lvm_test分配給lv1
[root@qiudao ~]# lvcreate -L 100M -n lv1 lvm_test
#3.檢查
[root@web ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 1 1 0 wz--n- <20.00g <19.00g
#4.檢查當前邏輯卷VG中PV使用情況
[root@web ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm_test lvm2 a-- <20.00g <19.00g
[root@web ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 lvm_test -wi-a----- 1.00g
[root@web ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 47.8G 0 part /
sdb 8:16 0 20G 0 disk
└─lvm_test-lv1 253:0 0 1G 0 lvm
#5.格式化邏輯卷
[root@web ~]# mkfs.xfs /dev/lvm_test/lv1
meta-data=/dev/lvm_test/lv1 isize=512 agcount=4, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=262144, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
#6.掛載使用
[root@web ~]# mkdir /lv1
[root@web ~]# mount /dev/lvm_test/lv1 /lv1
[root@web ~]# df -h |grep lv1
/dev/mapper/lvm_test-lv1 1014M 33M 982M 4% /lv1
[root@web ~]# cp /etc/services /lv1
[root@web ~]# ll /lv1
total 656
-rw-r--r--. 1 root root 670293 Jul 18 19:59 services
2.卷組管理,如何擴展卷組大小,如何刪除卷組
1. 如何擴大VG卷組
#1.將sdc指定為物理卷
[root@web ~]# pvcreate /dev/sdc
Physical volume "/dev/sdc" successfully created
#2. 添加到卷組中,使用vgextend擴展卷組
[root@web ~]# vgextend lvm_test /dev/sdc
Volume group "lvm_test" successfully extended
3. 再次檢查,發現卷組已經擴大
[root@web ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 2 1 0 wz--n- 39.99g 38.99g
[root@web ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm_test lvm2 a-- <20.00g <19.00g
/dev/sdc lvm_test lvm2 a-- <20.00g <20.00g
2. 假設想移除/dev/sdb磁盤,建議先將sdb磁盤數據先遷移到sdc磁盤,然后在移除。(同一卷組的磁盤才可以進行在線遷移),(注意卷組的名稱---)
#1. 將邏輯卷移動到sdc上面
#pvmove在線數據遷移,將sdb的數據遷移至sdc
[root@web ~]# pvmove /dev/sdb /dev/sdc
/dev/sdb: Moved: 1.95%
/dev/sdb: Moved: 100.00%
#2.檢查是否將sdb數據遷移至sdc
[root@web ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm_test lvm2 a-- <20.00g <20.00g
/dev/sdc lvm_test lvm2 a-- <20.00g <19.00g
#4.縮減卷組大小
[root@web ~]# vgreduce lvm_test /dev/sdb
Removed "/dev/sdb" from volume group "lvm_test"
#5. 檢查
[root@web ~]# vgs
VG #PV #LV #SN Attr VSize VFree
lvm_test 1 1 0 wz--n- <20.00g <19.00g
[root@web ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sdb lvm2 --- 20.00g 20.00g
/dev/sdc lvm_test lvm2 a-- <20.00g <19.00g
3.邏輯卷管理,動態的調整邏輯卷大小
方法1:
1. 邏輯卷的擴展,是取決於vg卷中是否還有剩余的容量,注意擴展邏輯卷不能超過卷組VG的總大小**
[root@qiudao ~]# vgs
VG #PV #LV #SN Attr VSize VFree
datavg 1 1 0 wz--n- 1020.00m 920.00m
#1.擴展lv邏輯卷,增加800M分配給邏輯卷 {注意: 800M +800M 不一樣}
[root@qiudao ~]# lvextend -L +800M /dev/lvm_test/lv1
#或者可以選擇分配磁盤池中多少百分比給邏輯卷
[root@qiudao ~]# lvextend -l +50%FREE /dev/lvm_test/lv1
#2.擴展邏輯卷后需要更新fs文件系統
[root@qiudao ~]# xfs_growfs /dev/lvm_testvg/lv1 #xfs文件格式擴容
2. 縮小邏輯卷,不要去操作,因為線上在使用的磁盤真的敢操作嗎?
3. 刪除邏輯卷,如果不想使用邏輯卷可以選擇刪除。
[root@qiudao ~]# umount /dev/lvm_test/lv1
[root@qiudao ~]# lvremove /dev/lvm_test/lv1
Do you really want to remove active logical volume lvm_test/lv1? [y/n]: y
Logical volume "lv1" successfully removed
方法2:
按照百分比增加大小
[root@web ~]# lvextend -l 20%FREE /dev/lvm_test/lv1
Size of logical volume lvm_test/lv1 changed from 2.00 GiB (512 extents) to 3.60 GiB (922 extents).
Logical volume lvm_test/lv1 successfully resized.
#更新文件系統
[root@web ~]# xfs_growfs /dev/lvm_test/lv1
meta-data=/dev/mapper/lvm_test-lv1 isize=512 agcount=8, agsize=65536 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=524288, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 524288 to 944128
注意:縮減邏輯卷大小 , 企業不會去縮減,一般會直接刪除
4.怎樣刪除?
#1.首先要卸載
[root@web ~]# umount /lv1
[root@web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 2.9G 45G 7% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.7M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 197M 105M 93M 54% /boot
tmpfs 199M 0 199M 0% /run/user/0
#2.移除
[root@web ~]# lvremove /dev/lvm_test/lv1
Do you really want to remove active logical volume lvm_test/lv1? [y/n]: y #是否確認
Logical volume "lv1" successfully removed
#3.檢查
[root@web ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 200M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 47.8G 0 part /
sdb 8:16 0 20G 0 disk
sdc 8:32 0 20G 0 disk
注意:LVM如果有一個磁盤損壞,整個lvm都壞了, lvm只有動態擴展作用,底層用RAID + 上層LVM = 既有冗余又有動態擴展
五、磁盤常見故障
1.block故障(數據滿了)
環境准備
先創建一個1G分區,並掛在使用
創建大文件,模擬磁盤空間滿
[root@web ~]# dd if=/dev/zero of=/test/test.log bs=100M count=11
dd: error writing ‘/test/test.log’: No space left on device
10+0 records in
9+0 records out
1026621440 bytes (1.0 GB) copied, 18.7358 s, 54.8 MB/s
[root@web ~]# df -h |grep test
/dev/sde1 1014M 1012M 2.8M 100% /test
報錯No space left on device
[root@web ~]# cp services /test/
cp: error writing ‘/test/services’: No space left on device
cp: failed to extend ‘/test/services’: No space left on device
檢查磁盤
[root@web ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 2.9G 45G 7% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.7M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 197M 105M 93M 54% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sde1 1014M 1014M 32K 100% /test
解決思路:
查找大文件,依次往下查找,直到找到大文件為止
[root@web ~]# du -sh /test/*
找到之后,先確認是否可以刪除。
rm -f
刪除之后,磁盤還是滿的,先確認是否有硬鏈接。
2.inode故障(小文件太多)
#環境准備,創建一個30M的分區
[root@qiudao ~]# df -h |grep sdb1
dev/sdb1 27M 1.6M 26M 6% /test
[root@qiudao ~]# lsblk |grep sdb1
└─sdb1 8:17 0 30M 0 part /test
#批量創建大量的小文件
[root@qiudao ~]# touch /test/data/file/{1..15360}.txt
#再去到該分區中創建新的文件就會報錯。
[root@qiudao ~]# touch /test/test.txt
touch: cannot touch ‘/test/test.txt’: No space left on device
#解決思路:查看磁盤分區使用情況,發現磁盤空間是正常的,再次查看inode,發現inode滿了。
[root@qiudao ~]# df -h |grep sdb1
/dev/sdb1 27M 9.7M 17M 37% /test
[root@qiudao ~]# df -i |grep sdb1
/dev/sdb1 15424 15424 0 100% /test
#怎樣找出大量的小文件呢?首先要找出大目錄(小文件過多,會導致目錄變大。)
[root@qiudao ~]# find /test -type d -size +300k |xargs ls -lhd
#找到大量小文件之后,首先要確認好之后再刪除,不要直接的去刪除
先確認是否可以刪除。千萬不要直接查看目錄內容,否則會被刷屏
[root@qiudao ~]# ll /test/data |wc -l
[root@qiudao ~]# find /test/data/file/ -type f -delete