Linux 學習之路(十一):RAID和LVM
傳輸速度 Mb/8=MB
硬碟的介面:
IDE(ATA):133Mbps 並行匯流排
SATA:300Mbps,600Mbps,6Gbps 序列匯流排
USB:USB3.0:480Mbps 序列匯流排
SCSI:Small Computer System Interface轉速比較塊
UltraSCSI,320Mbps 並行匯流排
SAS: 序列2.5英寸,轉速快,造價高
RAID
獨立磁碟冗餘陣列 (Redundant Array of Independent Disks, RAID) 是一種將多個磁碟驅動器元件(通常是多塊硬碟或多個分割槽)組合為一個邏輯單元的儲存技術。根據 RAID 的部署情況,這個邏輯單元可以是單個的檔案系統,也可以是一個能在其上建立多個分割槽的透明中間層。根據所需的冗餘量和效能要求,資料按照
#RAID 級別 中的某一種方式分佈在驅動器中。所選的 RAID 級別決定了是否可以防止資料丟失(硬碟故障時)、是否提高效能或結合兩者優勢。
RAID級別:
級別 | 效能表現 | 冗餘能力(容錯能力) | 空間利用率 | 需要盤數 |
---|---|---|---|---|
0條帶 | 讀寫效能提升幾乎n倍 | 無 | ns(一塊s) | 至少2塊盤 |
1映象 | 寫下降,讀提升 | 無 | 1/2 | 至少2塊盤 |
5校驗盤 | 讀、寫提升 | 有 | (n-1)/n | 至少需要3塊 |
01(先條帶後鏡像) | 讀、寫提升 | 有 | 1/2 | 至少需要4塊 |
10 | 讀、寫提升 | 有 | 1/2 | 至少需要4塊 |
JBOD(將多個小盤組合成一個大盤) | 無提升 | 無 | 100% | 至少需要2塊 |
50 | 讀、寫提升 | 有 | (n-2)/n | 至少需要6塊 |
n指幾塊盤,s指每塊盤大小,如果建立一個2G的RAID5: $$ \frac {n-1} {n}s=2G
$$ 注:n=3,s=1G
RAID的實現形式
硬體RAID
- 將RAID控制器與外部裝置連線起來。
- RAID晶片在內部控制SATA口插槽,即在BIOS介面配置啟用晶片,並將硬碟配置RAID級別。
- 作業系統需要安裝RAID的驅動程式,使之可以識別RAID。作業系統把RAID都識別為/dev/sda等磁碟。
軟體RAID
-
保證核心支援軟體RAID,核心中有一個裝置多磁碟md(multi disk)模組,可以讀取配置資訊。
-
md模擬一個RAID,邏輯RAID:/dev/md #,#數字標識不同RAID裝置,並不標識RAID級別。
-
在核心內部,由程式完成分配。再通過各自口存入自己的裝置中/dev/sda,sdc。
-
核心可以識別的軟RAID型別:fd型別。
mdadm(md):將任何塊裝置做成RAID。不同磁碟上的分割槽(建議)。
模式化的命令:
建立模式 -C
專用選項:-l:級別
-n:裝置個數
-a(yes|no):自動為其建立裝置檔案
-c:CHUNK大小,2^n,預設為64k
管理模式 --add,–del,–remove
模擬磁碟損壞的選項:
-f,–fail,–set-faulty
mdadm /dev/md # --fail /dev/sda7
監控模式 -F
檢視RAID陣列的詳細資訊(例如顯示所指定RAID的詳細資訊):
mdadm -D /dev/md1
將當前RAID資訊儲存至配置檔案,以便以後進行裝配
mdadm -D --scan > /etc/madam.conf
增長模式 -G
裝配模式 -A 重新識別RAID並組合起來
- 實驗:在同一塊磁碟的不同分割槽建立一個2G的RAID0(一般建議不要這麼做)
4個512M分割槽或者2個1G分割槽(兩塊盤要一樣)
#沒有其他RAID裝置的前提下的操作步驟
mdadm -C /dev/md0
#建立之前要指定在哪些裝置上建立,於是要先建立分割槽
fdisk /dev/sda
n
+1G
t #調整分割槽
L
fd
w
#通知核心重讀:
partprobe /sev/sda
#確保分割槽可以被識別
cat /proc/partitions
#建立裝置為/dev/md0,自動建立裝置檔案,級別為0,共2個裝置,分別是/dev/sda5和/dev/sda6
mdadm -C /dev/md0 -a yes -l 0 -n 2 /dev/sda{5,6}
#當前裝置下所有處於啟用狀態的RAID裝置
cat /proc/mdstat
#任何一個裝置要能啟用則要先格式化,然後掛載
#格式化raid
mke2fs -j /dev/md0
mdadm -D /dev/md1
#掛載
mount /dev/md0 /mnt
ls /mnt
- 建立一個2G的RAID1
2個2G的分割槽
#前提sda7\sda8都是2G分割槽
mdadm -C /dev/md1 -a yes -n 2 -l 1 /dev/sda7 /dev/sda8
cat /proc/mdstat
(映象磁碟的特點必須將每個資料位一一同步,即修改任一磁碟資料位,另一個也會被修改.)
fdisk -l #檢視裝置
mke2fs -j /dev/md1
mount /dev/md1 /media/
#複製一個檔案到/media下
cp /etc/inittab /media/
#在管理模式下模擬磁碟損壞
mdadm /dev/md1 -f /dev/sda8
#檢視md1資訊
mdadm --detail /dev/md1
#移除損壞盤
mdadm /dev/md1 -r /dev/sda8
#替換盤
mdadm /dev/md1 -a /dev/mda9(加入盤大小要與此前盤一致)
watch:週期性地執行指定命令,並以全屏方式顯示結果。
-n #:指定週期長度,單位為秒,預設為2
格式: watch -n # ‘COMMAND’
RAID5只要有冗餘都支援空閒盤
例如建立一個2G的RAID5:使用3個1G的。
一個空閒盤,則使用4個1G的。
條帶的倍數:chunk/block
軟RAID生成chunk的時候都要計算一下相當於多少個磁碟塊
在格式化的時候指定條帶的倍數,優化軟RAID效能:
mke2fs -j -E stride=16 -b 4096 /dev/sd0
DM:Device Mapper邏輯裝置
LVM 多路徑
snapshot快照:訪問檔案的另一條路徑
儲存發生了改變的資料,主要作用是實現資料備份
邏輯卷底層可以是分割槽、磁碟或者硬體RAID,只要是塊裝置都可以。
PV物理卷
pvcreate,pvs,pvscan,pvmove(移動),pvremove(移除),pvdisplay(檢視)
VG卷組
vgcreate,vgremove(覆蓋裡面的源資料),vgextend,vgreduce,vgs,vgdisplay,vgscan
vgcreate VG_NAME /PATH/TO/PV -s #:PE大小,預設為4MB
LV邏輯卷
lvcreate,lvremove,lvextend,lvreduce,lvs,lvdisplay
lvcreate -n LV_NAME -L #G VG_NAME
fdisk /dev/sda
10G,VG
n:7G+3G
t
L
8e
#檢視p
partprobe /dev/sda
cat /proc/partitions
#fdisk命令只支援建立15個分割槽
pvcreate /dev/sda{10,11}
#檢視當前系統PV
pvs
#詳細資訊
pvdisplay
#掃描當前pv
pvscan
vgs
vgcreate myvg /dev/sda{10,11}
vgremove myng
vgcreate -s 8M myvg/dev/sda{10,11}
vgdisplay myvg
#檢視VG當中有多少個pv
pvs
#移除pv上的資料
pvmove /dev/sda11
#縮減vg大小(直接拿掉一個pv):
vgreduce
#把一個物理卷加入到此擴展卷組
vgextend myvg /dev/sda12
lvcreate -L 50M -n testlv myvg
lvdisplay /dev/myvg/testlv
mke2fs -j /dev/myvg/testlv
mount /dev/myvg/testlv/mnt
ls /mnt
ls /dev/mapper/
lvremove /dev/mapper/myvg-testlv
一、擴充套件邏輯卷
lvextend
-L [+]#
ext2擴充套件邏輯邊界resize2fs
二、縮減邏輯卷
注意:1.不能線上縮減,得先解除安裝;
2.確保縮減後的空間大小依然能儲存原有的所有資料;
3.在縮減之前應該先強行檢查檔案,以確保檔案系統處於一致性狀態
df -lh
umount
e2fsck -f
resize2fs /PATH/TO/LV 5G
lvreduce -L [-] # /PATH/TO/LV
三、快照卷
1、生命週期為整個資料時長:在這段時長內,資料的增長量不能超出快照卷大小
2、快照卷應該是隻讀的
3、跟原卷在同一卷組內
lvcreate
-s
-p r|w
lvcreate -L # -n SLV_NAME -p r /PATH/TO/LV
lvcreate -L 50M -n testlv-snap -s -p r /dev/myvg/testlv
lvs
mount /dev/myvg/testlv-snap