2.4 存儲管理
Linux針對設備類型對存儲設備進行識別,如果是IDE存儲設備,在計算機中將被識別爲hd,第一個IDE設備會被識別爲hda,第二個IDE設備將被識別爲hdb,以此類推。如果是SATA、USB或SCSI設備,會被識別爲sd,以此類推。
對於分區,Linux使用數字來表示。如第一塊SATA硬盤的第一個分區爲sda1,第二塊SATA硬盤的第二個分區爲sdb2。
2.4.1 硬盤分區
傳統的MBR分區方式是一塊硬盤最多可以分四個主分區。即使硬盤還有剩餘空間,也無法再繼續分區。無法創建大於2TB的分區。
Sda1 | Sda2 | Sda3 | Sda4 | 剩餘空間 |
傳統的MBR分區方式中,如果需要更多的分區,則需要使用在擴展分區中創建邏輯分區的方法來實現。此時可以在擴展分區中劃分出多個邏輯分區,所有邏輯分區的總和爲擴展分區的大小。邏輯分區一定是以編號5開始的。SATA磁盤的第一個邏輯分區一定爲sda5。
Sda1 | Sda2 | Sda3 | 擴展分區sda4 | ||
邏輯分區sda5 | 邏輯分區sda6 | ...... |
Command (m for help): m在此輸入指令m獲得幫助 Command action a toggle a bootable flag切換分區啓動標記 b edit bsd disklabel編輯bsd磁盤標籤 c toggle the dos compatibility flag切換dos兼容模式 d delete a partition刪除分區 l list known partition types顯示分區類型 m print this menu顯示幫助菜單 n add a new partition新建分區 o create a new empty DOS partition table創建新的空分區表 p print the partition table顯示分區表信息 q quit without saving changes不保存退出 s create a new empty Sun disklabel創建新的Sun磁盤標籤 t change a partition's system id修改分區id,可以通過l查看id u change display/entry units修改容量單位,磁柱或扇區 v verify the partition table檢驗分區表 w write table to disk and exit保存並退出 x extra functionality (experts only)擴展功能
使用partprobe命令讓內核立即讀取新的分區表。或partx -a增加了分區,partx -d刪除了分區。
[root@instructor ~]# partprobe /dev/sda
GPT分區提供了分區表的冗餘以實現分區表的備份與安全。但fdisk命令不支持GPT分區方式,使用Linux的另一個分區工具parted,命令格式爲:
parted[選項][磁盤 [命令] ]
1. 修改分區表類型
[root@instructor ~]# parted /dev/sdb mklabel gpt修改分區表格式 [root@instructor ~]# parted /dev/sdb print查看系統分區表信息
2. 創建與刪除分區
創建新的分區需要使用parted命令的mkpart指令,語法格式如下:
parted [磁盤] mkpart 分區類型文件系統類型開始結束
其中,mkpart指令爲創建新的分區,分區類型有:primary、logical、extended三種,文件系統類型有:fat16、fat32、ext2、ext3、linux-swap等,開始與結束標記區分開始與結束的位置(默認爲MB)。
[root@instructor ~]# parted /dev/sdb mkpart primary ext3 1 1G
上面的命令將創建一個格式爲ext3的主分區,從磁盤的第1MB開始分區,到1GB結束。
[root@instructor ~]# parted /dev/sdb rm 3(編號)使用rm指令刪除分區
除了基本的創建與刪除外,利用parted命令還可以進行分區檢查、調整分區大小、還原誤刪除分區等操作。
2.4.2 格式化與掛載文件系統
使用mkfs命令來完成格式化操作,其中Linux系統默認文件系統格式爲ext4格式。對於交換分區,我們需要使用單獨的mkswap命令實現格式化的工作。
[root@instructor ~]# mkfs.ext4 /dev/sdb5 [root@instructor ~]# mkswap /dev/sdb3
掛載可以使用命令或修改系統文件兩種方式。第一種方式使用mount命令實現文件系統的掛載。
mount
描述:掛載文件系統
用法:mount [選項] [ -o[選項] ] 設備|目錄
選項:-a掛載/etc/fstab文件中所有未掛載的文件系統
-t指定文件系統類型(包括: adfs, affs, autofs, cifs, coda, coherent, cramfs,
debugfs, devpts, efs, ext, ext2, ext3, ext4, hfs, hfsplus, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, proc, qnx4, ramfs, reiserfs, romfs, squashfs, smbfs, sysv, tmpfs, ubifs, udf, ufs, umsdos, usbfs, vfat, xenix, xfs, xiafs),默認ext4。
-o指定掛載屬性,具體屬性可參考man幫助手冊
第二種方式是修改系統文件/etc/fstab,該文件共計六列,第一列爲設備名稱或設備標籤,第二列爲掛載點名稱(掛載點爲用戶自己創建的目錄),第三列爲文件系統類型,第四列爲掛載屬性,第五列指定該文件系統是否使用dump進行備份(0表示不備份,1表示每天備份),第六列指定該文件系統在開機後使用fsck程序進行磁盤檢測的順序(根文件系統需要指定爲1,其他文件系統一般爲2,如果爲0,則表示不需要進行磁盤檢測)。
/dev/sda6 /123 ext4 defaults 0 0
2.4.3 LVM邏輯卷概述
LVM(Logical Volume Manager)是基於內核的一種邏輯卷管理器,LVM適合於管理大存儲設備,並允許用戶動態調整文件系統的大小。LVM的快照功能可以幫助我們快速備份數據。
物理卷(Physical Volume,PV):物理卷是LVM最底層概念,是LVM的邏輯存儲塊,物理卷與磁盤分區是邏輯的對應關係。
卷組(Volume Group,VG):卷組是LVM邏輯概念上的磁盤設備,通過將單個或多個物理卷組合後生成卷組。
物理長度(Physical Extent,PE):物理長度是將物理卷組合爲卷組後,所劃分的最小存儲單位,即邏輯意義上磁盤的最小存儲單元。LVM默認PE大小爲4MB。
邏輯卷(Logical Volume,LV):邏輯卷就是LVM邏輯意義上的分區,我們可以指定從卷組中提取多少容量來創建邏輯卷,最後對邏輯卷格式化並掛載使用。
將分區轉換爲物理卷的命令是pvcreate,將物理卷組合爲卷組的命令是vgcreate,從卷組中提取容量創建邏輯卷的命令是lvcreate。創建完成後可以分別使用pvdisplay、vgdisplay、lvdisplay查看效果。
1. pvcreate
描述:使用LVM對磁盤或分區進行初始化
用法:pvcreate [選項] 物理卷 [物理卷...]
2. vgcreate-s指定PE大小
描述:創建卷組
用法:vgcreate [選項] 卷組名稱 物理設備路徑 [物理設備路徑...]
3. lvcreate
描述:在已存在的卷組中創建邏輯卷
用法:lvcreate [選項] 卷組名稱或路徑 [物理卷路徑]
選項:-l指定使用多少個卷組中的PE創建邏輯卷,PE容量在創建卷組時已經指定
-L直接指定邏輯卷的容量大小,單位可以是b(B)、s(S)、k(K)、m(M)、g(G)、t(T)、p(P)、e(E)
-n指定邏輯卷名稱
[root@instructor ~]# pvcreate /dev/sdb{5,6,7} [root@instructor ~]# vgcreate -s 8M ceshi_vg1 /dev/sdb{5,6} [root@instructor ~]# lvcreate -l 40 -n ceshi_lv1 ceshi_vg1 /dev/sdb6
指定使用/dev/sdb6這個物理卷的存儲空間
附:修改分區標籤爲LVM,即8e
2.4.5 修改LVM分區容量
使用lvextend命令調整邏輯卷大小。但lvextend僅調整邏輯卷大小,使用該命令調整完邏輯卷大小後,還需要使用resize2fs命令更新文件系統的大小。
[root@instructor ~]# lvextend -L +100M /dev/mapper/ceshi_vg1-ceshi_lv1 [root@instructor ~]# resize2fs /dev/mapper/ceshi_vg1-ceshi_lv1
LVM的卷組也是可以動態調整容量大小的,這是需要使用fdisk創建一個新的分區,並使用pvcreate命令轉換爲物理卷格式,接着通過vgextend將新的物理卷追加至現有的卷組空間中,最後使用lvextend調整邏輯卷的容量。
[root@instructor ~]# vgextend ceshi_vg1 /dev/sdb7
2.4.6 刪除LVM分區
使用LVM命令輕鬆地刪除之前創建的物理卷、卷組、邏輯卷。刪除的順序應該與創建時的順序相反,也就是卸載文件系統、刪除邏輯卷、刪除卷組、刪除物理卷。
[root@instructor ~]# lvremove /dev/mapper/ceshi_vg1-ceshi_lv1 [root@instructor ~]# vgremove ceshi_vg1 [root@instructor ~]# pvremove /dev/sdb{5,6,7}
2.4.7 RAID磁盤陣列概述
RAID(Redundant Array of Independent Disk)虛擬存儲系統。RAID即獨立冗餘磁盤陣列,其思想是將多塊獨立的磁盤按不同的方式組合爲一個邏輯磁盤,從而提高存儲容量,提升存儲性能或提供數據備份功能。
RAID分爲軟件RAID和硬件RAID兩類。硬件RAID通常需要有RAID卡,RAID卡本身會有獨立的控制部件和內存,所以不會佔有系統資源,效率高、性能強。
2.4.8 RAID級別
1. RAID 0(不含校驗與冗餘的條帶存儲)
多塊磁盤組合爲RAID 0 後,數據將被分割並分別存儲在每塊硬盤中,所以能最大地提升存儲性能與存儲空間,但無法容錯,RAID 0 至少需要兩塊磁盤。
如果一個文件要寫入RAID 0 ,則該文件會被分割爲多個部分,DATA1與DATA2被分別同步存入磁盤1和磁盤2,其他部分依次類推。讀取該文件時,將同時從磁盤1和磁盤2中讀取數據。
缺點:因爲沒有校驗與備份,兩塊硬盤中如果有一塊磁盤損壞,即磁盤中的任何一個數據損壞將導致整個文件無法讀取。
2. RAID 1 (不含校驗的鏡像存儲)
多塊磁盤組合爲RAID 1 後,數據將被同時複製到每塊硬盤中,製作這種磁盤陣列至少需要兩塊硬盤,該級別的RAID只要有一塊硬盤可用,即可正常工作,該級別的陣列安全性是最好的,磁盤利用率是最低的。
如果一個 文件要寫入RAID 1 ,則該文件會寫入磁盤1,同時以複製備份的形式寫入磁盤2,DATA1與DATA2被同時存入磁盤1和磁盤2,其他部分依此類推。RAID 1 寫入數據的效率會降低,因爲相同數據需要同時寫入兩塊磁盤,但RAID 1 讀取數據的效率會提升,因爲數據可以同時從兩塊硬盤讀取數據。
缺點:RAID 1 寫入效率低下。此外,磁盤的利用率極低,爲總空間的一般。
3. RAID 2 (位級別的校驗式條帶存儲)
多塊磁盤組合爲RAID 2 後,數據將以位(bit)爲單位同步式分別存儲在不同的硬盤上,並採用海明碼(海明碼是一種具有糾錯功能的校驗碼)對數據進行校驗與恢復。
如果一個文件要寫入RAID 2 ,則該文件會被分成數據位分別同步寫入不同的磁盤中,DATA1和DATA2進行海明碼運算後再寫入校驗盤中,其他部分以此類推。擁有校驗位的RAID 2 允許三塊磁盤中任何一塊磁盤損壞,並能夠對未損壞的兩塊磁盤進行運算後還原已損壞磁盤上額數據,從而實現數據恢復的功能。RAID 2 對大量數據的讀寫具有很高的性能,但對少量數據的讀寫時性能反而不好,該磁盤陣列至少需要三塊硬盤。
4. RAID 3 (字節級別的校驗式條帶存儲)
該級別的磁盤陣列可以參考RAID 2 的讀寫原理,僅數據分割的單位爲字節。
5. RAID 4 (數據塊級別的校驗式條帶存儲)
該級別的磁盤陣列與RAID 2 類似,僅數據分割單位不同。block
6. RAID 5 (數據塊級別的分佈式校驗條帶存儲)
多塊磁盤組合爲RAID 5 後,數據將以塊(block)爲單位同步式分別存儲在不同的硬盤上,並對數據進行海明碼運算,與其他級別不同的是,該級別的海明碼會被寫入不同的磁盤。
7. RAID 10 (鏡像與條帶存儲)
RAID 10 不是獨創額一種RAID級別,它由RAID 0 和RAID 1 結合而成,RAID 10 繼承了RAID 0 的快速與高效,同時也繼承了RAID 1 的數據安全,RAID 10 至少需要四塊硬盤。RAID 10 通常有兩種結構,一種是RAID 0+1 結構,一種是RAID 1+0 結構。如果是RAID 1+0 ,則先使用四塊硬盤組合成兩個獨立的RAID 1 ,然後將兩個RAID 1 再組合爲一個RAID 0。
當數據寫入時,首先會以條帶的方式同步寫入由兩個RAID 1 組合而成的RAID 0 中,隨後,當數據被寫入由具體磁盤組成的RAID 1 時,又可以實現雙磁盤鏡像功能。
缺點:RAID 10 繼承了RAID 0 和RAID 1 的優點,但同時也繼承了一些缺點,RAID 10 的磁盤利用率很低,只有50%。
2.4.9 創建與管理RAID實例
1. 創建硬盤分區
Hex code (type L to list codes): fd格式fd爲RAID格式
2. 創建RAID(本例將分別創建RAID 0 與RAID 5)
Linux中創建磁盤陣列可以使用mdadm命令,在Centos 6.3中,目前支持的RAID級別有RAID 0 、RAID 1、RAID 4、RAID 5、RAID 6、RAID 10。
mdadm
描述:管理linux軟件RAID設備
用法:mdadm [模式] 選項 <RAID設備>
選項:-C創建軟件RAID(create)
-l指定RAID級別(level)
-n指定磁盤個數
-x指定備用設備個數
[root@instructor ~]# mdadm -C /dev/md0 -l 0 -n 4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 [root@instructor ~]# mdadm -C /dev/md5 -l 5 -n 3 -x 1 /dev/sd{b,c,d,e}2 [root@instructor ~]# mdadm --detail /dev/md0查看md0信息
3. 格式化與掛載
[root@instructor ~]# mkfs.ext4 /dev/md0 [root@instructor ~]# mkfs.ext4 /dev/md5
將磁盤陣列設備設置爲開機自動掛載項,Centos系統開機會讀取磁盤陣列的配置文件/etc/mdadm.conf以啓動RAID設備。下面兩條命令可以幫助我們快速創建這樣的配置文件,DEVICE行代表填寫所有磁盤陣列的設備成員名稱,ARRAY行描述磁盤陣列具體的基本信息,包括名稱、級別、UUID等信息。
[root@instructor ~]# echo "DEVICE /dev/sdb1 /dev/sdb2 /dev/sdc1 /dev/sdc2 /dev/sdd1 /dev/sdd2 /dev/sde1 /dev/sde2" > /etc/mdadm.conf [root@instructor ~]# mdadm -Evs >> /dev/mdadm.conf [root@instructor ~]# cat /dev/mdadm.conf ARRAY /dev/md/5 level=raid5 metadata=1.2 num-devices=3 UUID=762e0a76:527fd9d4:2e6ff87d:297dfa17 name=instructor.example.com:5 spares=1 devices=/dev/sdb2,/dev/sdc2,/dev/sdd2,/dev/sde2 ARRAY /dev/md/0 level=raid0 metadata=1.2 num-devices=4 UUID=16eaae13:deb2233a:cf5b1611:b1971321 name=instructor.example.com:0 devices=/dev/sdb1,/dev/sdc1,/dev/sdd1,/dev/sde1 [root@instructor ~]# echo "/dev/md0 /raid0 ext4 defaults 0 0" >> /etc/fstab [root@instructor ~]# echo "/dev/md5 /raid5 ext4 defaults 0 0" >> /etc/fstab
2.4.10 RAID性能測試
[root@instructor ~]# time dd if=/dev/zero of=/raid5/1.txt bs=1M count=1500 [root@instructor ~]# time dd if=/dev/zero of=/raid0/1.txt bs=1M count=1500
設備或分區hdparm -t /dev/sd
2.4.11 RAID故障模擬
[root@instructor ~]# mdadm /dev/md5 -f /dev/sdb2 mdadm: set /dev/sdb2 faulty in /dev/md5
註釋:使用-f選項(failed)模擬磁盤sdb2的損壞
由於上面做性能測試時已經往RAID 5 中寫入了1.5GB的數據,所以使用命令模擬磁盤損壞後,快速查看RAID詳細信息可以看出正在使用/dev/sde2重建數據(還原數據),而原來的/dev/sdb2成了損壞的空閒設備。