在linux中,LVM全稱“Logical Volume Manager”,中文意思為“邏輯卷管理”,是Linux環境下對磁盤分區進行管理的一種機制;LVM是建立在硬盤和分區之上的一個邏輯層,可用來提高磁盤分區管理的靈活性。
本教程操作環境:linux5.9.8系統、Dell G3電腦。
什么是LVM
LVM(Logical Volume Manager),即邏輯卷管理,是Linux環境下對磁盤分區進行管理的一種機制,LVM是建立在硬盤和分區之上的一個邏輯層,來提高磁盤分區管理的靈活性。通過LVM系統管理員可以輕松管理磁盤分區,如:將若干個磁盤分區連接為一個整塊的卷組(volume group),形成一個存儲池。管理員可以在卷組上隨意創建邏輯卷組(logical volumes),并進一步在邏輯卷組上創建文件系統。管理員通過LVM可以方便的調整存儲卷組的大小,并且可以對磁盤存儲按照組的方式進行命名、管理和分配。當系統添加了新的磁盤,通過LVM管理員就不必將磁盤的文件移動到新的磁盤上以充分利用新的存儲空間,而是直接擴展文件系統跨越磁盤即可。
一般來說,物理磁盤或分區之間是分隔的,數據無法跨盤或分區,而各磁盤或分區的大小固定,重新調整比較麻煩。LVM可以將這些底層的物理磁盤或分區整合起來,抽象成容量資源池,以劃分成邏輯卷的方式供上層使用,其最主要的功能即是可以在無需關機無需重新格式化(準確地說,原來的部分無需格式化,只格式化新增的部分)的情況下彈性調整邏輯卷的大小。
LVM的實現過程如下圖:
LVM名詞解釋
PV(physical volume):物理卷在邏輯卷管理系統最底層,可為整個物理硬盤或實際物理硬盤上的分區。它只是在物理分區中劃出了一個特殊的區域,用于記載與LVM相關的管理參數。
VG(volume group):卷組建立在物理卷上,一卷組中至少要包括一物理卷,卷組建立后可動態的添加卷到卷組中,一個邏輯卷管理系統工程中可有多個卷組。
LV(logical volume):邏輯卷建立在卷組基礎上,卷組中未分配空間可用于建立新的邏輯卷,邏輯卷建立后可以動態擴展和縮小空間。
PE(physical extent):物理區域是物理卷中可用于分配的最小存儲單元,物理區域大小在建立卷組時指定,一旦確定不能更改,同一卷組所有物理卷的物理區域大小需一致,新的pv加入到vg后,pe的大小自動更改為vg中定義的pe大小。
LE(logical extent):邏輯區域是邏輯卷中可用于分配的最小存儲單元,邏輯區域的大小取決于邏輯卷所在卷組中的物理區域的大小。由于受內核限制的原因,一個邏輯卷(Logic Volume)最多只能包含65536個PE(Physical Extent),所以一個PE的大小就決定了邏輯卷的最大容量,4 MB(默認) 的PE決定了單個邏輯卷最大容量為 256 GB,若希望使用大于256G的邏輯卷,則創建卷組時需要指定更大的PE。在Red Hat Enterprise Linux AS 4中PE大小范圍為8 KB 到 16GB,并且必須總是 2 的倍數。
LVM的寫入模式
LVM有兩種寫入模式:線性模式和條帶模式。
-
線性模式即寫完一個設備后再寫另一個設備
-
條帶模式就有點類似于RAID0,即數據是被分散寫入到LVM各成員設備上的。
因為條帶模式的數據不具有安全性,且LVM并不強調讀寫性能,故LVM默認為線性模式,這樣即使一個設備壞了,其它設備上的數據還在。
LVM的工作原理
LVM在每個物理卷頭部都維護了一個metadata,每個metadata中都包含了整個VG(volume group:卷組)的信息,包括每個VG的布局配置,PV(physical volume:物理卷)的編號,LV(logical volume:邏輯卷)的編號,以及每個PE(physical extends:物理擴展單元)到LE(logical extends:物理擴展單元)的映射關系。同一個VG中的每個PV頭部的信息都是相同的,這樣有利于故障時進行數據恢復。
LVM對上層文件系統提供LV層,隱藏了操作細節。對文件系統而言,對LV的操作與原先對partition的操作沒有差別。當對LV進行寫入操作的時候,LVM定位相應的LE,通過PV頭部的映射表將數據寫入到相應的PE上。LVM最大的特點就是可以對磁盤進行動態管理。因為邏輯卷的大小是可以動態調整的,而且不會丟失現有的數據。我們如果新增加了硬盤,其也不會改變現有上層的邏輯卷。關鍵在于PE和LE之間建立映射關系,不同的映射規則決定了不同的LVM存儲模型。LVM支持多個PV 的stripe和mirror。
LVM的優缺點
優點:
-
文件系統可以跨多個磁盤,因此文件系統大小不會受物理磁盤的限制。
-
可以在系統運行的狀態下動態的擴展文件系統的大小。
-
可以增加新的磁盤到LVM的存儲池中。
-
可以以鏡像的方式冗余重要的數據到多個物理磁盤。
-
可以方便的導出整個卷組到另外一臺機器。
缺點:
-
在從卷組中移除一個磁盤的時候必須使用reducevg命令(這個命令要求root權限,并且不允許在快照卷組中使用)。
-
當卷組中的一個磁盤損壞時,整個卷組都會受到影響。
-
因為加入了額外的操作,存貯性能受到影響。
創建PV/VG/LV的方法
1、將各物理磁盤或分區的系統類型設為Linux LVM,其system ID為8e,通過fdisk工具中的t命令設置
[root@localhost?~]#?fdisk?/dev/sdb? ... Command?(m?for?help):?n Partition?type: ???p???primary?(1?primary,?0?extended,?3?free) ???e???extended Select?(default?p):?p Partition?number?(2-4,?default?2):?2 First?sector?(20973568-62914559,?default?20973568):? Using?default?value?20973568 Last?sector,?+sectors?or?+size{K,M,G}?(20973568-62914559,?default?62914559):?+5G ... Command?(m?for?help):?t Partition?number?(1,2,?default?2):?2 Hex?code?(type?L?to?list?all?codes):?8e??#?指定system?id為8e Changed?type?of?partition?'Linux'?to?'Linux?LVM' ... Command?(m?for?help):?p ... /dev/sdb1????????????2048????20973567????10485760???8e??Linux?LVM /dev/sdb2????????20973568????31459327?????5242880???8e??Linux?LVM Command?(m?for?help):?w ...
2、將各物理磁盤或分區初始化為PV(physical volume,物理卷)
這一階段可使用的命令為pvcreate、pvremove、pvscan、pvdisplay(pvs)
1)pvcreate:創建物理卷
用法:pvcreate [option] DEVICE
? 選項:
-
? ? ? -f:強制創建邏輯卷,不需用戶確認
-
? ? ? -u:指定設備的UUID
-
? ? ? -y:所有問題都回答yes
? 例 pvcreate /dev/sdb1 /dev/sdb2
2)pvscan:掃描當前系統上的所有物理卷
用法:pvscan [option]
? 選項:
-
? ? ? -e:僅顯示屬于輸出卷組的物理卷
-
? ? ? -n:僅顯示不屬于任何卷組的物理卷
-
? ? ? -u:顯示UUID
3)pvdisplay:顯示物理卷的屬性
?用法:pvdisplay [PV_DEVICE]
4)pvremove:將物理卷信息刪除,使其不再被視為一個物理卷
?用法:pvremove [option] PV_DEVICE
? 選項:
-
? ? ? -f:強制刪除
-
? ? ? -y:所有問題都回答yes
? 例 pvremove /dev/sdb1
5)pv創建和刪除例子
[root@localhost?~]#?pvcreate?/dev/sdb{1,2}??#?將兩個分區初始化為物理卷 ??Physical?volume?"/dev/sdb1"?successfully?created. ??Physical?volume?"/dev/sdb2"?successfully?created. [root@localhost?~]#?pvscan? ??PV?/dev/sdb2??????????????????????lvm2?[5.00?GiB] ??PV?/dev/sdb1??????????????????????lvm2?[10.00?GiB] ??Total:?2?[15.00?GiB]?/?in?use:?0?[0???]?/?in?no?VG:?2?[15.00?GiB] [root@localhost?~]#?pvdisplay?/dev/sdb1???#?顯示物理卷sdb1的詳細信息 ??"/dev/sdb1"?is?a?new?physical?volume?of?"10.00?GiB" ??---?NEW?Physical?volume?--- ??PV?Name???????????????/dev/sdb1 ??VG?Name??????????????? ??PV?Size???????????????10.00?GiB ??Allocatable???????????NO ??PE?Size???????????????0???#?由于PE是在VG階段才劃分的,所以此處看到的都是0 ??Total?PE??????????????0 ??Free?PE???????????????0 ??Allocated?PE??????????0 ??PV?UUID???????????????GrP9Gi-ubau-UAcb-za3B-vSc3-er2Q-MVt9OO ??? [root@localhost?~]#?pvremove?/dev/sdb2???#?刪除sdb2的物理卷信息 ??Labels?on?physical?volume?"/dev/sdb2"?successfully?wiped. [root@localhost?~]#?pvscan?????#?可以看到PV列表中已無sdb2 ??PV?/dev/sdb1??????????????????????lvm2?[10.00?GiB] ??Total:?1?[10.00?GiB]?/?in?use:?0?[0???]?/?in?no?VG:?1?[10.00?GiB] [root@localhost?~]#?pvcreate?/dev/sdb2? ??Physical?volume?"/dev/sdb2"?successfully?created.
3、創建VG(volume group,卷組)。
卷組將多個物理卷整合起來(屏蔽了底層細節),并劃分PE(physical extend)
PE是物理卷中的最小存儲單元,有點類似于文件系統中的block,PE大小可指定,默認為4M。這一階段用到的命令有vgcreate、vgscan、vgdisplay、vgextend、vgreduce
1)vgcreate:創建卷組
?用法:vgcreate [option] VG_NAME PV_DEVICE
? 選項:
-
? ? ? -s:卷組中的物理卷的PE大小,默認為4M
-
? ? ? -l:卷組上允許創建的最大邏輯卷數
-
? ? ? -p:卷級中允許添加的最大物理卷數
? 例 vgcreate -s 8M myvg /dev/sdb1 /dev/sdb2
2)vgscan:查找系統中存在的LVM卷組,并顯示找到的卷組列表
3)vgdisplay:顯示卷組屬性
? 用法:vgdisplay [option] [VG_NAME]
? 選項:
-
? ? ? -A:僅顯示活動卷組的信息
-
? ? ? -s:使用短格式輸出信息
4)vgextend:動態擴展LVM卷組,它通過向卷組中添加物理卷來增加卷組的容量
?用法:vgextend VG_NAME PV_DEVICE
? 例 vgextend myvg /dev/sdb3
5)vgreduce:通過刪除LVM卷組中的物理卷來減少卷組容量,不能刪除LVM卷組中剩余的最后一個物理卷
?用法:vgreduce VG_NAME PV_DEVICE
6)vgremove:刪除卷組,其上的邏輯卷必須處于離線狀態
? 用法:vgremove [-f] VG_NAME
-
? -f:強制刪除
7)vgchange:常用來設置卷組的活動狀態
? 用法:vgchange -a n/y VG_NAME
-
? -a n為休眠狀態,休眠之前要先確保其上的邏輯卷都離線;
-
? -a y為活動狀態
8)vg創建例子
[root@localhost?~]#?vgcreate?-s?8M?myvg?/dev/sdb{1,2} ??Volume?group?"myvg"?successfully?created [root@localhost?~]#?vgscan ??Reading?volume?groups?from?cache. ??Found?volume?group?"myvg"?using?metadata?type?lvm2 [root@localhost?~]#?vgdisplay ??---?Volume?group?--- ??VG?Name???????????????myvg ??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???????????????14.98?GiB ??PE?Size???????????????8.00?MiB ??Total?PE??????????????1918 ??Alloc?PE?/?Size???????0?/?0??? ??Free??PE?/?Size???????1918?/?14.98?GiB ??VG?UUID???????????????aM3RND-aUbQ-7RjC-dCci-JiS4-Oj2Z-wv9poA
4、在卷組上創建LV(logical volume,邏輯卷)
為了便于管理,邏輯卷對應的設備文件保存在卷組目錄下,為/dev/VG_NAME/LV_NAME。LV中可以分配的最小存儲單元稱為LE(logical extend),在同一個卷組中,LE的大小和PE是一樣的,且一一對應。這一階段用到的命令有lvcreate、lvscan、lvdisplay、lvextend、lvreduce、lvresize
1)lvcreate:創建邏輯卷或快照
? 用法:lvcreate [選項] [參數]
? 選項:
-
? ? ? -L:指定大小
-
? ? ? -l:指定大小(LE數)
-
? ? ? -n:指定名稱
-
? ? ? -s:創建快照
-
? ? ? -p r:設置為只讀(該選項一般用于創建快照中)
? 注:使用該命令創建邏輯卷時當然必須指明卷組,創建快照時必須指明針對哪個邏輯卷? ? ? ? ?
? 例 lvcreate -L 500M -n mylv myvg
2)lvscan:掃描當前系統中的所有邏輯卷,及其對應的設備文件
3)lvdisplay:顯示邏輯卷屬性
? 用法:lvdisplay [/dev/VG_NAME/LV_NAME]
4)lvextend:可在線擴展邏輯卷空間
? 用法:lvextend -L/-l 擴展的大小 /dev/VG_NAME/LV_NAME??
? 選項:
-
? ? ? -L:指定擴展(后)的大小。例如,-L +800M表示擴大800M,而-L 800M表示擴大至800M
-
? ? ? -l:指定擴展(后)的大小(LE數)
? 例 lvextend -L 200M /dev/myvg/mylv
5)lvreduce:縮減邏輯卷空間,一般離線使用
?用法:lvexreduce -L/-l 縮減的大小 /dev/VG_NAME/LV_NAME??
? 選項:
-
? ? ? -L:指定縮減(后)的大小
-
? ? ? -l:指定縮減(后)的大小(LE數)
? 例 lvreduce -L 200M /dev/myvg/mylv
6)lvremove:刪除邏輯卷,需要處于離線(卸載)狀態
? 用法:lvremove [-f] /dev/VG_NAME/LV_NAME
-
? -f:強制刪除
7)lv創建例子
[root@localhost?~]#?lvcreate?-L?2G?-n?mylv?myvg?? ??Logical?volume?"mylv"?created. [root@localhost?~]#?lvscan? ??ACTIVE????????????'/dev/myvg/mylv'?[2.00?GiB]?inherit [root@localhost?~]#?lvdisplay? ??---?Logical?volume?--- ??LV?Path????????????????/dev/myvg/mylv ??LV?Name????????????????mylv ??VG?Name????????????????myvg ??LV?UUID????????????????2lfCLR-UEhm-HMiT-ZJil-3EJm-n2H3-ONLaz1 ??LV?Write?Access????????read/write ??LV?Creation?host,?time?localhost.localdomain,?2019-07-05?13:42:44?+0800 ??LV?Status??????????????available ??#?open?????????????????0 ??LV?Size????????????????2.00?GiB ??Current?LE?????????????256 ??Segments???????????????1 ??Allocation?????????????inherit ??Read?ahead?sectors?????auto ??-?currently?set?to?????256 ??Block?device???????????253:0
5、格式化邏輯卷并掛載
[root@localhost?~]#?mke2fs?-t?ext4?/dev/myvg/mylv ... Writing?inode?tables:?done Creating?journal?(16384?blocks):?done Writing?superblocks?and?filesystem?accounting?information:?done ... [root@localhost?~]#?mkdir?/data [root@localhost?~]#?mount mount?mountpoint [root@localhost?~]#?mount?/dev/myvg/mylv?/data [root@localhost?~]#?df?-h Filesystem?Size?Used?Avail?Use%?Mounted?on /dev/sda1?50G?1.5G?49G?3%?/ devtmpfs?903M?0?903M?0%?/dev tmpfs?912M?0?912M?0%?/dev/shm tmpfs?912M?8.6M?904M?1%?/run tmpfs?912M?0?912M?0%?/sys/fs/cgroup tmpfs?183M?0?183M?0%?/run/user/0 /dev/mapper/myvg-mylv?2.0G?6.0M?1.8G?1%?/data
相關推薦:《Linux視頻教程》