RAID、LVM和btrfs文件系統
Redundant Arrays of Inexpensive Disks,廉價磁盤冗余陣列;
Redundant Arrays of Independent Disks,獨立磁盤冗余陣列;
將多個相對廉價的IDE接口的磁盤組合成一個"陣列",並不是將磁盤簡單的羅列在一起,而是根據特定規則進行組合,從而可以實現提高IO性能,實現磁盤冗余容錯,或者此二功能兼具;
RAID的好處:
提高IO性能:磁盤並行讀寫機制;
提高磁盤耐用性:通過磁盤冗余實現容錯;
RAID的級別:
多塊磁盤組織在一起的工作方式;
RAID的實現方式:
基於硬件實現:
外接式磁盤陣列:通過擴展接口或擴展插槽提供具有RAID功能的適配硬件設備;
式磁盤陣列:主板集成的RAID控制器;
基於軟件模擬實現:
通過應用程序模擬硬件功能;
RAID的功能級別:
RAID-0:條帶卷,strip
讀寫性能提升
磁盤可用空間:N*min(S1,S1,...)
磁盤空間利用率:100%
無容錯能力
至少需要2塊磁盤
RAID-1:鏡像卷,mirror
讀性能提升,寫性能有所下降;
磁盤可用空間:1*min(S1,S2,...)
磁盤利用率:1/N
具備容錯能力
至少需要2塊磁盤
RAID-5:帶有奇偶校驗信息的條帶卷;
讀寫性能均提升
可以磁盤空間:(N-1)*min(S1,S2,...)
磁盤利用率:(N-1)/N
具備容錯能力
至少需要3塊磁盤
RAID-6:雙重奇偶校驗的條帶卷;
讀寫性能均提升
可以磁盤空間:(N-2)*min(S1,S2,...)
磁盤利用率:(N-2)/N
具備容錯能力
至少需要4塊磁盤
RAID的混合級別:
RAID-10:讀、寫性能提升
具備容錯能力
磁盤利用率:1/2
至少需要4塊磁盤
RAID-01:讀、寫性能提升
具備容錯能力
磁盤利用率:1/2
至少需要4塊磁盤
RAID-50
讀、寫性能提升
具備容錯能力
至少需要6塊磁盤
JBOD:Just a Bunch Of Disks,僅僅是一組磁盤;將多塊磁盤的空間合並成一個更大的連續的存儲空間;有人將此方式稱為"跨區";
對於RAID,常用的級別:RAID-0, RAID-1, RAID-5, RAID-10, RAID-50,JBOD
二、CentOS下軟件RAID的實現:
利用內核中的md(multi devices)模塊
mdadm:模塊化的工具
格式:mdadm [mode] <raiddevice> [options] <component-devices>
[mode]:
創建模式:-C, --create
裝配模式:-A, --assemble
監控模式:-F, --follow, --monitor
管理模式:無選項開關
增長模式:-G, --grow
混雜模式:-D, -S
create, build, or grow:
-n, --raid-devices=
指定參與軟RAID的磁盤的數量;
-l, --level=
When used with --create, options are: linear, raid0, 0, stripe, raid1, 1, mirror, raid4, 4, raid5, 5, raid6, 6, raid10, 10, mul tipath, mp, faulty, container.
-x, --spare-devices=
指定陣列中空閑的用於自動故障倒換使用的設備數量;
-c, --chunk=
指定條帶化級別的RAID中,每個區塊(CHUNK)的大小;
-a, --auto{=yes,md,mdp,part,p}{NN}
自動創建目標RAID設備文件;
管理模式:
-a, --add:向陣列中添加新設備;
-r, --remove:從陣列中移除設備;
-f, --fail:將設備標記為失效;
混雜模式:
-D, --detail:顯示陣列信息;
通過輸出重定向保存陣列的裝配記錄:
mdadm -D --scan >> /etc/mdadm.conf
-S, --stop:停止陣列功能;
示例:
mdadm -C md0 -n 4 -l 5 -a yes /dev/sdb /dev/sdc /dev/sdd /dev/sde
mdadm -S /dev/md0
查看md設備的信息:
mdadm -D
保存裝配信息:
mdadm -D --scan >> /etc/mdadm.conf
重新裝配md陣列:
mdadm -A /dev/md0
三、邏輯卷管理
LVM:邏輯卷管理器,使用純軟件的方式組織一個或多個底層的物理塊設備,將他們重新定義為一個邏輯塊設備
利用linux內核中的dm(device mapper)模塊實現,可以將一個或多個底層設備,按照預期規劃組織成特定的形式,從而實現更高級的邏輯磁盤管理方式
使用DM模塊實現LVM管理的一般性步驟:
1.創建並標識物理卷,PV
2.基於PV創建卷組,即邏輯塊設備(VG),同時指定PE的大小;
註意:一旦卷組創建完成,則PE的大小將固定下來,其值無法再次進行修改;如果想要調整PE大小,只能重新定義卷組;
3.在已有的卷組中,創建邏輯卷;
4.需要在邏輯卷中創建文件系統(高級格式化);
5.掛載;
物理卷的管理:
註意:如果想要讓一個基本分區成為物理卷,必須將分區的系統ID修改為83
物理卷管理的相關命令:
pvcreate:將普通的塊設備創建為物理卷設備;創建物理卷;
pvremove:將物理卷設備轉變為普通塊設備;刪除物理卷;
pvdisplay:顯示物理卷的詳細信息;
pvs:顯示物理卷的簡短信息;
pvmove:將某個物理卷中的所有被LV占用的PE移動到其他的物理卷中;
卷組管理的相關命令:
vgcreate
格式:vgcreate [OPTIONS] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath...]
-s, --physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE]
用於指定PE的大小,默認單位為MiB,默認的大小為4MiB;
vgreduce:從卷組中移除物理卷;
註意:必須保證被移除的物理卷上沒有被占用的PE;如果有,則需要先對物理卷執行pvmove命令,再執行移除操作;
vgextend:向卷組中添加物理卷;
vgdisplay:顯示卷組的詳細信息;
vgs:顯示卷組的簡短信息;
邏輯卷管理的相關命令:
lvcreate:創建邏輯卷
-L, --size LogicalVolumeSize[bBsSkKmMgGtTpPeE]
指定邏輯卷的大小,其值不能超出卷組的容量;
-l, --extents LogicalExtentsNumber[%{VG|PVS|FREE|ORIGIN}]
在創建邏輯卷時,指定邏輯卷中包含的LE的數量或者某個特定值的百分比;
-i, --stripes Stripes
在創建邏輯卷時,以條帶的方式創建,並指明在邏輯卷上的條帶的數量;
-n, --name LogicalVolume{Name|Path}
指明邏輯卷的名稱;
-s, --snapshot OriginalLogicalVolume{Name|Path}
創建快照卷;
-p, --permission {r|rw}
創建邏輯卷時指明此邏輯卷的操作權限;
-a, --activate {y|ay|n|ey|en|ly|ln}
-ay:創建邏輯卷的命令執行之後立即激活邏輯卷
-an:創建邏輯卷的命令執行之後將邏輯卷設置為停用狀態;
lvs:顯示邏輯卷簡要信息
lvdisplay:顯示邏輯卷信息
lvextend:擴展邏輯卷的物理邊界;
-L [+]SIZE[kKmMgGtT] /PATH/TO/LV
resize2fs [-f] /PATH/TO/LV
註意:擴展邏輯卷的空間,可以在線進行;
擴展邏輯卷的示例:(邏輯卷的路徑通常為/dev/卷組名/邏輯卷名)
lvextend -L +10G 邏輯卷的路徑
resize2fs -f 邏輯卷的路徑 //將邏輯邊界擴展到物理邊界的大小
lvreduce:縮減邏輯卷的物理邊界;
lvreduce -L [-]SIZE[kKmMgGtT] /PATH/TO/LV
resize2fs [-f] /PATH/TO/LV LV_SIZE 縮減邏輯卷的邏輯邊界
註意:
1.在縮減邏輯卷空間時,先縮減邏輯邊界,再縮減物理邊界;
2.縮減邏輯卷空間前,先卸載並停用邏輯卷,縮減之後,再啟用掛載即可;
3.建議在縮減邏輯卷之前,對文件系統進行檢測,以保證數據一致性;
縮減邏輯卷的示例:
umount 掛載邏輯卷的目錄 //縮減邏輯卷不能在線進行,必須先解除掛載
e2fsck 邏輯卷的路徑 //檢查並修復邏輯卷
resize2fs -f 邏輯卷的路徑 10G //減少邏輯邊界到10G
lvchange -an 邏輯卷的路徑 //修改邏輯卷為停用狀態
lvreduce -L 10G 邏輯卷的路徑 //減少邏輯卷物理邊界到10G
lvchange -ay 邏輯卷的路徑 //修改邏輯卷為激活狀態
mount 邏輯卷的路徑 掛載邏輯卷的目錄 //掛載邏輯卷
四、邏輯卷的快照
1.快照的定義:
1)其本身也是邏輯卷,可以將其視為做快照的目標邏輯卷的另外一個訪問路徑;
2)快照卷是一種特殊的邏輯卷,在其創建之初,其存儲空間並沒有任何消耗;只有當原來的邏輯卷中數據發生變化時,才會消耗快照卷空間;
3)快照卷中只包含原有邏輯卷中被更改的數據或自生成快照邏輯卷之後快照卷中更改的數據;
4)快照卷也可以使用lvextend進行擴容;
5)通常來說,快照卷和原卷會共用很多的PE,因此快照卷與原卷就必須在同一VG上;在從快照卷備份數據的過程中,必須要保證,變化的數據文件的總量不能超過快照卷大小;
2.創建快照卷:
lvcreate -L SIZE_SNAPSHOP -s -p r -n LV_NAME_SNAPSHOT /PATH/TO/LV_ORIGIN
示例:
lvcreate -L 5G -s -p r -n lv_snap /dev/vg/lv
mkdir /mnt/snapshot
mount /dev/vg/lv_snap /mnt/snapshot/
完成數據的備份之後:
umount /mnt/snapshot/
lvremove /dev/lv_snap
五、btrfs文件系統
1.btrfs的特性:
1)可擴展性:
2)多物理卷支持;
3)寫時復制的數據更新機制(CoW);
更新、修改等操作是在復制之後替換指針;
4)數據及元數據的校驗碼;
5)子卷管理;
6)快照,快照的快照;文件的快照;
7)透明壓縮,隱形壓縮;
2.btrfs命令:
格式:btrfs <command> [<args>]
<command>
filesystem:
btrfs-filesystem - control btrfs filesystem
btrfs filesystem <subcommand> <args>
df [options] <path> 顯示btrfs文件系統的空間使用率;
label [<dev>|<mountpoint>] [<newlabel>] 查看或設置btrfs文件系統的卷標;
resize [<devid>:][+/-]<size>[kKmMgGtTpPeE]|[<devid>:]max <path> 在線修改文件系統的大小;
show [--mounted|--all-devices|<path>|<uuid>|<device>|<label>] 查看btrfs文件系統相關的信息;
sync <path> 強制將內存中的數據同步至文件系統;
usage [options] <path> [<path>...] 查看btrfs文件系統上各硬件設備的磁盤使用率;
device:
btrfs-device - control btrfs devices
btrfs device <subcommand> <args>
add [-Kf] <dev> [<dev>...] <path> 向btrfs文件系統中添加新設備;
delete <dev> [<dev>...] <path> 從btrfs文件系統中刪除設備;
balance:btrfs-balance - balance btrfs filesystem
btrfs balance <subcommand> <args>
start [options] <path> 在線調整跨設備的chunk;修改數據及元數據的組織方式;
-d[<filters>]
-dconvert={raid0, raid1, raid10, raid5, raid6, single.}
-m[<filters>]
-mconvert={raid0, raid1, raid10, raid5, raid6, dup, single.}
-s[<filters>]
-sconvert={raid0, raid1, raid10, raid5, raid6, single.}
pause <path> 暫停正在運行的平衡操作;
cancel <path> 撤銷此前的正在運行或暫停的平衡操作;
status [-v] <path> 查看平衡過程的狀態;
resume <path> 恢復被打斷的平衡過程;
subvolume:
btrfs-subvolume - control btrfs subvolume(s)
btrfs subvolume <subcommand> [<args>]
create [-i <qgroupid>] [<dest>]<name> 創建子卷;
delete [options] <subvolume> [<subvolume>...] 刪除子卷;
snapshot [-r] <source> <dest>|[<dest>/]<name> 為指定的子卷創建快照卷;
五、ext系列文件系統和btrfs之間安全轉換
btrfs-convert命令
btrfs-convert [options] <device>
從ext轉換至btrfs:
btrfs-convert /dev/sde1
從btrfs回滾至ext:
btrfs-convert -r /dev/sde1
註意:轉換操作需要提前將設備卸載;
RAID、LVM和btrfs文件系統