邏輯卷管理LVM是一個多才多藝的硬盤系統工具。無論在Linux或者其他類似的系統,都是非常的好用。傳統分區使用固定大小分區,重新調整大小十分麻煩。但是,LVM可以創建和管理“邏輯”卷,而不是直接使用物理硬盤。可以讓管理員彈性的管理邏輯卷的擴大縮小,操作簡單,而不損壞已存儲的數據。可以隨意將新的硬盤添加到LVM,以直接擴展已經存在的邏輯卷。LVM并不需要重啟就可以讓內核知道分區的存在。
LVM使用分層結構,如下圖所示。
圖中頂部,首先是實際的物理磁盤及其劃分的分區和其上的物理卷(PV)。一個或多個物理卷可以用來創建卷組(VG)。然后基于卷組可以創建邏輯卷(LV)。只要在卷組中有可用空間,就可以隨心所欲的創建邏輯卷。文件系統就是在邏輯卷上創建的,然后可以在操作系統掛載和訪問。
LVM測試說明
本文將介紹怎么在linux中創建和管理LVM卷。我們將會分成兩個部分。第一個部分,我們首先要在一個硬盤上創建多個邏輯卷,然后將它們掛載在/lvm-mount目錄。然后我們將要對創建好的卷調整大小。而第二部分,我們將會從另外一塊硬盤增加額外的卷到LVM中。
準備磁盤分區
通過使用fdisk,創建磁盤分區。我們需要創建3個1G分區,注意,并不要求分區的大小一致。同樣,分區需要使用‘8e’類型來使他們可用于LVM。
# fdisk /dev/sdb
Command (m for help): n ## 新建
Command action
e extended
p primary partition (1-4)
p ## 主分區
Partition number (1-4): 1 ## 分區號
First cylinder (1-1044, default 1): ## 回車用默認的1
Last cylinder, +cylinders or +size{K,M,G} (1-1044, default 1044): +1G ## 大小
Command (m for help): t ## 改變類型
Selected partition 1
Hex code (type L to list codes): 8e ## LVM 的分區代碼
Changed system type of partition 1 to 8e (Linux LVM)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# fdisk /dev/sdb
Command(mforhelp):n## 新建
Commandaction
eextended
pprimarypartition(1-4)
p## 主分區
Partitionnumber(1-4):1## 分區號
Firstcylinder(1-1044,default1):## 回車用默認的1
Lastcylinder,+cylindersor+size{K,M,G}(1-1044,default1044):+1G## 大小
Command(mforhelp):t## 改變類型
Selectedpartition1
Hexcode(typeLtolistcodes):8e## LVM 的分區代碼
Changedsystemtypeofpartition1to8e(LinuxLVM)
重復上面的操作來創建其他兩個分區。分區創建完成后,我們應該有類似如下的輸出:
# fdisk -l
Device Boot Start End Blocks Id System
/dev/sdb1 1 132 1060258+ 8e Linux LVM
/dev/sdb2 133 264 1060290 8e Linux LVM
/dev/sdb3 265 396 1060290 8e Linux LVM
1
2
3
4
5
# fdisk -l
DeviceBootStartEndBlocksIdSystem
/dev/sdb111321060258+8eLinuxLVM
/dev/sdb213326410602908eLinuxLVM
/dev/sdb326539610602908eLinuxLVM
準備物理卷(PV)
剛創建的分區是用來儲存物理卷的。LVM可以使用不同大小的物理卷。
# pvcreate /dev/sdb1
# pvcreate /dev/sdb2
# pvcreate /dev/sdb3
1
2
3
# pvcreate /dev/sdb1
# pvcreate /dev/sdb2
# pvcreate /dev/sdb3
使用下列命令檢查物理卷的創建情況。下面截取部分輸出。”/dev/sdb2″是一個新的”1.01 GiB”物理卷。
# pvdisplay
--- NEW Physical volume ---
PV Name /dev/sdb2
VG Name
PV Size 1.01 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID jszvzz-ENA2-g5Pd-irhV-T9wi-ZfA3-0xo092
1
2
3
4
5
6
7
8
9
10
11
# pvdisplay
---NEWPhysicalvolume---
PVName/dev/sdb2
VGName
PVSize1.01GiB
AllocatableNO
PESize0
TotalPE0
FreePE0
AllocatedPE0
PVUUIDjszvzz-ENA2-g5Pd-irhV-T9wi-ZfA3-0xo092
使用下列命令可以刪除物理卷。
# pvremove /dev/sdb1
1
# pvremove /dev/sdb1
準備卷組(VG)
下列命令用來創建名為’volume-group1′的卷組,使用/dev/sdb1, /dev/sdb2 和 /dev/sdb3創建。
# vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3
--- Volume group ---
VG Name volume-group1
System ID
Format lvm2
Metadata Areas 3
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 3
Act PV 3
VG Size 3.02 GiB
PE Size 4.00 MiB
Total PE 774
Alloc PE / Size 0 / 0
Free PE / Size 774 / 3.02 GiB
VG UUID bwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3
---Volumegroup---
VGNamevolume-group1
SystemID
Formatlvm2
MetadataAreas3
MetadataSequenceNo1
VGAccessread/write
VGStatusresizable
MAXLV0
CurLV0
OpenLV0
MaxPV0
CurPV3
ActPV3
VGSize3.02GiB
PESize4.00MiB
TotalPE774
AllocPE/Size0/0
FreePE/Size774/3.02GiB
VGUUIDbwd2pS-fkAz-lGVZ-qc7C-TaKv-fFUC-IzGNBK
從輸出中,我們可以看見卷組的使用量/總量。物理卷給卷組提供空間。只要在這個卷組中還有可用空間,我們就可以隨意創建邏輯卷。
使用下列命令刪除卷組
# vgremove volume-group1
1
# vgremove volume-group1
創建邏輯卷(LV)
下列命令創建一個名為’1v1′、大小為100MB的邏輯卷。我們使用小分區減少執行時間。這個邏輯卷使用之前創建的卷組的空間。
# lvcreate -L 100M -n lv1 volume-group1
1
# lvcreate -L 100M -n lv1 volume-group1
邏輯卷可使用lvdisplay命令查看。
# lvdisplay
--- Logical volume ---
LV Name /dev/volume-group1/lv1
VG Name volume-group1
LV UUID YNQ1aa-QVt1-hEj6-ArJX-I1Q4-y1h1-OFEtlW
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 MiB
Current LE 25
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# lvdisplay
---Logicalvolume---
LVName/dev/volume-group1/lv1
VGNamevolume-group1
LVUUIDYNQ1aa-QVt1-hEj6-ArJX-I1Q4-y1h1-OFEtlW
LVWriteAccessread/write
LVStatusavailable
# open???????????????? 0
LVSize100.00MiB
CurrentLE25
Segments1
Allocationinherit
Readaheadsectorsauto
-currentlysetto256
Blockdevice253:2
現在邏輯卷已經準備好了,我們可以格式化和掛載邏輯卷,就像其它ext2/3/4分區一樣!
# mkfs.ext4 /dev/volume-group1/lv1
# mkdir /lvm-mount
# mount /dev/volume-group1/lv1 /lvm-mount/
1
2
3
# mkfs.ext4 /dev/volume-group1/lv1
# mkdir /lvm-mount
# mount /dev/volume-group1/lv1 /lvm-mount/
一旦邏輯卷掛載,我們就可以到掛載點 /lvm-mount/ 上讀寫了。要創建和掛載其它的邏輯卷,我們重復這個過程。
最后,使用lvremove我們可以刪除邏輯卷。
# umount /lvm-mount/
# lvremove /dev/volume-group1/lv1
1
2
# umount /lvm-mount/
# lvremove /dev/volume-group1/lv1
擴展一個LVM卷
調整邏輯卷大小的功能是LVM最有用的功能。這個部分會討論我們怎么樣擴展一個存在的邏輯卷。下面,我們將會擴展先前創建的邏輯卷‘lv1’擴大到200MB。
注意,調整邏輯卷大小之后,也需要對文件系統調整大小進行匹配。這個額外的步驟各不相同,取決于創建文件系統的類型。在本文中,我們使用’lv1′創建了ext4類型的文件系統,所以這里的操作是針對ext4文件系統的。(ext2/3文件系統也類同)。命令的執行順序是很重要的。
首先,我們卸載掉lv1卷
# umount /lvm-mount/
1
# umount /lvm-mount/
然后,設置卷的大小為200M
# lvresize -L 200M /dev/volume-group1/lv1
1
# lvresize -L 200M /dev/volume-group1/lv1
接下來,檢查磁盤錯誤
# e2fsck -f /dev/volume-group1/lv1
1
# e2fsck -f /dev/volume-group1/lv1
運行以下命令擴展文件系統以后,ext4信息就更新了。
# resize2fs /dev/volume-group1/lv1
1
# resize2fs /dev/volume-group1/lv1
現在,這個邏輯卷應該已經擴展到200MB了。我們檢查LV的狀態來驗證。
# lvdisplay
--- Logical volume ---
LV Name /dev/volume-group1/lv1
VG Name volume-group1
LV UUID 9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa
LV Write Access read/write
LV Status available
# open 0
LV Size 200.00 MiB
Current LE 50
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# lvdisplay
---Logicalvolume---
LVName/dev/volume-group1/lv1
VGNamevolume-group1
LVUUID9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa
LVWriteAccessread/write
LVStatusavailable
# open???????????????? 0
LVSize200.00MiB
CurrentLE50
Segments1
Allocationinherit
Readaheadsectorsauto
-currentlysetto256
Blockdevice253:2
現在,這個邏輯卷可以再次掛載,同樣這個方法也可用于其他分區。
縮減一個LVM卷
這章節介紹縮減LVM卷大小的方法。命令的順序同樣重要。并且,下列命令對ext2/3/4文件系統同樣有效。
注意減少邏輯卷的大小值若小于儲存的數據大小,存儲在后面的數據會丟失。
首先,卸載掉卷。
# umount /dev/volume-group1/lv1
1
# umount /dev/volume-group1/lv1
然后,檢測磁盤錯誤
# e2fsck -f /dev/volume-group1/lv1
1
# e2fsck -f /dev/volume-group1/lv1
接下來縮小文件系統,更新ext4信息。
# resize2fs /dev/volume-group1/lv1 100M
1
# resize2fs /dev/volume-group1/lv1 100M
完成以后,減少邏輯卷大小
# lvresize -L 100M /dev/volume-group1/lv1
1
# lvresize -L 100M /dev/volume-group1/lv1
WARNING: Reducing active logical volume to 100.00 MiB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce lv1? [y/n]: y Reducing logical volume lv1 to 100.00 MiB Logical volume lv1 successfully resized
最后,驗證調整后的邏輯卷大小。
# lvdisplay
--- Logical volume ---
LV Name /dev/volume-group1/lv1
VG Name volume-group1
LV UUID 9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 MiB
Current LE 25
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# lvdisplay
---Logicalvolume---
LVName/dev/volume-group1/lv1
VGNamevolume-group1
LVUUID9RtmMY-0RIZ-Dq40-ySjU-vmrj-f1es-7rXBwa
LVWriteAccessread/write
LVStatusavailable
# open???????????????? 0
LVSize100.00MiB
CurrentLE25
Segments1
Allocationinherit
Readaheadsectorsauto
-currentlysetto256
Blockdevice253:2
轉自:http://xmodulo.com/2014/05/use-lvm-linux.html
譯文:http://blog.jobbole.com/71858/