zoukankan      html  css  js  c++  java
  • 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进行容量调整
  • 相关阅读:
    Yii2框架bootstrap样式理解
    spring 配置bean的方法及依赖注入发方式
    C#深拷贝
    【麦子学院】Linux cmd命令大全
    JEECG中的validform验证ajaxurl的使用方法
    ORACLE 如何查询被锁定表及如何解锁释放session
    获取请求真实ip
    jsp值传到后台Struts2中的action三种方法
    ajax 二级联动与springmvc 交互
    SpringMVC返回json数据的三种方式
  • 原文地址:https://www.cnblogs.com/lizhimin123/p/10792440.html
Copyright © 2011-2022 走看看