1. 程式人生 > >Linux進階篇--磁碟陣列(RAID)和邏輯卷管理

Linux進階篇--磁碟陣列(RAID)和邏輯卷管理

磁碟陣列RAID

  • RAID:RedundantArrays of Inexpensive(Independent)Disks
    早期被稱為RedundantArrays of Inexpensive Disks(廉價的磁碟陣列),後來隨著技術的不斷完善,又被稱為RedundantArrays of Independent Disks(獨立的磁碟冗餘陣列)
  • 其作用是:多個磁碟合成一個“陣列”來提供更好的效能、冗餘,或者兩者都提供

RAID
* 提高IO能力
  磁碟並行讀寫
* 提高耐用性
  磁碟冗餘來實現
* 級別:多塊磁碟組織在一起的工作方式有所不同
* RAID實現的方式:
  外接式磁碟陣列:通過擴充套件卡提供適配能力
  內接式RAID:主機板整合RAID控制器
  安裝OS前在BIOS裡配置
  軟體RAID:通過OS實現

注意:做raid要求raid成員大小要求一致;即取相同的空間做raid,如兩個硬碟1個80M,1個100M,那麼兩個硬碟均取80M來做radi0
RAID級別
  RAID-0:條帶卷,strip
  RAID-1: 映象卷,mirror
  RAID-2
  ..
  RAID-5
  RAID-6
  RAID-10
  RAID-01
* RAID0
  讀、寫效能提升;
  可用空間:N*min(S1,S2,…)
  無容錯能力
  最少磁碟數:2, 2+
在讀寫資料時,多塊硬碟同時進行讀寫操作,大大提升了讀寫的效能
* RAID1
  讀效能提升、寫效能略有下降;
  可用空間:1*min(S1,S2,…)
  有冗餘能力
  最少磁碟數:2, 2N
在寫入資料時,要同時對兩塊硬碟寫入相同的資料,這樣一來,寫入一份資料要花費更多的資源,降低了系統寫效能
* RAID4
  多塊資料盤異或運算值存於專用校驗盤
該模式會拿出一塊磁碟專用於儲存異或校驗值,一旦校驗盤損壞,系統安全性將會降低
* RAID5
  讀、寫效能提升
  可用空間:(N-1)*min(S1,S2,…)
  有容錯能力:允許最多1塊磁碟損壞
  最少磁碟數:3, 3+
每一個硬碟都有一個異或校驗值,一旦其中某塊硬碟發生故障,通過異或校驗值可以計算出該硬碟的資料,以達到冗餘的目的。同時,伺服器將會處於“忙碌(降級)”狀態,系統讀寫效能大大降低,需要及時把發生故障的硬碟替換。異或校驗值會佔用硬碟空間,因此硬碟利用率會被稍微降低,利用率為(n-1)/n
* RAID-6:
  讀、寫效能提升
  可用空間:(N-2)*min(S1,S2,…)
  有容錯能力:允許最多2塊磁碟損壞
  最少磁碟數:4, 4+
該模式與raid5類似,不同之處在於raid6每個成員記憶體有兩個異或校驗值,因此允許損壞2塊硬碟,硬碟利用率為(n-2)/n
* RAID10
  讀、寫效能提升
  可用空間:N*min(S1,S2,…)/2
  有容錯能力:每組映象最多隻能壞一塊
  最少磁碟數:4, 4+
raid10即對硬碟先兩兩做raid1,再對兩組raid1做raid0
* RAID01
  多塊磁碟先實現RAID0,再組合成RAID1
注意:raid10和raid01硬碟利用率均為50%,但raid10容錯性比raid01更好
* RAID-50
  多塊磁碟先實現RAID5,再組合成RAID0
* JBOD:Just a Bunch Of Disks
  功能:將多塊磁碟的空間合併一個大的連續空間使用
  可用空間:sum(S1,S2,…)
該模式對每個磁碟成員大小沒有要求,寫入資料時,將第一塊磁碟寫滿後,再寫入第二塊磁碟,以此類推;因此既無容錯性,讀寫效能也大大降低,一般情況下不推薦這種模式
* RAID7
  可以理解為一個獨立儲存計算機,自身帶有作業系統和管理工具,可以獨立執行,理論上效能最高的RAID模式
*常用RAID級別:
  RAID-0, RAID-1, RAID-5, RAID-10, RAID-50, JBOD

邏輯卷管理(LVM)

傳統分割槽擴充套件性差,邏輯卷能夠很好的解決該問題
* 允許對捲進行方便操作的抽象層,包括重新設定檔案系統的大小
* 允許在多個物理裝置間重新組織檔案系統
  將裝置指定為物理卷(PV)
  用一個或者多個物理捲來建立一個卷組(VG)
  物理卷是用固定大小的物理區域(Physical Extent,PE)來定義的
  在物理捲上建立的邏輯卷(LVM)是由物理區域(PE)組成
  可以在邏輯捲上建立檔案系統(FS_TYPE)

LVM介紹
* LVM: Logical Volume Manager,ersion: 2
* dm: device mapper:將一個或多個底層塊裝置組織成一個邏輯裝置的模組
* 裝置名:/dev/dm-#
* 軟連結:
  /dev/mapper/VG_NAME-LV_NAME
    /dev/mapper/vol0-root
  /dev/VG_NAME/LV_NAME
    /dev/vol0/root

[root@centos7 ~]#ll /dev/vg0/lv0 /dev/mapper/vg0-lv0 
lrwxrwxrwx. 1 root root 7 Aug 19 16:31 /dev/mapper/vg0-lv0 -> ../dm-0
lrwxrwxrwx. 1 root root 7 Aug 19 16:31 /dev/vg0/lv0 -> ../dm-0

LVM更改檔案系統的容量
* LVM可以彈性的更改LVM的容量
  通過交換PE來進行資料的轉換,將原來LV內的PE轉移到其他的裝置中以降低LV的容量,或將其他裝置中的PE加到LV中以加大容量

PV管理工具
* 顯示pv資訊
  pvs:簡要pv資訊顯示
  pvdisplay
* 建立pv
  pvcreate /dev/DEVICE

VG管理工具
* 顯示卷組
  vgs
  vgdisplay
* 建立卷組
  vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupNamePhysicalDevicePath[PhysicalDevicePath…]
* 管理卷組
  vgextend VolumeGroupName PhysicalDevicePath[PhysicalDevicePath…]
  vgreduce VolumeGroupName PhysicalDevicePath[PhysicalDevicePath…]
* 刪除卷組
  先做pvmove,再做vgremove

知識擴充套件:

把已經使用的PE移動到同一個卷組的其他成員的物理卷(pv)上;
注意:要確保同一個卷組中有足夠可用的空間
pvmove  /dev/sde    移動的是空間(PE)不是資料
vgreduce newvg0  /dev/sde   把/dev/sde從卷組newvg0中刪除
pvremove  /dev/sde   刪除物理卷

LV管理工具
* 顯示邏輯卷
  lvs
  Lvdisplay
* 建立邏輯卷
  lvcreate -L #[mMgGtT] -n NAME VolumeGroup
  lvcreate -l 60%VG -n mylvtestvg
  lvcreate -l 100%FREE -n yourlvtestvg
* 刪除邏輯卷
  lvremove /dev/VG_NAME/LV_NAME
* 重設檔案系統大小
  fsadm [options] resize device [new_size[BKMGTEP]]
  resize2fs [-f] [-F] [-M] [-P] [-p] device [new_size]

實驗1:建立邏輯卷

1、準備磁碟或邏輯卷
如果從硬碟中分出一部分空間作為邏輯卷,需要通過對硬碟分割槽來分離出需要的硬碟空間,分割槽以後更改ID型別為8e
2、建立物理卷
pvcreate /dev/sdd1(分割槽名)  /dev/sde(裝置名)
3、建立卷組
vgcreate -s 16M vg0 /dev/sdd1  /dev/sde
-s   是扇區的指數倍,即2^n,至少128k
4、建立邏輯卷
lvcreate -L 1.5G -n lv0  vg0
-L  以容量為單位指定邏輯卷大小
-l  以pe為單位指定邏輯卷大小
PE在邏輯卷中的名稱為LE
5、建立檔案系統
mkfs.ext4 /dev/vg0/lv0
6、掛載
mount  /dev/vg0/lv0  /mnt/lv0

實驗2:刪除所有的PV、VG、LVM

1、刪除fstab表中掛載項
2、取消掛載
umount  /mnt/lv0
umount  /mnt/lv0
3、刪除邏輯卷
lvremove  /dev/newvg0/lv{0,1}
4、刪除卷組
vgremove  /dev/newvg0
5、刪除物理卷
pvremove /dev/sdc  /dev/sdd1

擴充套件和縮減邏輯卷
* 擴充套件邏輯卷:
  lvextend -L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
  resize2fs /dev/VG_NAME/LV_NAME
  lvresize -r -l +100%FREE /dev/VG_NAME/LV_NAME
* 縮減邏輯卷:
  umount /dev/VG_NAME/LV_NAME
  e2fsck -f /dev/VG_NAME/LV_NAME
  resize2fs /dev/VG_NAME/LV_NAME #[mMgGtT]
  lvreduce -L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
  mount

實驗1:擴充套件邏輯卷

擴充套件邏輯卷,首先要擴展卷組
1、檢視卷組空間 vgdisplay
2、如果空間足夠,直接擴充套件 
lvextend -l 100%FREE /dev/vg0/lv0
然後擴充套件檔案系統:
ext系列檔案系統:resize2fs /dev/vg0/lv0
xfs檔案系統:xfs_grow  /mnt/lv0
或者一步完成:lvextend -r -l 100%FREE /dev/vg0/lv0
3、如果空間不足,則需要新增物理卷
(1)pvcreate  /dev/sdc   增加物理卷
(2)vgextend vg0 /dev/sdc  擴展卷組
(3)lvextend -L +1G /dev/vg0/lv0 邏輯卷在原來的基礎上增加大小+1G
lvextend -L 3G  /dev/vg0/lv0  邏輯卷直接指定大小3G
(4)擴充套件檔案系統
ext系列檔案系統  resize2fs /dev/vg0/lv0(裝置名)
xfs檔案系統  xfs_grow  /mnt/lv1(掛載點)
擴充套件邏輯卷,由於新增分割槽沒有檔案系統,因此硬碟容量雖然加入邏輯卷,但是卻不能寫入資料,因此需要擴充套件檔案系統
或者:
擴充套件空間和擴充套件檔案系統一步完成,不用管是哪種檔案系統
lvextend -r -L +1G /dev/vg0/lv0

實驗2:縮減邏輯卷

邏輯捲縮減(ext系列) 
xfs檔案系統不支援縮減,ext4支援縮減
邏輯捲縮減,資料要提前做備份

1、縮減不支援線上縮減,要先取消掛載要縮減的邏輯卷
umount /mnt/lv0
2、檢查系統完整性(必須執行該步驟,否則後續會報錯)
fsck -f /dev/vg0/lv0
3、縮減檔案系統
resize2fs /dev/vg0/lv0  2G   縮減後的大小必須大於邏輯卷大小
4、縮減邏輯卷
lvreduce  -L 2G /dev/vg0/lv0  邏輯捲縮減大小必須和檔案系統縮減大小一致
5、重新掛載
mount -a
6、檢視縮減後的結果
df -h

跨主機遷移卷組
* 源計算機上
  1 在舊系統中,umount所有卷組上的邏輯卷
  2 vgchange –a n vg0
    lvdisplay
  3 vgexport vg0
    pvscan
    vgdisplay
    拆下舊硬碟
* 在目標計算機上
  4 在新系統中安裝舊硬碟,並vgimport vg0.
  5 vgchange –ay vg0
  6 mount所有卷組上的邏輯卷

實驗:跨主機遷移卷組

1、為防止名字與目標主機上的邏輯卷、卷組衝突,需要在遷移之前對邏輯卷、卷組更改名稱
vgrename  vg0 newvg0
lvrename  /dev/newvg0/lv0 newlv0(卷組名稱更改後,邏輯卷可以不用更改名稱)
lvdisplay  檢視更改後的邏輯卷資訊
2、取消掛載
umount  /mnt/lv0
檢視該邏輯卷所在分割槽下是否有其他邏輯卷,如果有,也要取消掛載
umount  /mnt/lv1
3、卷組設定為非活動狀態
vgchange  -an  newvg0
vgdisplay、lvdisplay   檢視卷組、邏輯卷狀態
4、卷組設定為匯出狀態
vgexport  newvg0
5、把邏輯卷所在硬碟拆下來,並且安裝到目標裝置上
pvscan  在目標裝置上檢視物理卷
6、vgimport  newcg0   匯入卷組
7、vgchange -ay  newvg0  啟用卷組
8、mkdir /mnt/newlv0

注意:centos6預設檔案系統為ext系列,因此從centos7遷移到centos6版本,會有問題,如果從centos6往centos7上遷移,則沒問題

邏輯卷管理器快照

  • 快照是特殊的邏輯卷,它是在生成快照時存在的邏輯卷的準確拷貝
  • 對於需要備份或者複製的現有資料臨時拷貝以及其它操作來說,快照是最合適的選擇
  • 快照只有在它們和原來的邏輯卷不同時才會消耗空間
      在生成快照時會分配給它一定的空間,但只有在原來的邏輯卷或者快照有所改變才會使用這些空間
      當原來的邏輯卷中有所改變時,會將舊的資料複製到快照中。
      快照中只含有原來的邏輯卷中更改的資料或者自生成快照後的快照中更改的資料
      建立快照的卷大小隻需要原始邏輯卷的15%~20%就夠了,也可以使用lvextend放大快照
  • 快照就是將當時的系統資訊記錄下來,就好像照相一般,若將來有任何資料改動了,則原始資料會被移動到快照區,沒有改動的區域則由快照區和檔案系統共享
  • 由於快照區與原本的LV共用很多PE的區塊,因此快照與被快照的LV必須在同一個VG中.系統恢復的時候的檔案數量不能高於快照區的實際容量

使用LVM快照
* 為現有邏輯卷建立快照
  lvcreate -l 64 -s -n data-snapshot -p r /dev/vg0/data
* 掛載快照
  mkdir -p /mnt/snap
  mount -o ro /dev/vg0/data-snapshot /mnt/snap
* 恢復快照
  umount /dev/vg0/data-snapshot
  umount /dev/vg0/data
  lvconvert –merge /dev/vg0/data-snapshot
* 刪除快照
  umount /mnt/databackup
  lvremove /dev/vg0/databackup

實驗1-1:建立快照(ext系列檔案系統)

1、檢視卷組是否有多餘空間,如果有,建立邏輯卷的快照
lvcreate -n lv0-snapshot -s -L 1G  /dev/vg0/lv0
或lvcreate -n lv0-snapshot -s -p r -L 1G  /dev/vg0/lv0  加上-p r選項,把檔案裝置只讀,保證資料完整性
lvdisplay
2、掛載快照邏輯卷
mkdir /mnt/lv0-snapshot
mount /dev/lv0-snapshot  /mnt/lv0-snapshot
ext系列檔案系統雖然快照邏輯卷和原有邏輯卷uuid一致,但不用使用-o nouuid選項,這是檔案系統特性造成的結果
3、ls  /mnt/lv0-snapshot   檢視快照檔案

實驗1-2:建立快照(xfs檔案系統)

1、建立快照邏輯卷
lvcreate -n lv1-snapshot -s -L 1G /dev/vg0/lv1
2、掛載快照邏輯卷
mkdir /mnt/lv1-snapshot
mount -o nouuid /dev/vg0/lv1-snapshot  /mnt/lv1-snapshot

注意:掛載時由於xfs檔案系統下快照邏輯卷和原有邏輯卷uuid一致,因此不能掛載;可以使用mount -o nouuid選項進行掛載。

實驗2:根據快照還原資料

1、取消掛載
umount  /mnt/lv0   取消邏輯卷掛載
umount  /mnt/lv0-snapshot   取消快照邏輯卷掛載
2、把快照資料還原到原來的邏輯卷
lvconvert --merge /dev/vg0/lv0-snapshot
3、重新掛載邏輯卷
mount /dev/vg0/lv0  /mnt/lv0

實驗3:刪除快照

1、取消快照邏輯卷掛載
umount  /mnt/lv0-snapshot
2、刪除快照
lvremove  /dev/vg0/lv0-snapshot