邏輯卷管理LVM是一個多才多藝的硬碟系統工具。無論在Linux或者其他類似的系統,都是非常的好用。傳統分割槽使用固定大小分割槽,重新調整大小十分麻煩。但是,LVM可以建立和管理“邏輯”卷,而不是直接使用物理硬碟。可以讓管理員彈性的管理邏輯卷的擴大縮小,操作簡單,而不損壞已儲存的資料。可以隨意將新的硬碟新增到LVM,以直接擴充套件已經存在的邏輯卷。LVM並不需要重啟就可以讓核心知道分割槽的存在。
LVM使用分層結構,如下圖所示。
圖中頂部,首先是實際的物理磁碟及其劃分的分割槽和其上的物理卷(PV)。一個或多個物理卷可以用來建立卷組(VG)。然後基於卷組可以建立邏輯卷(LV)。只要在卷組中有可用空間,就可以隨心所欲的建立邏輯卷。檔案系統就是在邏輯捲上建立的,然後可以在作業系統掛載和訪問。
LVM測試說明
本文將介紹怎麼在linux中建立和管理LVM卷。我們將會分成兩個部分。第一個部分,我們首先要在一個硬碟上建立多個邏輯卷,然後將它們掛載在/lvm-mount目錄。然後我們將要對建立好的卷調整大小。而第二部分,我們將會從另外一塊硬碟增加額外的捲到LVM中。
準備磁碟分割槽
通過使用fdisk,建立磁碟分割槽。我們需要建立3個1G分割槽,注意,並不要求分割槽的大小一致。同樣,分割槽需要使用‘8e’型別來使他們可用於LVM。
1 |
# fdisk /dev/sdb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
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 |
# fdisk -l |
1 2 3 4 |
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 |
準備物理卷(PV)
剛建立的分割槽是用來儲存物理卷的。LVM可以使用不同大小的物理卷。
1 2 3 |
# pvcreate /dev/sdb1 # pvcreate /dev/sdb2 # pvcreate /dev/sdb3 |
使用下列命令檢查物理卷的建立情況。下面擷取部分輸出。”/dev/sdb2″是一個新的”1.01 GiB”物理卷。
1 |
# pvdisplay |
1 2 3 4 5 6 7 8 9 10 |
--- 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 |
# pvremove /dev/sdb1 |
準備卷組(VG)
下列命令用來建立名為’volume-group1’的卷組,使用/dev/sdb1, /dev/sdb2 和 /dev/sdb3建立。
1 |
# vgcreate volume-group1 /dev/sdb1 /dev/sdb2 /dev/sdb3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
--- 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 |
# vgremove volume-group1 |
建立邏輯卷(LV)
下列命令建立一個名為’1v1’、大小為100MB的邏輯卷。我們使用小分割槽減少執行時間。這個邏輯卷使用之前建立的卷組的空間。
1 |
# lvcreate -L 100M -n lv1 volume-group1 |
邏輯卷可使用lvdisplay命令檢視。
1 |
# lvdisplay |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- 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 |
現在邏輯卷已經準備好了,我們可以格式化和掛載邏輯卷,就像其它ext2/3/4分割槽一樣!
1 2 3 |
# mkfs.ext4 /dev/volume-group1/lv1 # mkdir /lvm-mount # mount /dev/volume-group1/lv1 /lvm-mount/ |
一旦邏輯卷掛載,我們就可以到掛載點 /lvm-mount/ 上讀寫了。要建立和掛載其它的邏輯卷,我們重複這個過程。
最後,使用lvremove我們可以刪除邏輯卷。
1 2 |
# umount /lvm-mount/ # lvremove /dev/volume-group1/lv1 |
擴充套件一個LVM卷
調整邏輯卷大小的功能是LVM最有用的功能。這個部分會討論我們怎麼樣擴充套件一個存在的邏輯卷。下面,我們將會擴充套件先前建立的邏輯卷‘lv1’擴大到200MB。
注意,調整邏輯卷大小之後,也需要對檔案系統調整大小進行匹配。這個額外的步驟各不相同,取決於建立檔案系統的型別。在本文中,我們使用’lv1’建立了ext4型別的檔案系統,所以這裡的操作是針對ext4檔案系統的。(ext2/3檔案系統也類同)。命令的執行順序是很重要的。
首先,我們解除安裝掉lv1卷
1 |
# umount /lvm-mount/ |
然後,設定卷的大小為200M
1 |
# lvresize -L 200M /dev/volume-group1/lv1 |
接下來,檢查磁碟錯誤
1 |
# e2fsck -f /dev/volume-group1/lv1 |
執行以下命令擴充套件檔案系統以後,ext4資訊就更新了。
1 |
# resize2fs /dev/volume-group1/lv1 |
現在,這個邏輯卷應該已經擴充套件到200MB了。我們檢查LV的狀態來驗證。
1 |
# lvdisplay |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- 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 |
現在,這個邏輯卷可以再次掛載,同樣這個方法也可用於其他分割槽。
縮減一個LVM卷
這章節介紹縮減LVM卷大小的方法。命令的順序同樣重要。並且,下列命令對ext2/3/4檔案系統同樣有效。
注意減少邏輯卷的大小值若小於儲存的資料大小,儲存在後面的資料會丟失。
首先,解除安裝掉卷。
1 |
# umount /dev/volume-group1/lv1 |
然後,檢測磁碟錯誤。
1 |
# e2fsck -f /dev/volume-group1/lv1 |
接下來縮小檔案系統,更新ext4資訊。
1 |
# resize2fs /dev/volume-group1/lv1 100M |
完成以後,減少邏輯卷大小
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
最後,驗證調整後的邏輯卷大小。
1 |
# lvdisplay |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- 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 |