LVM 逻辑卷管理器

1 LVM相关理论

1.1 LVM的作用及构成

  想象一个场景,你在安装系统时分配该/home 50GB,随着后续使用导致/home 的文件系统不够大,这时需要怎么去解决?可以选择加装一块硬盘,重新分区格式化,将原来的数据迁移过来。这样的做法十分麻烦,并且重新分配的空间不能灵活地进行调整。我们可以使用LVM来弹性调整文件系统的容量

  LVM可以将多个物理分区整合在一起,像一个整体的硬盘一样使用,并且可以将其中的物理分区从LVM管理的磁盘上面移除。LVM全名 Logical Volume Manager,译作逻辑卷管理器。在实现LVM之前,需要了解几个概念。

  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的容量。

1.2 LVM实现流程

 2 LVM实现

2.1 硬盘分区

  本次实验使用的是8GB的移动U盘,首先通过 fdisk 命令将硬盘分为大小为1.9GB的四个分区。fdisk命令的具体使用不展开。分割后,硬盘的分区情况如下:

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的磁盘。

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 命令查看卷用户组的状态。

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 中去。

root@lzm-PC:~# lvcreate -l 729 -n lv_test vg_test
  Logical volume "lv_test" created.

 

通过 lvdisplay 可以看到 LV 的状态

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 内的资源了。

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进行容量调整
posted @ 2019-04-30 15:34  不学习就没有梦想  阅读(552)  评论(0编辑  收藏  举报
levels of contents