首頁 > 軟體

LVM邏輯卷-建立、擴容、縮減、遷移、快照

2020-06-16 17:08:34

LVM邏輯卷
邏輯卷管理工具,允許在多個物理裝置之間重新組織檔案系統,包括重新設定檔案系統的大小
PE  物理盤區,類似於磁碟中的block
邏輯卷的基本儲存單位就是PE

dm:device mapper將一個或多個底層塊裝置組織成一個邏輯裝置的模組
裝置名:/dev/dm-#  //系統自動分配,常用軟連結定義
軟連結:兩種方式表示
/dev/mapper/卷組-邏輯卷
/dev/卷組/邏輯卷
LVM可以彈性的修改容量

基本概念:
pv  //物理卷
vg  //卷組
lv  //邏輯卷
本次實驗使用CentOS6版本,並在vmware虛擬機器上操作

實驗一 建立邏輯卷
第1步:準備三個磁碟sdb、sdc、sdd,建立物理卷
[root@CentOs6 ~]#fdisk /dev/sdb  #使用fdisk命令對磁碟sdb分割區
Device Boot      Start        End      Blocks  Id  System
/dev/sdb1              1        132    1060258+  8e  Linux LVM
#因為是實驗這裡只分1G容量,system型別修改成LVM
dd if=/dev/sdb of=/dev/sdc bs=1 count=512
dd if=/dev/sdb of=/dev/sdd bs=1 count=512
#將sdb的分割區表複製到sdc和sdd,這樣三塊磁碟分割區一致
partx -a /dev/sd{b,c,d}  #同步磁碟與記憶體資訊
lsblk  #檢查同步結果
#上面步驟,我們從三塊磁碟取出三個大小、型別一樣的分割區/dev/sdb1、 /dev/sdc1和/dev/sdd1
[root@CentOs6 ~]#pvcreate  /dev/sd{b,c,d}1  #建立3個物理卷pv
[root@CentOs6 ~]#pvs  #檢視物理捲摘要資訊
  PV        VG  Fmt  Attr PSize PFree  #VG為空,是因為我們還沒建立卷組
  /dev/sdb1      lvm2 ---- 1.01g 1.01g
  /dev/sdc1      lvm2 ---- 1.01g 1.01g
  /dev/sdd1      lvm2 ---- 1.01g 1.01g
[root@CentOs6 ~]#pvdisplay  /dev/sdb1   
#pvdisplay顯示詳細的物理卷資訊,此處只列出一個物理卷分析
  "/dev/sdb1" is a new physical volume of "1.01 GiB"
  --- NEW Physical volume ---
  PV Name              /dev/sdb1  #物理捲名稱
  VG Name                          #因為沒加入捲組,所以此處為空
  PV Size              1.01 GiB  #物理卷容量,跟我們規劃的一樣
  Allocatable          NO            #因為還未加入捲組,所以下面選項為空
  PE Size              0          #PE是物理捲的基本容量單位
  Total PE              0
  Free PE              0
  Allocated PE          0
  PV UUID              iRkKni-iG3a-U38w-bXGn-aIGV-bP14-Pua8bc

第2步:建立卷組,其容量為各個物理卷的總和
[root@CentOs6 ~]#vgcreate v-group /dev/sd{b,c,d}1 
#建立包含3個分割區的捲組,名稱為v-group
  Volume group "v-group" successfully created
[root@CentOs6 ~]#vgs  #顯示卷組的摘要資訊
  VG      #PV #LV #SN Attr  VSize VFree
  v-group  3  0  0 wz--n- 3.02g 3.02g
[root@CentOs6 ~]#vgdisplay  #顯示卷組的詳細資訊
  --- Volume group ---
  VG Name              v-group        #捲組名稱         
  VG Access            read/write  #卷組的存取形式是讀寫
  VG Status            resizable      #捲組容量大小可調
  MAX LV                0
  Cur LV                0
  Open LV              0
  Max PV                0            #未建立邏輯卷,所以包含LV選項的全為0
  Cur PV                3
  Act PV                3
  VG Size              3.02 GiB    #捲組容量,3個分割區容量的累加
  PE Size              4.00 MiB    #PE是基本容量單位,預設大小為4MiB
  Total PE              774            #PE總數量,其與PE大小相乘就是VG大小
  Alloc PE / Size      0 / 0          #已經分配給邏輯卷的PE
  Free  PE / Size      774 / 3.02 GiB #剩餘PE,因為還沒有建立邏輯卷
  VG UUID              aD3P8j-tNnP-KyXK-shWB-caTh-sCq8-j8B4qd

第3步:建立邏輯卷
[root@CentOs6 ~]#lvcreate -n logical-v -L 2G v-group  #建立2G大小的邏輯卷
  Logical volume "logical-v" created.
[root@CentOs6 ~]#lvs  #顯示邏輯卷的摘要資訊
  LV        VG      Attr      LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  logical-v v-group -wi-a----- 2.00g                                                   
[root@CentOs6 ~]#lvdisplay   
  --- Logical volume ---
  LV Path                /dev/v-group/logical-v  #邏輯卷的物理路徑
  LV Name                logical-v      #邏輯卷名稱
  VG Name                v-group    #邏輯卷所在的捲組
  LV UUID                zEU9qJ-fP3E-H2Dv-iULd-06Gy-yzH4-EnIwdw
  LV Write Access        read/write
  LV Creation host, time CentOs6.gao, 2017-08-12 09:42:53 +0800
  LV Status              available  #邏輯卷可用
  # open                0
  LV Size                2.00 GiB  #邏輯卷大小2G
  Current LE            512        #當前使用的
#至此邏輯卷就建立完成。使用上文提到的命令檢視物理卷、卷組資訊會發現,建立完lv後好多資訊條目都更新了
[root@CentOs6 ~]#ll /dev/v-group/logical-v 
lrwxrwxrwx. 1 root root 7 Aug 12 09:42 /dev/v-group/logical-v -> ../dm-0
#lv名稱其實是軟連結,指向的是我們前文說過的dm-#

第4步:將lv當作一塊獨立磁碟進行格式化、掛載、讀寫操作
1234 [root@CentOs6 ~]#mkdir /mnt/lv  #建立掛載點目錄
[root@CentOs6 ~]#mkfs.ext4 /dev/v-group/logical-v  #格式化成ext4檔案系統 
[root@CentOs6 ~]#mount /dev/v-group/logical-v /mnt/lv/  #掛載
最後就可以進行讀寫操作了

整個過程是按照下述流程操作:
準備磁碟--建立物理卷--建立卷組--建立邏輯卷

實驗二 擴充套件邏輯卷、縮減邏輯卷
擴充套件邏輯卷對使用者是透明的,lv一直是掛載狀態
[root@CentOs6 ~]#lvextend -L +256M /dev/v-group/logical-v
#對邏輯卷logical-v擴充套件256M的容量,前提是捲組還有足夠的剩餘空間
[root@CentOs6 ~]#df -h /dev/mapper/v--group-logical--v 
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/v--group-logical--v
                      2.0G  3.1M  1.9G  1% /mnt/lv
#df -h檢視發現,lv實際大小還是2G,並未增加256M,是因為檔案系統未同步
[root@CentOs6 ~]#resize2fs  /dev/mapper/v--group-logical--v 
root@CentOs6 ~]#df -h /dev/mapper/v--group-logical--v 
#同步檔案系統,因為我們實驗用的是ext4檔案系統,所以使用sesize2fs來同步,如果是xfs檔案系統則需要使用命令xfs_growfs來同步
#我們每次對lv進行擴充套件操作後都要記得同步檔案系統
#最後再次df檢查
[root@CentOs6 ~]#lvextend  -r -L +256M /dev/v-group/logical-v
#上述命令更簡單,在擴充套件lv同時同步檔案系統,一步搞定
#只要加上 -r 選項
如果還有一個分割區想要加入vg,比如/dev/sdb2,可以使用下述方法:
pvcreate /dev/sdb2
vgextend v-group /dev/sdb2
#只需要這兩步即可

邏輯卷縮減其實就是將一個邏輯卷占用的PE空間縮減,這樣做一般會有風險,因為縮減的空間可能有資料。所以如果一定要縮減的話建議先備份。本實驗環境無所謂
第1步:取消掛載邏輯卷
12 [root@CentOs6 ~]#umount /mnt/lv/
[root@CentOs6 ~]#df  #已經檢視不到lv信了

第2步:檢查檔案系統完整性 fsck -f
[root@CentOs6 ~]#e2fsck -f /dev/v-group/logical-v 
#這一步必須得做

第3步:縮減檔案系統
[root@CentOs6 ~]#resize2fs  /dev/v-group/logical-v  1G
#縮減檔案系統容量為1G

第4步:縮減邏輯卷
[root@CentOs6 ~]#lvreduce -L 1G /dev/v-group/logical-v
#縮減邏輯卷容量為1G
#縮減fs或者lv時都會有警告提示,所以要考慮清楚再行動,做實驗就沒關係了

第5步:重新掛載 
[root@CentOs6 ~]#mount /dev/v-group/logical-v  /mnt/lv/
[root@CentOs6 ~]#df -h
#最後掛載,df檢測,此外還可以使用vgdisplay、lvdisplay檢查邏輯卷是否縮減

注意:
xfs檔案系統不支援縮減

實驗三 遷移卷組到新系統
源裝置操作:
1、取消掛載卷組中的所有邏輯卷
[root@CentOs6 ~]#umount /mnt/lv/
#取消本機掛載

2、確保捲組名跟目標裝置不一樣
[root@CentOs6 ~]#vgrename v-group newvg0
  Volume group "v-group" successfully renamed to "newvg0"
#修改卷組名為newvg0,或者提前檢視目標裝置的捲組名稱,只要不一樣就行
#只要捲組名不一樣就行,邏輯卷名稱可改也可不改
[root@CentOs6 ~]#lvrename  /dev/newvg0/logical-v  newlv0
  Renamed "logical-v" to "newlv0" in volume group "newvg0"
#邏輯捲改名為newlv0

3、設定邏輯卷為非活動狀態,也就是說邏輯卷現在不可用
[root@CentOs6 ~]#vgchange  -a n newvg0 
  0 logical volume(s) in volume group "newvg0" now active
#捲組中0個邏輯卷是活動狀態,-a n表示使邏輯卷無效
[root@CentOs6 ~]#lvdisplay 
 LV Status              NOT available  #LV無效

4、匯出捲組
12345 [root@CentOs6 ~]#vgexport  newvg0
  Volume group "newvg0" successfully exported
#匯出捲組
[root@CentOs6 ~]#pvscan  #掃描磁碟物理卷
[root@CentOs6 ~]#pvdisplay  #會發現物理卷對應的捲組都是exported狀態

5、拆除硬碟,換到目標裝置上
在vmware上我們把磁碟檔案掛載到目標裝置上
我的是下面這三個虛擬機器磁碟檔案
CentOs6.9CentOS6.9-3.vmdk
CentOs6.9CentOS6.9-4.vmdk
CentOs6.9CentOS6.9-5.vmdk
將這三個檔案新增到目標裝置上,我的目標裝置是centos7
目標裝置操作:
1、掃描發現磁碟
[root@CentOS7 ~]#echo '- - - ' > /sys/class/scsi_host/host2/scan 
[root@CentOS7 ~]#lsblk
#掃描磁碟,然後檢查卷組是否存在

2、掃描物理卷,然後匯入捲組
[root@CentOS7 ~]#pvscan  #掃描物理卷
  PV /dev/sdb1    is in exported VG newvg0 [1.01 GiB / 8.00 MiB free]
  PV /dev/sdc1    is in exported VG newvg0 [1.01 GiB / 1.01 GiB free]
  PV /dev/sdd1    is in exported VG newvg0 [1.01 GiB / 1.01 GiB free]
  Total: 3 [3.02 GiB] / in use: 3 [3.02 GiB] / in no VG: 0 [0  ]
[root@CentOS7 ~]#vgimport newvg0  #匯入捲組,使用新組名
  Volume group "newvg0" successfully imported
[root@CentOS7 ~]#vgdisplay newvg0  //檢查卷組資訊

3、啟用邏輯卷
[root@CentOS7 ~]#vgchange  -a y newvg0 
  1 logical volume(s) in volume group "newvg0" now active
[root@CentOS7 ~]#lvdisplay 
#啟用邏輯卷,並檢視結果,這裡我只做了一個邏輯卷
#還可以使用blkid、vgdisplay、pvdisplay等命令檢視結果
#其實還可以在原裝置邏輯卷中提前存放一些資料,等遷移完成到目標裝置後,我們再檢視邏輯卷內的資料是否還存在。

實驗四 移除卷組中的磁碟
第1步:將要移除的磁碟的資料移到其他邏輯卷
把資料搬到同一卷組其他邏輯卷,要保證卷組有足夠的空間,搬的是儲存空間,裡面可能有資料
1234567891011121314 [root@CentOS7 ~]#pvmove /dev/sdb1 
 #把/dev/sdb磁碟PE空間遷移至其他邏輯卷,本實驗1個磁碟上建1個分割區
[root@CentOS7 ~]#pvdisplay  /dev/sdb1  #sdb已經沒有空間在使用了
 --- Physical volume ---
  PV Name              /dev/sdb1
  VG Name              newvg0
  PV Size              1.01 GiB / not usable 3.41 MiB
  Allocatable          yes
  PE Size              4.00 MiB
  Total PE              258
  Free PE              258
  Allocated PE          0
  PV UUID              iRkKni-iG3a-U38w-bXGn-aIGV-bP14-Pua8bc
#還可以檢視其他邏輯卷的PE free空間減少,就是因為接收了sdb1轉移的PE

第2步:從捲組中移除物理卷
[root@CentOS7 ~]#vgreduce newvg0 /dev/sdb1  #移除sdb
  Removed "/dev/sdb1" from volume group "newvg0"
[root@CentOS7 ~]#vgdisplay    #檢視資訊

第3步:從物理卷中移除
[root@CentOS7 ~]#pvremove  /dev/sdb1  #移除
  Labels on physical volume "/dev/sdb1" successfully wiped.
[root@CentOS7 ~]#pvdisplay 
#移除物理卷後,就看不到原物理卷資訊了

實驗五 邏輯卷管理快照
快照是特殊的邏輯卷,快照存放的是改過的檔案的最早的版本,只是備份修改的檔案。快照與對應的邏輯卷必須在同一個捲組,而且恢復時的檔案容量不能超過快照大小
測試環境使用快照較多
生產環境會消耗更多的效能,所以一般不用

第1步:建立快照
[root@CentOS7 ~]#lvcreate  -L 100M -s -n snap -p r /dev/newvg0/newlv0     
  Using default stripesize 64.00 KiB.
  Logical volume "snap" created.
#建立快照,-s表示快照,-L指定快照容量,-n是快照名,-p r快照許可權唯讀
#我們對邏輯卷newlv0做快照
[root@CentOS7 ~]#lvdisplay
#此命令可以檢視邏輯卷快照資訊

第2步:掛載快照
1234 [root@CentOS7 ~]#mkdir /mnt/snap
[root@CentOS7 ~]#mount /dev/newvg0/snap /mnt/snap/
mount: /dev/mapper/newvg0-snap is write-protected, mounting read-only
#快照掛載到一個掛載點,掛載時提示防寫,但還是成功掛載,可以df檢視

第3步:使用快照恢復資料
上述步驟對邏輯卷newlv0做了快照,而newlv0掛載到了/mnt/lv目錄下,現在把此目錄下的檔案newlv0刪除然使用快照恢復
[root@CentOS7 ~]#rm -f /mnt/lv/newlv0  #刪除原檔案
[root@CentOS7 ~]#umount /dev/newvg0/snap
[root@CentOS7 ~]#umount /dev/newvg0/newlv0
#首先取消掛載邏輯卷與快照
[root@CentOS7 ~]#lvconvert  --merge /dev/newvg0/snap 
  Merging of volume newvg0/snap started.
  newlv0: Merged: 100.00%
#使用快照恢復資料,此命令會自動識別邏輯卷的路徑
[root@CentOS7 ~]#mount /dev/newvg0/newlv0 /mnt/lv
[root@CentOS7 ~]#ll /mnt/lv/                     
-rw-r--r--. 1 root root    0 Aug 12 14:45 newlv0
#最後我們再把邏輯捲掛載就可以看到被刪除的檔案了
#恢復完資料快照邏輯卷會自動消失

第4步:實驗結束刪除快照和邏輯卷(已經提前給邏輯卷newlv0建立一個快照snap-data,也要刪除)
[root@CentOS7 ~]#umount /mnt/snap/
[root@CentOS7 ~]#umount /mnt/lv
[root@CentOS7 ~]#umount /mnt/lv1/
[root@CentOS7 ~]#lvremove /dev/newvg0/snap-data 
[root@CentOS7 ~]#lvremove  /dev/newvg0/newlv0
[root@CentOS7 ~]#lvremove  /dev/newvg0/newlv1
#先取消掛載,然後移除所有邏輯卷,包括快照
[root@CentOS7 ~]#vgs
  VG    #PV #LV #SN Attr  VSize VFree
  newvg0  3  0  0 wz--n- 4.01g 4.01g
#此時vg內的邏輯卷為空
[root@CentOS7 ~]#vgremove  newvg0 
  Volume group "newvg0" successfully removed
#刪除捲組,這時候vgs檢視都是空
[root@CentOS7 ~]#pvremove  /dev/sdc1
[root@CentOS7 ~]#pvremove  /dev/sdd1
[root@CentOS7 ~]#pvremove  /dev/sdd2
#刪除物理卷,pvs就看不到任何資訊了
至此所有的快照、邏輯卷、卷組和物理捲全部清空

刪除邏輯卷順序:
快照--邏輯卷--卷組--物理卷

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-09/146744.htm


IT145.com E-mail:sddin#qq.com