LVM扩容常见问题及解决方案

逻辑卷管理工具(Logical Volume Manager,LVM)是一种用于管理存储设备的工具。它允许管理员将多个物理磁盘分配给一个逻辑卷,并将其视为单个逻辑磁盘。逻辑卷位于物理卷和文件系统之间,通过逻辑卷管理,文件系统不受限于硬盘大小,可以分布在多个硬盘上。在LVM逻辑卷扩容过程中,可能会出现一些问题,下面列举了几个常见问题及其解决方案。

准备工作

LVM工具集已经预装在 Alibaba Cloud Linux 中,执行以下命令可以查看安装情况。

rpm -q lvm2

若不存在,则执行以下命令安装LVM工具。

sudo yum install -y lvm2

背景信息

物理卷(Physical Volume)是LVM的基本存储逻辑块,在通过LVM创建文件系统前,需要预留磁盘空间,使用fdiskparted等工具进行分区。您也可以将整个磁盘作为LVM的物理卷。通过LVM提供的pvcreatepvdisplay等命令,可以创建和查看物理卷。在准备好的物理卷上,使用vgcreate创建卷组(Volume Group)。卷组是一个逻辑概念,用于管理多个物理卷,并为逻辑卷提供统一的空间管理。在创建的卷组上,使用lvcreate创建逻辑卷(Logical Volume)。逻辑卷是用户可见的卷,用户可以在其上创建文件系统和逻辑卷管理等操作。具体操作,请参见创建逻辑卷

常见问题及解决方案

以下列举了LVM逻辑卷扩容过程中常见问题及其解决方案。

new size given not larger than existing size

问题现象

系统报错“new size given not larger than existing size”,典型的场景为:

假设当前逻辑卷容量为30 GB,卷组上空闲容量为10 GB,希望将该逻辑卷扩容10 GB。

  • 执行以下命令,将扩容逻辑卷扩容到10 GB。

    sudo lvextend -L 10G /dev/myvg/mylv

    返回错误信息:

    New size given (2560 extents) not larger than existing size (7680 extents)
  • 执行 -l 100%free命令扩容。

    sudo lvextend -l 100%free /dev/myvg/mylv

    返回错误信息:

    New size given (2559 extents) not larger than existing size (7680 extents)

问题原因

lvextend-L-l后接的参数中,带有“+”、“-”号时代表的是相对值,不带则代表扩容后的绝对值。使用-L 10G,代表将逻辑卷扩容到10 GB,而非增加10 GB。因此,对于当前30 GB的逻辑卷来说,扩容后的容量小于当前容量,所以报错。对100%free的情况同理,当前剩余10 GB空闲空间,同样小于逻辑卷当前容量,因此会失败。

解决方案

正确的命令格式应该为以下几种(实际操作选择任意一种即可)。

  • 为该逻辑卷扩容10 GB空间。

    sudo lvextend -L +10G /dev/myvg/mylv
  • 将该逻辑卷扩容至40 GB。

    sudo lvextend -L 40G /dev/myvg/mylv
  • 将卷组的剩余空间都分配给该逻辑卷。

    sudo lvextend -l +100%free /dev/myvg/mylv

please specify number of stripes and stripesize

问题现象

  1. 使用lvextendlvresize对一个逻辑卷做扩容。

    sudo lvextend -L 11G /dev/myvg/mylv2

    返回错误信息:

    Please specify number of stripes (-i) and stripesize (-I)
  2. 查看逻辑卷的详细信息。

    sudo lvdisplay -m /dev/myvg/mylv2

    返回信息如下,可以发现这块逻辑卷的特殊之处:包含多个Segments,且属于不同类型。

    --- Logical volume ---
      LV Path                /dev/myvg/mylv2
      LV Name                mylv2
      VG Name                myvg
      LV UUID                KcsDt4-KZqt-lJoG-6Bbf-EA2E-p3NL-HwtLoM
      LV Write Access        read/write
      LV Creation host, time iZbp1dl0nq6ijmfr0nl****, 2024-06-25 15:44:22 +0800
      LV Status              available
      # open                 0
      LV Size                10.00 GiB
      Current LE             2560
      Segments               2
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     256
      Block device           252:1
    
      --- Segments ---
      Logical extents 0 to 2047:
        Type    linear
        Physical volume    /dev/vdc3
        Physical extents    0 to 2047
    
      Logical extents 2048 to 2559:
        Type    striped
        Stripes    2
        Stripe size    16.00 KiB
        Stripe 0:
          Physical volume    /dev/vdc1
          Physical extents    1280 to 1535
        Stripe 1:
          Physical volume    /dev/vdc2
          Physical extents    1280 to 1535

问题原因

在创建该逻辑卷时,采用了linear的类型,随后又将该逻辑卷的扩展空间设置为条带化(条带化指将逻辑卷的数据分布在多个物理存储设备,便于数据读写操作并行地同时进行在多块盘上,提高读写速度)。再次扩展时,需要注意手动设置条带数目(Stripes)和条带写入数据量(Stripesize)。

解决方案

例如,您可以使用如下命令执行扩容。

sudo lvresize -i 2 -I 1M --type striped -L 14G /dev/myvg/mylv2

其中:

-i代表条带数量、-I代表条带大小、--type指定了针对striped类型的逻辑区间进行扩容、-L指定了扩容后的大小。