一、簡述
什么是邏輯卷?LVM(Logical Volume Manager)利用Linux內核device-mapper實現存儲系統的虛擬化。通過LVM,把底層存儲硬件抽象化成存儲邏輯塊,再將這些邏輯塊集合構成存儲池,從存儲池空間劃分分區,可以簡單地擴大或縮小分區,而不用擔心硬盤沒有足夠的連續空間。
使用邏輯卷分區有什么用?使用邏輯卷分區重點在于可以彈性地調整文件系統的容量。在實際環境中我們經常會遇一個文件系統空間不足,想要擴展卻又十分麻煩,一開始劃分空間偏大,想要縮減也是同樣不方便。而LVM可以很好地解決這些問題。
邏輯卷的缺點:由于LVM的原理,導致一個文件數據可能分布在多個硬件設備上,這些設備中只要有一個損壞,數據便有丟失。而且存儲效率上也有所下降。通常LVM結合RAID使用,提升讀寫效能或數據可靠性。
二、LVM原理
首先理解四個邏輯卷基本概念:
1、PV(Physical Volume)物理卷:LVM的基本存儲邏輯塊,可以在上面建立卷組的媒介,可以是硬盤分區,也可以是硬盤本身或者回環文件(loopback file)。物理卷包括一個特殊的header,其余部分被切割為一塊塊物理區域(physical extents)。
2、VG(Volume Group)卷組:一個或多個物理卷組成卷組,即構成一個存儲池??梢栽诰斫M上創建“LVM分區”(邏輯卷)
3、LV(Logical Volume)邏輯卷:由若干物理區域組成的虛擬分區,類似于硬盤分區
4、PE(Physical Extent)物理區域:硬盤可供指派給邏輯卷的最小單位。
5、LE(Logical Extent)邏輯區域:物理區域被指派給邏輯卷后變為邏輯區域,組成邏輯卷的最小單位。
簡答來講,我們先將塊設備初始化為PV,將若干個PV劃分為一個VG卷組并命名,卷組被創建時,將PV劃分為若干個PE,默認PE大小為4M,即這些PE構成了卷組,最后我們從卷組中拿出若干個PE組成邏輯卷并命名,相當于劃分出一塊硬盤分區,邏輯卷創建后就可以正常使用它了,比如進行格式化操作,然后掛載到目錄樹上。
三、LVM創建演示
以下操作環境為Centos6.8
準備工作:我劃分了三個分區/dev/sdb{1,2,3},并設置分區類型為 Linux LVM
PV初始化
[root@centos6 mapper]$ pvcreate /dev/sdb{1,2,3} Physical volume "/dev/sdb1" successfully created Physical volume "/dev/sdb2" successfully created Physical volume "/dev/sdb3" successfully created
簡單查看創建PV信息
[root@centos6 mapper]$ pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 ---- 5.00g 5.00g /dev/sdb2 lvm2 ---- 5.00g 5.00g /dev/sdb3 lvm2 ---- 5.00g 5.00g
詳細查看PV信息
[root@centos6 mapper]$ pvdisplay "/dev/sdb1" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size 5.00 GiB Allocatable NO PE Size 0 #在未被加入卷組前,未劃分PE Total PE 0 Free PE 0 Allocated PE 0 PV UUID jxLEiT-LOXv-9zqY-Vui2-QRNN-AkN4-vcZehm "/dev/sdb2" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb2 VG Name PV Size 5.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID vHa18C-QW5D-8lB1-2dRX-jxOF-OcCF-aFBDSb "/dev/sdb3" is a new physical volume of "5.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb3 VG Name PV Size 5.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID NtfNOu-NRYs-CRv8-TcyI-HXbg-Nidr-89Kiwf
VG:創建一個名為jat的卷組
[root@centos6 mapper]$ vgcreate jat /dev/sdb{1,2} Volume group "jat" successfully created
查看VG信息
[root@centos6 mapper]# vgs VG #PV #LV #SN Attr VSize VFree jat 2 0 0 wz--n- 9.99g 9.99g [root@centos6 mapper]# vgdisplay --- Volume group --- VG Name jat System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 9.99 GiB #卷組容量為兩個PV容量總 PE Size 4.00 MiB #默認PE大小為4M Total PE 2558 #PE的總數 Alloc PE / Size 0 / 0 #PE分配的情況 Free PE / Size 2558 / 9.99 GiB VG UUID bwm8dx-QYgR-H0cO-xbCe-AvGe-zvDL-qfNIlp
再來看下PV信息
[root@centos6 mapper]$ pvdisplay --- Physical volume --- PV Name /dev/sdb1 VG Name jat PV Size 5.00 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB #相關PE的信息已更新 Total PE 1279 Free PE 1279 Allocated PE 0 PV UUID jxLEiT-LOXv-9zqY-Vui2-QRNN-AkN4-vcZehm
創建LV
[root@centos6 mapper]$ lvcreate -L 2G -n pap1 jat Logical volume "pap1" created. [root@centos6 mapper]$ lvcreate -L 4G -n pap2 jat Logical volume "pap2" created.
查看LV
[root@centos6 mapper]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert pap1 jat -wi-a----- 2.00g pap2 jat -wi-a----- 4.00g [root@centos6 mapper]# lvdisplay --- Logical volume --- LV Path /dev/jat/pap1 #邏輯卷設備地址 LV Name pap1 VG Name jat LV UUID heIpsn-nhPS-BH91-CDrU-6pi0-LFyR-MZBeRs LV Write Access read/write LV Creation host, time centos6.localdomain, 2016-09-02 20:26:27 +0800 LV Status available #新創建的LV默認激活可用 # open 0 LV Size 2.00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
引用LV設備有多個路徑
形式1:/dev/mapper/VG_NAME-LV_NAME
形式2:/dev/VG_NAME/LV_NAME
以上都是軟連接指向實際設備文件/dev/dm-N
格式化邏輯卷pap1,掛載
mkfs.ext4 /dev/jat/pap1 mount /dev/jat/pap1 /mnt/pap1
使用df命令查看,邏輯卷pap1可用容量
嘗試向邏輯卷掛載點拷貝一些數據,完全正常,至此邏輯卷創建成功。
四、擴展VG,LV
擴展VG
[root@centos6 ~]$ vgextend jat /dev/sdb3 #給卷組jat新加一個PV Volume group "jat" successfully extended [root@centos6 ~]# vgs #查看VG容量已增加了5G VG #PV #LV #SN Attr VSize VFree jat 3 2 0 wz--n- 14.99g 8.99g
在線擴展LV
命令工具:lvextend
-l|–extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE|ORIGIN}]
此選項可以指定邏輯卷新的LE數量,或增加的數量,也可指定百分比形式擴展
-L|–size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}
此選項指定大小來擴展
lvextend -l +100%FREE /dev/jat/pap1 #將jat卷組的所有剩余PE分配給pap1 lvextend -L 5G /dev/jat/pap1 #將pap1擴展至5G大小 lvextend -L +1G /dev/jat/pap1 #增加1G的容量
擴展前,vgdisplay 查看卷組使用情況,原始pap1容量
開始擴展pap1
[root@centos6 ~]# lvextend -L +2G /dev/jat/pap1 Size of logical volume jat/pap1 changed from 2.00 GiB (512 extents) to 4.00 GiB (1024 extents). Logical volume pap1 successfully resized.
查看pap1 容量增加了2G
再對文件系統調整大小
[root@centos6 ~]$ fsadm resize /dev/jat/pap1 resize2fs 1.41.12 (17-May-2010) Filesystem at /dev/mapper/jat-pap1 is mounted on /mnt/pap1; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/mapper/jat-pap1 to 1048576 (4k) blocks. The filesystem on /dev/mapper/jat-pap1 is now 1048576 blocks long.
其實可以在擴展LV帶上-r選項可省略此步驟,例如
lvextend -r -L +2G /dev/jat/pap1
df-h查看文件系統大小,已經增加2G容量
五、縮減LV
縮減操作較為危險,謹慎操作??s減LV之前確保已對文件系統重新調整大小。
1、卸載邏輯卷
umount /mnt/pap1
2、強制檢測文件系統
e2fsck -f /dev/mapper/jat-pap1
3、resize文件系統
[root@centos6 ~]$ fsadm resize /dev/jat/pap1 3G resize2fs 1.41.12 (17-May-2010) Resizing the filesystem on /dev/mapper/jat-pap1 to 786432 (4k) blocks. The filesystem on /dev/mapper/jat-pap1 is now 786432 blocks long.
4、縮減LV
[root@centos6 ~]$ lvchange -an /dev/jat/pap1 #停止pap1工作 [root@centos6 ~]$ lvreduce -L 3G /dev/jat/pap1 #縮減至3G Size of logical volume jat/pap1 changed from 4.00 GiB (1024 extents) to 3.00 GiB (768 extents). Logical volume pap1 successfully resized.
5、激活,掛載
lvchange -ay /dev/jat/pap1 mount /dev/jat/pap1 /mnt/pap1
六、移除PV
移除PV正確操作不會毀壞數據
例如移除/dev/sdb1 此PV
[root@centos6 ~]# pvmove /dev/sdb1 #先把此PV內分配走PE轉移到其他PV上 /dev/sdb1: Moved: 0.1% /dev/sdb1: Moved: 12.9% /dev/sdb1: Moved: 22.5% /dev/sdb1: Moved: 32.7% /dev/sdb1: Moved: 42.2% /dev/sdb1: Moved: 52.3% /dev/sdb1: Moved: 62.8% /dev/sdb1: Moved: 71.6% /dev/sdb1: Moved: 82.8% /dev/sdb1: Moved: 93.5% /dev/sdb1: Moved: 100.0% [root@centos6 ~]# vgreduce jat /dev/sdb1 #在卷組中移除 Removed "/dev/sdb1" from volume group "jat" [root@centos6 ~]# pvremove /dev/sdb1 #最后清除PV標志 Labels on physical volume "/dev/sdb1" successfully wiped
七、LVM快照功能
快照是一種特殊的邏輯卷,是復制原始卷的元數據而建立的邏輯卷,因此它創建速度很快,而且與原始卷在同一卷組。LVM 快照利用一種稱為“寫時復制(COW – Copy-On-Write)”的技術來跟蹤和維持其數據的一致性。當原始卷的數據塊(指原始卷所包含的所有數據塊,即是空白數據塊)第一次寫入新數據時,會將舊數據塊內容拷貝至快照空間中,也就是說如果只是刪掉原始卷某一文件,但是其占用的數據塊內容沒有改變,刪除文件只是不再占有這些數據塊,COW認為數據塊內容沒發生改變,所以不會占用快照空間;還有如果數據塊已經重寫過一次數據,COW不會再跟蹤。
分配給快照的空間,要依據寫入的數據量多大和寫入的頻率,不一定要指派原始卷一樣大的空間??煺湛臻g可以擴展或縮減。
利用快照可以記錄一個正在使用中的邏輯卷,然后制作一份拍照時刻的備份,由于這個備份是具有一致性的,因此非常的適合于用來備份實時系統。例如,您的運行中的數據庫可能即使在備份時刻也是不允許暫停服務的,那么就可以考慮使用LVM的快照模式,然后再針對此快照來進行文件系統級別或者塊設備級別的數據備份。
創建快照
為pap1創建一個快照,大小為128M
[root@centos6 pap1]$ lvcreate -s /dev/jat/pap1 -n snap_pap1 -L 128M Logical volume "snap_pap1" created.
查看LV信息,已經有快照相關信息生成
快照邏輯卷創建時帶有文件系統,可以直接掛載,建議只讀掛載
[root@centos6 pap1]# mount -r /dev/jat/snap_pap1 /mnt/snap [root@centos6 pap1]# ll !$ ll /mnt/snap total 22 drwxr-xr-x. 128 root root 8192 Sep 3 21:04 etc 可以看見原邏輯卷的文件 drwx------. 2 root root 12288 Sep 2 22:21 lost+found
[root@centos6 pap1]# rm -rf /mnt/pap1/etc/issue #刪掉原邏輯卷一個文件做試驗 [root@centos6 pap1]# cat /mnt/s sdb1/ snap/ [root@centos6 pap1]# cat /mnt/snap/etc/issue #快照區備份了原文件,證明備份有效 System time is \t CentOS release 6.8 (Final) Kernel \r on an \m what is your pincode ?
原創文章,作者:cutemsyu,如若轉載,請注明出處:http://www.www58058.com/42892
贊