LVM 邏輯卷管理器

1 LVM相關理論

1.1 LVM的做用及構成

  想象一個場景,你在安裝系統時分配該/home 50GB,隨着後續使用致使/home 的文件系統不夠大,這時須要怎麼去解決?能夠選擇加裝一塊硬盤,從新分區格式化,將原來的數據遷移過來。這樣的作法十分麻煩,而且從新分配的空間不能靈活地進行調整。咱們可使用LVM來彈性調整文件系統的容量app

  LVM能夠將多個物理分區整合在一塊兒,像一個總體的硬盤同樣使用,而且能夠將其中的物理分區從LVM管理的磁盤上面移除。LVM全名 Logical Volume Manager,譯做邏輯卷管理器。在實現LVM以前,須要瞭解幾個概念。spa

  1. PV 物理卷,經過系統標識符來分辨的最低層的物理卷。實際可經過 fdisk 命令將硬盤分割爲不一樣的物理卷。
  2. VG 卷用戶組,由許多PV整合成一個VG,就是LVM管理的一個大磁盤。
  3. PE 物理擴展塊,LVM中最小的存儲塊,每一個VG最多有65534個PE
  4. LV 邏輯卷,由PV整合構成的VG最後會被分割層LV,相似於分區的概念。

  lVM彈性調整文件系統的容量,實際上就是經過PE來實現的。經過交換PE來使原來LV內的PE轉移到其餘設備中,以此達到下降LV容量;將其餘設備的PE加入到此LV內,實現擴大LV的容量。code

1.2 LVM實現流程

 2 LVM實現

2.1 硬盤分區

  本次實驗使用的是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

2.2 構建LVM

經過 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 的大體步驟:

  1. fdisk 劃分硬盤分區
  2. pvcreate 在分區上建立PV物理卷
  3. vgcreate 建立卷用戶組,同時指定PE大小
  4. lvcreate 建立LV,該命令可指定 LV 邏輯卷的大小
  5. mkfs、mount 建立文件系統並掛載磁盤

2.3 擴大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 容量的大體步驟:

  1. vgextend 擴大 VG 的容量
  2. lvresize 調整 LV 邏輯卷的容量
  3. resize2fs 將容量擴充到文件系統

 

2.4 縮小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 容量的大體步驟:

  1. resize2fs 縮小文件系統中 LV 的容量
  2. umount 卸載磁盤
  3. resize2fs 、mount從新掛載磁盤
  4. lvresize 縮小 LV 的容量
  5. pvmove 使移除分區不被使用中
  6. vgreduce 將分區移除 VG
  7. pvremove 將分區移除PV

 

3 LVM相關命令

階段 命令 做用
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進行容量調整
相關文章
相關標籤/搜索