想象一個場景,你在安裝系統時分配該/home 50GB,隨着後續使用致使/home 的文件系統不夠大,這時須要怎麼去解決?能夠選擇加裝一塊硬盤,從新分區格式化,將原來的數據遷移過來。這樣的作法十分麻煩,而且從新分配的空間不能靈活地進行調整。咱們可使用LVM來彈性調整文件系統的容量。app
LVM能夠將多個物理分區整合在一塊兒,像一個總體的硬盤同樣使用,而且能夠將其中的物理分區從LVM管理的磁盤上面移除。LVM全名 Logical Volume Manager,譯做邏輯卷管理器。在實現LVM以前,須要瞭解幾個概念。spa
lVM彈性調整文件系統的容量,實際上就是經過PE來實現的。經過交換PE來使原來LV內的PE轉移到其餘設備中,以此達到下降LV容量;將其餘設備的PE加入到此LV內,實現擴大LV的容量。code
本次實驗使用的是8GB的移動U盤,首先經過 fdisk 命令將硬盤分爲大小爲1.9GB的四個分區。fdisk命令的具體使用不展開。分割後,硬盤的分區狀況以下:orm
Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 3995136 3993089 1.9G 83 Linux /dev/sdb2 3995648 7988224 3992577 1.9G 83 Linux /dev/sdb3 7989248 11982336 3993089 1.9G 83 Linux /dev/sdb4 11982848 15974399 3991552 1.9G 83 Linux
經過 pvcreate 命令將4個分區構建爲PV,而後用 pvscan 查看系統內具備PV的磁盤。blog
root@lzm-PC:~# pvcreate /dev/sdb{1,2,3,4} Physical volume "/dev/sdb1" successfully created. Physical volume "/dev/sdb2" successfully created. Physical volume "/dev/sdb3" successfully created. Physical volume "/dev/sdb4" successfully created.
root@lzm-PC:~# pvscan PV /dev/sdb4 lvm2 [1.90 GiB] PV /dev/sdb2 lvm2 [1.90 GiB] PV /dev/sdb1 lvm2 [1.90 GiB] PV /dev/sdb3 lvm2 [1.90 GiB]
構建完成PV後,用 vgcreate 命令新建VG卷用戶組。vgcreate 命令後的 -s 參數跟的是PE的大小。這裏咱們只使用3個PV來構建VG,構建完成後能夠用 vgdisplay 命令查看卷用戶組的狀態。ip
root@lzm-PC:~# vgcreate -s 8MB vg_test /dev/sdb{1,2,3} Volume group "vg_test" successfully created
從VG狀態看到,此時VG的容量爲1.9*3=5.7GB資源
root@lzm-PC:~# vgdisplay --- Volume group --- VG Name vg_test 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 <5.70 GiB PE Size 8.00 MiB Total PE 729 Alloc PE / Size 0 / 0 Free PE / Size 729 / <5.70 GiB VG UUID Ua7yHh-wL3G-OlWj-bxoF-kzNl-kLSp-QVG4yJ
創造出VG大磁盤後,接下來要進行的就是新建分區。經過 lvcreate 命令將整個VG的容量都分配到vg_test 中去。rem
root@lzm-PC:~# lvcreate -l 729 -n lv_test vg_test Logical volume "lv_test" created.
經過 lvdisplay 能夠看到 LV 的狀態it
root@lzm-PC:~# lvdisplay --- Logical volume --- LV Path /dev/vg_test/lv_test LV Name lv_test VG Name vg_test LV UUID XG44wY-LOPr-nemh-gcK4-GC1a-Z2Vx-SLXkjX LV Write Access read/write LV Creation host, time lzm-PC, 2019-04-30 10:44:02 +0800 LV Status available # open 0 LV Size <5.70 GiB Current LE 729 Segments 3 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
最後,咱們建立文件系統並掛載磁盤。完成如下步驟後就可使用 /mnt/lvm 內的資源了。io
root@lzm-PC:~# mkfs -t ext3 /dev/vg_test/lv_test root@lzm-PC:~# mount /dev/vg_test/lv_test /mnt/lvm root@lzm-PC:~# df 文件系統 1K-塊 已用 可用 已用% 掛載點 udev 3915108 0 3915108 0% /dev tmpfs 788172 3168 785004 1% /run /dev/nvme0n1p3 122476144 63709376 52502244 55% / tmpfs 3940848 43640 3897208 2% /dev/shm tmpfs 5120 4 5116 1% /run/lock tmpfs 3940848 0 3940848 0% /sys/fs/cgroup /dev/nvme0n1p1 306008 58560 247448 20% /boot/efi tmpfs 788168 28 788140 1% /run/user/1000 /dev/nvme0n1p2 124787928 41330544 83457384 34% /media/lzm/A0A29841A2981E3A /dev/sda2 234413052 52811968 181601084 23% /media/lzm/新加捲 /dev/mapper/vg_test-lv_test 5812528 11740 5502192 1% /mnt/lvm
總結構建 LV 的大體步驟:
經過 pvscan 命令,能夠看到4個分區中的 /dev/sdb4 尚未使用上。
root@lzm-PC:~# pvscan PV /dev/sdb1 VG vg_test lvm2 [<1.90 GiB / 0 free] PV /dev/sdb2 VG vg_test lvm2 [<1.90 GiB / 0 free] PV /dev/sdb3 VG vg_test lvm2 [<1.90 GiB / 0 free] PV /dev/sdb4 lvm2 [1.90 GiB]
經過 vgextend 命令加大VG容量。VG狀態中243個未分配的PE。
root@lzm-PC:~# vgextend vg_test /dev/sdb4 Volume group "vg_test" successfully extended root@lzm-PC:~# vgdisplay --- Volume group --- VG Name vg_test System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 4 Act PV 4 VG Size 7.59 GiB PE Size 8.00 MiB Total PE 972 Alloc PE / Size 729 / <5.70 GiB Free PE / Size 243 / <1.90 GiB // 剩餘未分配的PE VG UUID Ua7yHh-wL3G-OlWj-bxoF-kzNl-kLSp-QVG4yJ
利用 lvresize 命令來增長 LV容量。lvresize 後 LV 的容量增長到7.59GB,此時只是LV的容量擴大了,文件系統並無相應的增長,所以還須要使用 resize2fs 來更新文件系統的信息。
root@lzm-PC:~# lvresize -l +243 /dev/vg_test/lv_test Size of logical volume vg_test/lv_test changed from <5.70 GiB (729 extents) to 7.59 GiB (972 extents). Logical volume vg_test/lv_test successfully resized. root@lzm-PC:~# lvdisplay --- Logical volume --- LV Path /dev/vg_test/lv_test LV Name lv_test VG Name vg_test LV UUID XG44wY-LOPr-nemh-gcK4-GC1a-Z2Vx-SLXkjX LV Write Access read/write LV Creation host, time lzm-PC, 2019-04-30 10:44:02 +0800 LV Status available # open 1 LV Size 7.59 GiB Current LE 972 Segments 4 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0
使用 resize2fs 將 LV 容量擴充到整個文件系統。
root@lzm-PC:~# resize2fs /dev/vg_test/lv_test root@lzm-PC:~# df /mnt/lvm 文件系統 1K-塊 已用 可用 已用% 掛載點 /dev/mapper/vg_test-lv_test 7772576 13196 7383492 1% /mnt/lvm
總結擴大 LV 容量的大體步驟:
首先將LV容量縮小,而且卸載後從新掛載磁盤。
// resize2fs 命令前系統提示須要進行磁盤檢查 root@lzm-PC:~# e2fsck -f /dev/vg_test/lv_test root@lzm-PC:~# resize2fs /dev/vg_test/lv_test 5836M root@lzm-PC:~# umount /mnt/lvm // 從新掛載磁盤 root@lzm-PC:~# resize2fs /dev/vg_test/lv_test 5836M root@lzm-PC:~# mount /dev/vg_test/lv_test /mnt.lvm
假設咱們須要移除 /dev/sdb3 分區,該分區的PE數量能夠經過pvdisplay 得到,此處爲243,上述新LV的容量也是這麼計算出來的。
root@lzm-PC:~# lvresize -l -243 /dev/vg_test/lv_test
咱們經過 lvdisplay 來查看 LV 容量調整後,PV物理卷的狀態。
root@lzm-PC:~# lvdisplay--- Physical volume --- PV Name /dev/sdb3 VG Name vg_test PV Size 1.90 GiB / not usable 5.75 MiB Allocatable yes (but full) PE Size 8.00 MiB Total PE 243 Free PE 0 Allocated PE 243 PV UUID 4j09v7-4TT2-KJ0e-INGu-0KUU-fIUH-y1CSg3 --- Physical volume --- PV Name /dev/sdb4 VG Name vg_test PV Size 1.90 GiB / not usable 5.00 MiB Allocatable yes PE Size 8.00 MiB Total PE 243 Free PE 243 Allocated PE 0 PV UUID GMTmEY-lRqq-oa6Y-cf90-i015-voTH-N48R3C
這裏移除的243個PE落在了 /dev/sdb4 上,可使用 pvmove 命令將 /dev/sdb3 內的PE所有移動到 /dev/sdb4。
root@lzm-PC:~# pvmove /dev/sdb3 /dev/sdb4 root@lzm-PC:~# pvdisplay --- Physical volume --- PV Name /dev/sdb3 VG Name vg_test PV Size 1.90 GiB / not usable 5.75 MiB Allocatable yes PE Size 8.00 MiB Total PE 243 Free PE 243 Allocated PE 0 PV UUID 4j09v7-4TT2-KJ0e-INGu-0KUU-fIUH-y1CSg3 --- Physical volume --- PV Name /dev/sdb4 VG Name vg_test PV Size 1.90 GiB / not usable 5.00 MiB Allocatable yes (but full) PE Size 8.00 MiB Total PE 243 Free PE 0 Allocated PE 243 PV UUID GMTmEY-lRqq-oa6Y-cf90-i015-voTH-N48R3C
移動後 /dev/sdb3 中的PE再也不被使用,接下來使用 vgreduce 將分區從VG中移除。
root@lzm-PC:~# vgreduce vg_test /dev/sdb3 Removed "/dev/sdb3" from volume group "vg_test"
最後,使用 pvremove 將分區中 PV中移除
root@lzm-PC:~# pvremove /dev/sdb3 Labels on physical volume "/dev/sdb3" successfully wiped.
總結縮小 LV 容量的大體步驟:
階段 | 命令 | 做用 |
PV階段 | pvcreate 物理分區名 | 將物理分區新建成PV |
pvscan | 查詢系統內具備PV的磁盤 | |
pvdisplay | 顯示系統上的PV狀態 | |
pvremove | 將物理分區的PV屬性刪除 | |
VG階段 | vgcreate -s PE大小 VG名稱 PV名稱 | 新建VG |
vgscan | 查看系統上是否有VG存在 | |
vgdisplay | 顯示系統上的VG狀態 | |
vgextend VG名稱 PV名稱 | 在VG內增長額外的PV | |
vgreduce VG名稱 PV名稱 | 在VG內刪除PV | |
vgremove VG名稱 | 刪除VG | |
LV階段 | lvcreate -l PE數 -n LV名稱 VG名稱 | 新建LV |
lvscan | 查詢系統上的LV | |
lvdisplay | 顯示系統上的LV狀態 | |
lvremove | 刪除一個LV | |
lvresize | 對LV進行容量調整 |