什么是LVM?
LVM是邏輯盤卷管理(LogicalVolumeManager)的簡稱,它是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,用來提高磁盤分區管理的靈活性。系統管理員可以通過LVM輕松的管理磁盤分區,如:將若干個磁盤分區或物理磁盤連接為一個整塊的卷組 (volumegroup),形成一個存儲池。管理員可以在卷組上隨意創建邏輯卷組(logicalvolumes),并進一步在邏輯卷組上創建文件系統。管理員通過LVM可以方便的調整存儲卷組的大小,并且可以對磁盤存儲按照組的方式進行命名、管理和分配,例如按照使用用途進行定義:“development”和“sales”,而不是使用物理磁盤名“sda”和“sdb”。相對于普通的磁盤分區有很大的靈活性,使用普通的磁盤分區,當一個磁盤的分區空間不夠使用的時候,可能就會帶來很大的麻煩,而使用LVM可以很靈活的調整分區的大小并且數據不受影響。
基本術語
PV(物理卷,Physical Volume):指磁盤分區或從邏輯上與磁盤分區具有同樣功能的設備(如RAID),是LVM的基本存儲邏輯塊,但和基本的物理存儲介質(如分區、磁盤等)比較,卻包含有與LVM相關的管理參數。
VG(卷組,Volume Group):由多個物理卷組成,類似于非LVM系統中的物理磁盤,其由一個或多個物理卷PV組成。可以在卷組上創建一個或多個“LVM分區”(邏輯卷)
LV(邏輯卷,Logical Volume):類似于非LVM系統中的磁盤分區,邏輯卷建立在卷組VG之上。在邏輯卷LV之上可以建立文件系統
PE(物理塊,Physical Extent):每一個物理卷PV被劃分成為PE(Physical Extents)的基本單元,具有唯一編號的PE是可以被LVM尋址的最小單元。PE的大小是可配置的,默認為4MB。所以物理卷(PV)由大小等同的基本單元PE組成
LE(邏輯塊,Logical Extent):邏輯卷LV也被劃分為可被尋址的基本單位,稱為LE。在同一個卷組中,LE的大小和PE是相同的,并且一一對應
PV、VG、LV三者之間是有一定邏輯關系的,LVM是將一些零碎的磁盤分區(PV)合并成一個較大的磁盤(VG),然后在根據需要對這個較大的磁盤(VG)進行劃分成不同的小分區(LV),并且這些小分區(LV)是可以動態的擴展或縮小的。而PE是PV的基本組成單元,LE是LV的基本組成單元。
創建LVM
第1步:首先創建PV,PV的創建可以直接使用新的磁盤,也可以使用分區,如果使用分區的話需要在創建分區時將分區的標識改為8e( Linux LVM)。
創建PV的命令為:pvcreate [-f] DEVICE
查看PV的命令有:pvdisplay、pvs
#直接將一塊新的磁盤創建為PV [root@fengl ~]# pvcreate /dev/sdb #使用分區創建PV [root@fengl ~]# fdisk -l /dev/sdc ... 設備 Boot Start End Blocks Id System /dev/sdc1 2048 41943039 20970496 8e Linux LVM [root@fengl ~]# pvcreate /dev/sdc1 #查看創建好的PV [root@fengl ~]# pvs PV VG Fmt Attr PSize PFree /dev/sdb lvm2 --- 20.00g 20.00g /dev/sdc1 lvm2 --- 20.00g 20.00g [root@fengl ~]# pvdisplay "/dev/sdd" is a new physical volume of "20.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb VG Name PV Size 20.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID zi9Sja-zARN-1fRG-qw5f-iPhH-7oeY-BiiZCP ...
第2步:創建VG,創建VG時必須指明卷組的名稱和使用哪些pv創建,可以使用-s選項指定PE的大小,PE的默認大小為4M,
具體命令為:vgcreate [-s #[kKmMgGtTpPeE]] VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
查看VG的命令有:vgdisplay、vgs
#創建一個名為vg0,PE大小為8M的VG卷組,并將/dev/sdb和/dev/sdc1加入到卷組中 [root@fengl ~]# vgcreate -s 8M vg0 /dev/sd{b,c1} Volume group "vg0" successfully created #查看創建好的VG [root@fengl ~]# vgs VG #PV #LV #SN Attr VSize VFree vg0 2 0 0 wz--n- 39.98g 39.98g [root@fengl ~]# vgdisplay --- Volume group --- VG Name vg0 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 39.98 GiB PE Size 8.00 MiB Total PE 5118 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 39.98 GiB VG UUID AJzWEi-UKUx-MtEZ-wKkZ-K5eA-f9Tl-QKLhnU
第3步:創建LV,創建LV時必須指明從哪個卷組中創建,可以使用-L選項指定LV的大小,并且可以使用-n選項指定LV的名稱
具體命令為:lvcreate-L #[mMgGtT] -n NAME VolumeGroup
查看LV的命令有:lvdisplay、lvs
#創建一個名為lv0,大小為15G的LV [root@fengl ~]# lvcreate -L 15G -n lv0 vg0 Logical volume "lv0" created. #查看創建好的LV [root@fengl ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-a----- 15.00g [root@fengl ~]# lvdisplay --- Logical volume --- LV Path /dev/vg0/lv0 LV Name lv0 VG Name vg0 LV UUID rQMMHT-GV5D-Jquu-sgFD-4M0V-jrpf-Uu9bg8 LV Write Access read/write LV Creation host, time fengl, 2016-08-30 18:59:38 +0800 LV Status available # open 0 LV Size 15.00 GiB Current LE 1920 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0
第4步:格式化、掛載
#格式化分區 [root@fengl ~]# mkfs.ext4 /dev/vg0/lv0 #查看分區 [root@fengl ~]# blkid ... /dev/mapper/vg0-lv0: UUID="78248233-6e64-47ae-9392-2abf6a25fbf0" TYPE="ext4" #掛載到/mnt/lvm下,如果想開機自動掛載需要在/etc/fstab配置文件中添加掛載信息 [root@fengl ~]# mount UUID="78248233-6e64-47ae-9392-2abf6a25fbf0" /mnt/lvm
LVM管理
(1)擴容LV:lv的擴容需要兩步,第一步先擴容LV大小,這一步可以使用-L選項指定具體擴容到多少,或在原來的基礎上添加多大空間,也可以使用-l選項利用百分比的方式擴容,執行完第一步后查看LV確實擴容了,但是掛載的分區大小還是原來大小,如果是ext系列的文件系統可以使用resizefs命令重置大小,命令使用格式如下:
lvextend -L [+]#[bBsSkKmMgGtTpPeE] /dev/VG_NAME/LV_NAME 或
lvextend -l [+]#[%{VG|LV|PVS|FREE|ORIGIN}] /dev/VG_NAME/LV_NAME
resize2fs /dev/VG_NAME/LV_NAME
#將LV從15G擴容到20G [root@fengl ~]# lvextend -L +5G /dev/vg0/lv0 #方法1 [root@fengl ~]# lvextend -L 20G /dev/vg0/lv0 #方法2 #使用百分比的方式擴容,如將VG0剩余的空間全部擴容給LV0 [root@fengl ~]# lvextend -l +100%FREE /dev/vg0/lv0 #重置大小 [root@fengl ~]# resize2fs /dev/vg0/lv0
(2)縮減LV:LV的縮減比擴容稍微麻煩一點,需要先取消掛載,然后使用e2fsck命令強制執行文件系統檢測,然后再使用resize2fs命令縮減文件系統大小到多大,注意縮減后的大小不能小于該分區下所有文件總量的大小,最后再使用lvreduce命令縮減邏輯卷大小到多大
lvreduce -L [-]#[bBsSkKmMgGtTpPeE] /dev/VG_NAME/LV_NAME 或
lvreduce -l [-]#[%{VG|LV|FREE|ORIGIN}] /dev/VG_NAME/LV_NAME
#卸載已經掛載的邏輯卷 [root@fengl ~]# umount /dev/vg0/lv0 #強制檢測邏輯卷 [root@fengl ~]# e2fsck -f /dev/vg0/lv0 #縮減文件系統大小為30G [root@fengl ~]# resize2fs /dev/vg0/lv0 30G #縮減邏輯卷大小為30G [root@fengl ~]# lvreduce -L 30G /dev/vg0/lv0 #重新掛載 [root@fengl ~]# mount /dev/vg0/lv0 /mnt/lvm/
(3)擴容VG:卷組的擴容需要先增加PV,然后再將新的PV加入到VG中即可
vgextend VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
#新建一個新的PV [root@fengl ~]# pvcreate /dev/sdd #擴容VG,將新的/dev/add加入到vg0 [root@fengl ~]# vgextend vg0 /dev/sdd
(4)縮減VG:將某個PV從VG中移除,需要注意的是如果要移除的PV已經被使用,需要先使用pvmove將其中的PE移出來
vgreduce VolumeGroupName PhysicalDevicePath [PhysicalDevicePath…]
#先將/dev/sdd中的PE移動出來 [root@fengl ~]# pvmove /dev/sdd #再縮減VG大小,即將/dev/sdd從vg0中移除 [root@fengl ~]# vgreduce vg0 /dev/sdd
(5)刪除lvm
#先卸載已經掛載的邏輯卷 [root@fengl ~]# umount /dev/vg0/lv0 #刪除LV [root@fengl ~]# lvremove /dev/vg0/lv0 #刪除VG [root@fengl ~]# vgremove /dev/vg0 #刪除pv [root@fengl ~]# pvremove /dev/sd{b,ca,d}
原創文章,作者:苦澀咖啡,如若轉載,請注明出處:http://www.www58058.com/42050
文章思路清晰,結構完整,lvm快照是用于數據庫的物理備份是基礎,所以希望作者對這部分也能詳細的進行描述跟總結。通讀全文能大概對lvm的工作當時有一個整體的理解,這是作者很用心的地方,加油.