1.前言

1.1 lvm是什么?

  • LVM,Logical Volume Manger,是linux内核提供的一种逻辑卷管理功能,由内核驱动和应用层工具组成,它是在硬盘的分区基础上,创建了一个逻辑层,可以非常灵活且非常方便的管理存储设备。
  • LVM利用Linux内核的device-mapper功能来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间,避免为正在使用的磁盘重新分区的麻烦、为调整分区而不得不移动其他分区的不便,它相比传统的分区系统可以更灵活地管理磁盘

1.2 lvm的组成

  1. 物理卷(PV,Physical Volume):真实存在的物理磁盘,如我们挂载的磁盘,分区等
  2. 卷组(VG,Volume Group):一组物理卷的集合,一个卷组可以包含多个物理卷
  3. 逻辑卷(LV,Logical Volume):逻辑卷是一个虚拟分区,通过分配卷组上面的空间,挂载到文件目录,也就是说挂载到文件目录上的最终是逻辑卷
  4. 物理块(PE,Physical Extends):一个卷组中最小的连续区域(默认为4 MiB),多个物理块将被分配给一个逻辑卷。你可以把它看成物理卷的一部分,这部分可以被分配给一个逻辑卷。
  5. 关系图,从下图的关系可以看出它们的关系为磁盘->分区->物理卷->卷组->逻辑卷->文件系统

image.png

1.3 lvm的优缺点

优点

  • 相比传统硬盘,lvm更加灵活
  • 可以把多个硬盘看成一个硬盘
  • 可以使用逻辑卷,横跨更多空间
  • 可以动态调整磁盘空间大小

    缺点

  • 和传统的磁盘挂载,多出了很多步骤,些许有点麻烦

    2.lvm的使用

    2.1 分区

    在进行lvm的使用之前,我们先要对我们的磁盘进行分区,并且分区的类型要为lvm类型,分区我们可以使用fdisk或parted工具进行分区

    • 如果使用的是MBR,设置分区类型要为8e
    • 如果使用的是GPT,设置分区类型要为E6D6D379-F507-44C2-A23C-238F2A3DF928
  • 查看磁盘

    我们先给磁盘挂载了一个20G的磁盘,以下会对磁盘进行划分为一个10G和8G的分区,可以先使用fsblk查看我们的磁盘

image.png

  • 进行分区

    再次使用fdisk的命令确定磁盘卷名称

image.png

这里使用fdisk进行分区,先创建了一个10G的磁盘分区

image.png

修改磁盘的类型

image.png

同样步骤,创建一个磁盘空间为8G的分区

image.png

查看磁盘信息

image.png

2.2 物理卷pv

  • 通过lvmdiskscan命令查看可以作为lvm的磁盘分区

    从下图可以查看/dev/sda2已经是lvm的pv,这里我们可以使用/dev/sdb1和/dev/sdb2创建pv物理卷

  1. lvmdiskscan

image.png

  • 使用pvcreate创建pv

    1. # pvcreate device1 device2 ... 格式
    2. pvcreate /dev/sdb1 /dev/sdb2

    image.png
    image.png

  • 查看pv信息

    可以使用pvc、pvscan、pvdisplay查看物理卷pv的信息

image.png

2.3 卷组vg

  • 使用vgcreate创建卷组

    1. # vgcreate vg_name pv1 pv2 ... 格式
    2. vgcreate my-vg /dev/sdb1 /dev/sdb2

    image.png

  • 查看vg信息

    可以使用vgs、vgscan、vgdisplay查看vg的相关信息

image.png

2.4 逻辑卷lv

  • 使用lvcreate创建逻辑卷

    1. lvcreate -L <lv_size> <vg_name> -n <lv_name>
    2. lvcreate -L 5G my-vg -n lv-test01
  • 查看lv相关信息

    • 可以使用lvs、lvscan、lvdisplay查看相关信息

    image.png

    • 逻辑卷创建完成后,可以在/dev/mapper/下查看磁盘

    image.png

2.5挂载磁盘

在我们创建好逻辑卷的时候,我们就可以对磁盘进行挂载了,不过挂载之前,需要对磁盘进行格式化,这里要注意的是,我们是对我们的逻辑盘进行格式化和挂载,并不是我们磁盘的物理分区进行格式化和挂载

  • 查看逻辑盘路径

    使用lvdisplay查看

image.png

  • 格式化磁盘和挂载 ```bash

    mkfs. /dev/mapper/- 格式

    mkfs.ext4 /dev/my-vg/lv-test01 mount /dev/my-vg/lv-test01 /work/
  1. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/1747240/1656299301699-3452008d-ba0c-46f3-8985-7def4045e3c9.png#clientId=ub9570a69-7220-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=741&id=u128d0774&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1482&originWidth=3134&originalType=binary&ratio=1&rotation=0&showTitle=false&size=416852&status=done&style=none&taskId=u5d9e760f-3e81-4271-8c22-19f141946fe&title=&width=1567)
  2. > 在我们挂载磁盘后,我们需要在/etc/fstab进行增加配置,不然下次机器重启后,又需要重新挂载
  3. <a name="nPbB4"></a>
  4. ## 3.扩容
  5. <a name="sUFLN"></a>
  6. ### 3.1 现有磁盘扩容
  7. > 对磁盘进行扩容其实就是扩容逻辑盘的空间大小,扩容逻辑盘可以使用lvextend命令进行扩容
  8. > - 命令格式:lvextend -L <extend_size> <lv_path>
  9. - 具体操作
  10. > 这里我们对/dev/my-vg/lv-test01进行增加5g的容量扩容
  11. ```bash
  12. lvextend -L +5G /dev/mapper/my--vg-lv--test01

image.png

从上图可以看到,我们的磁盘已经进行了5G的扩容,但是磁盘大小并没有刷新变化,这里是因为我已经挂载过了磁盘,所以需要使用resize2fs(ext文件类型)命令或xfs_growfs(xfs文件类型)命令使磁盘生效,可以通过df -Th命令查看文件类型

image.png
image.png

3.2 新增磁盘扩容

新增磁盘扩容步骤

  1. 新增磁盘
  2. 对磁盘进行分区
  3. 创建物理盘
  4. 将物理盘加入到现有的劵组
  5. 扩容磁盘&刷新磁盘
  1. 新增磁盘

image.png

  1. 分区

image.png

  1. 创建物理盘

image.png

  1. 加入卷组

    1. # vgextend <vg-name> pv1 pv2 pv3 ...
    2. vgextend my-vg /dev/sdc1

    image.png

  2. 扩容&刷新磁盘

    1. lvextend -L +15G /dev/mapper/my--vg-lv--test01 # 扩容磁盘
    2. resize2fs /dev/mapper/my--vg-lv--test01 # 刷新磁盘

    image.png

    4.常见错误

    4.1 分区查找不到

    如果磁盘分区完成后,查询不到我们创建的分区,可以使用partprobe命令刷新分区表