2021-05-12 14:32:11
LVM邏輯卷管理器設定使用詳解
簡介
邏輯卷是一種device mapper技術,即可以將一個或者多個底層塊裝置組織成一個邏輯裝置,從而提供動態改變大小,不停機情況下新增磁碟,快照以及備份 等功能,使得對於磁碟的管理更加方便。
Logical Volume Manager (LVM),邏輯卷管理LVM是一個多才多藝的硬碟系統工具,無論在Linux或者其他類似的系統,都是非常的好用。傳統分割區使用固定大小分割區,重新調整大小十分麻煩,但是LVM可以建立和管理“邏輯”捲,而不是直接使用物理硬碟,可以讓管理員彈性的管理邏輯卷的擴大縮小,操作簡單,而不損壞已儲存的資料。可以隨意將新的硬碟新增到LVM,以直接擴充套件已經存在的邏輯卷,LVM並不需要重新啟動就可以讓核心知道分割區的存在。文章詳細記錄在PV/VG/LV中3個階段的建立/新增/擴充套件/減小/刪除等實戰操作步驟,方便自己回顧一些基礎用法,也希望能夠幫助大家更好的理解LVM的原理。
-
邏輯卷的組成結構
邏輯卷的組成如下圖所示:
從上圖中可以看出,整個邏輯卷的體系分為3個層次:
底層的PV
中層的VG
最上層的LV
最底層的PV作為整個邏輯卷體系的最底層,可以理解為打上了可以被納入邏輯卷管理體系的標籤的整塊磁碟或者磁碟上的某個分割區;中間層的VG是邏輯卷的卷組,由一個或者多個PV組成,並且用同一標準進行分塊,每一塊被稱為PE(Physical Extent)或者PP(Physical Partition),作為LVM的最小定址單元;最上層的LV是從VG中劃分出來的捲,並且作為裝置檔案,可以在其上面建立各種linux支援的檔案系統。在LV層面也有一個概念LE(Logical Extent)。LE與PE一一對應。
-
針對LVM底層PV的一些基本操作
對於底層的PV而言,操作的命令如下表所示:
命令 | 解釋 |
---|---|
pvchange | 控制指定PV是否可以分派新空間的許可權 |
pvck | 檢查PV的LVM後設資料的一致性 |
pvcreate | 將指定磁碟或分割區轉化為PV |
pvdisplay | 詳細地檢視系統當前的PV情況 |
pvmove | 在同一VG捲組裡面移動一個PV的資料到另一個PV裡面 |
pvremove | 刪除PV標籤,即移除PV |
pvs | 簡略地檢視系統當前的PV情況 |
pvresize | 當PV對應的裝置分割區(如md軟raid)擴容之後,利用該命令可以擴容PV |
pvscan | 掃描所有打著PV標籤的裝置檔案 |
一些pv操作的實驗如下所示:
$ lsblk
/dev/sdb
/dev/sdd1
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 0 7G 0 disk
sdd1 8:49 0 7G 0 part
建立pv
$ pvcreate
/dev/sdb
/dev/sdd1
Physical volume
"/dev/sdb"
successfully created
Physical volume
"/dev/sdd1"
successfully created
檢視pv
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb
lvm2 --- 7.00g 7.00g
/dev/sdd1
lvm2 --- 7.00g 7.00g
掃描pv
$ pvscan
PV
/dev/sdb
lvm2 [7.00 GiB]
PV
/dev/sdd1
lvm2 [7.00 GiB]
Total: 2 [14.00 GiB] /
in
use: 0 [0 ] /
in
no VG: 2 [14.00 GiB]
檢查pv後設資料
$ pvck
/dev/sdb
Found label on
/dev/sdb
, sector 1,
type
=LVM2 001
Found text metadata area: offset=4096, size=1044480
$ pvck
/dev/sdd1
Found label on
/dev/sdd1
, sector 1,
type
=LVM2 001
Found text metadata area: offset=4096, size=1044480
刪除pv
$ pvremove
/dev/sdd1
Labels on physical volume
"/dev/sdd1"
successfully wiped
-
針對LVM中層VG的一些基本操作
對於中層的VG而言,操作的命令如下表所示
命令 | 命令解釋 |
---|---|
vgcfgbackup | 備份VG描述檔案(預設/etc/lvm/backup,亦可自由指定) |
vgcfgrestore | 從備份的VG描述檔案對VG後設資料進行恢復 |
vgck | 檢查VG |
vgchange | 修改特定VG的屬性,包括是否啟用,uuid號,…… |
vgconvert | 修改VG後設資料格式,例如從LVM1改為LVM2 |
vgcreate | 建立VG卷組 |
vgs | 簡略地檢視系統VG捲組情況 |
vgdisplay | 詳細地檢視系統VG卷組的使用情況 |
vgexport | 將特定VG變為未知狀態,用於遷移卷組到別的系統上面 |
vgimport | 將未知狀態的特定VG捲組變為正常狀態,用於遷移卷組到別的系統上面 |
vgextend | 將PV新增到特定VG中 |
vgimportclone | 用於匯入重複的捲組(例如某卷組的快照),並修改其UUID |
vgmerge | 在滿足特定條件下,對多個卷組進行歸併 |
vgmknodes | 重新建立捲組裝置目錄以及邏輯卷特殊檔案 |
vgreduce | 將未使用的PV從特定VG中移除 |
vgremove | 移除特定VG |
vgrename | 重新命名指定VG的名稱 |
vgsplit | 將指定的PV從一個VG裡面挪動到另一個VG裡面 |
vgscan | 掃描系統的VG |
一些vg的操作如下所示
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb
lvm2 --- 7.00g 7.00g
/dev/sdc1
lvm2 --- 4.00g 4.00g
/dev/sdd1
lvm2 --- 7.00g 7.00g
建立vg0和vg1
$ vgcreate vg0
/dev/sdb
/dev/sdd1
Volume group
"vg0"
successfully created
$ vgcreate vg1
/dev/sdc1
Volume group
"vg1"
successfully created
檢視vg
$ vgs
VG
#PV #LV #SN Attr VSize VFree
vg0 2 0 0 wz--n- 13.99g 13.99g
vg1 1 0 0 wz--n- 4.00g 4.00g
掃描vg
$ vgscan
Reading all physical volumes. This may take a
while
...
Found volume group
"vg0"
using metadata
type
lvm2
Found volume group
"vg1"
using metadata
type
lvm2
從vg0中移除
/dev/sdd1
$ vgreduce vg0
/dev/sdd1
Removed
"/dev/sdd1"
from volume group
"vg0"
將
/dev/sdd1
新增到vg1當中
$ vgextend vg1
/dev/sdd1
Volume group
"vg1"
successfully extended
將
/dev/sdd1
從vg1挪動到vg0當中
$ vgs
VG
#PV #LV #SN Attr VSize VFree
vg0 1 0 0 wz--n- 7.00g 7.00g
vg1 2 0 0 wz--n- 10.99g 10.99g
$ vgsplit vg1 vg0
/dev/sdd1
Existing volume group
"vg0"
successfully
split
from
"vg1"
$ vgs
VG
#PV #LV #SN Attr VSize VFree
vg0 2 0 0 wz--n- 13.99g 13.99g
vg1 1 0 0 wz--n- 4.00g 4.00g
-
針對LVM上層LV的一些基本操作
對於上層的LV而言,操作命令如下表所示:
命令 | 命令解釋 |
---|---|
lvchange | 修改指定LV的一些屬性,包括是否是啟用狀態、是否唯讀…… |
lvconvert | 轉換指定LV的屬性,從線性轉化為映象或者快照 |
lvcreate | 建立LV |
lvs | 簡略地檢視系統內的LV情況 |
lvdisplay | 詳細地檢視系統內的LV情況 |
lvextend | 擴充套件指定LV的容量大小 |
lvm | 管理LVM的一個shell工具 |
lvmconf | LVM設定修改器 |
lvmconfig | 檢視LVM設定的工具 |
lvmdiskscan | 掃描所有LVM2可見的裝置 |
lvmdump | 建立LVM的dump檔案,用於診斷 |
lvmetad | 快取LVM後設資料的守護程式 |
lvmpolld | LVM操作命令的輪詢守護程式 |
lvreduce | 縮容指定的LV |
lvremove | 刪除指定的LV |
lvrename | 重新命名指定的LV |
lvresize | 調整指定LV的大小,即可以擴容也可以縮容 |
lvscan | 掃描系統的LV |
一些LV的操作如下所示:
建立邏輯卷lv0
$ lvcreate -n lv0 -L 10G vg0
檢視系統內的邏輯卷情況
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-ao---- 10.00g
邏輯卷的擴容
$ lvextend -L +2G
/dev/vg0/lv0
Size of logical volume vg0
/lv0
changed from 10.00 GiB (2560 extents) to 12.00 GiB (3072 extents).
Logical volume lv0 successfully resized.
同步檔案系統(如果是ext檔案系統,則使用resize2fs命令)
$ xfs_growfs
/dev/vg0/lv0
meta-data=
/dev/mapper/vg0-lv0
isize=256 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=0 finobt=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=0
log =internal bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 2621440 to 3145728
邏輯卷的縮容(只針對ext檔案系統)
如何縮減lvs?
$ 首先,取消掛載
umount
/mnt/lv0
其次,縮減檔案系統
$ resize2fs
/dev/vg/lv0
50G ext檔案系統縮減到50G
xfs檔案系統只能擴不能縮。。。
然後,縮減邏輯卷
$ lvreduce -L 50G
/dev/vg/lv0
最後,再掛載
$
mount
/dev/vg/lv0
/mnt/lv0
注意!
lvextend -r 選項,就直接resizefs了,因此,就不需要再resize2fs或者xfs_growfs了
-
關於LVM的快照功能
LVM快照是一種以空間換時間時間的方式製作的lvm捲副本。它只在lvm中工作,並只在源邏輯卷發生改變時佔用快照捲的空間。如果源捲的變化達到1GB這麼大,快照卷同樣也會產生這樣大的改變。因而,對於空間有效利用的最佳途徑,就是總是進行小的修改。如果快照將儲存空間消耗殆盡,我們可以使用lvextend來擴容。而如果我們需要縮減快照所佔用捲的大小,可以使用lvreduce。實驗如下:
目標邏輯卷資訊如下:
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb
vg0 lvm2 a-- 7.00g 0
/dev/sdd1
vg0 lvm2 a-- 7.00g 1.99g
$ vgs
VG
#PV #LV #SN Attr VSize VFree
vg0 2 1 0 wz--n- 13.99g 1.99g
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 -wi-ao---- 12.00g
現在對邏輯卷lv0建立快照,命名為snaplv0
$ lvcreate -s -n snaplv0 -p r -L 1G
/dev/vg0/lv0
Logical volume
"snaplv0"
created.
$ vgs
VG
#PV #LV #SN Attr VSize VFree
vg0 2 2 1 wz--n- 13.99g 1016.00m
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 owi-aos--- 12.00g
snaplv0 vg0 sri-a-s--- 1.00g lv0 0.00
這裡/dev/vg0/lv0的掛載點為/mnt。往/mnt裡面寫入300MB的隨機檔案,再觀察快照情況,可以看 到,快照對應的Data一項有所增長:
$
dd
if
=
/dev/urandom
of=
/mnt/2
.txt bs=1M count=300
300+0 records
in
300+0 records out
314572800 bytes (315 MB) copied, 27.5877 s, 11.4 MB
/s
$
ls
1.txt 2.txt data
$ lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv0 vg0 owi-aos--- 12.00g
snaplv0 vg0 sri-a-s--- 1.00g lv0 29.42
用snaplv0對邏輯卷進行恢復,注意恢復之前需要先將對應的邏輯卷解除安裝。恢復之後可以看到,原有的snaplv0消失,因此可以得出結論,LVM的快照是一次性的:
$
umount
/mnt
$ lvconvert --merge
/dev/vg0/snaplv0
Merging of volume snaplv0 started.
lv0: Merged: 71.0%
lv0: Merged: 91.9%
lv0: Merged: 100.0%
$
ls
/dev/vg0
lv0
$
mount
/dev/vg0/lv0
/mnt
$
ls
/mnt
1.txt data
如果想要刪除LVM快照,用lvremove
命令,後面跟上快照裝置檔案的絕對路徑即可,例如:
$ lvremove
/dev/vg0/snaplv0
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2017-05/143774p2.htm
相關文章