逻辑卷管理工具(Logical Volume Manager,LVM)是一种用于管理存储设备的工具。它允许管理员将多个物理磁盘分配给一个逻辑卷,并将其视为单个逻辑磁盘。逻辑卷位于物理卷和文件系统之间,通过逻辑卷管理,文件系统不受限于硬盘大小,可以分布在多个硬盘上。在LVM逻辑卷扩容过程中,可能会出现一些问题,下面列举了几个常见问题及其解决方案。
准备工作
LVM工具集已经预装在 Alibaba Cloud Linux 中,执行以下命令可以查看安装情况。
rpm -q lvm2
若不存在,则执行以下命令安装LVM工具。
sudo yum install -y lvm2
背景信息
物理卷(Physical Volume)是LVM的基本存储逻辑块,在通过LVM创建文件系统前,需要预留磁盘空间,使用fdisk
或parted
等工具进行分区。您也可以将整个磁盘作为LVM的物理卷。通过LVM提供的pvcreate
、pvdisplay
等命令,可以创建和查看物理卷。在准备好的物理卷上,使用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
问题现象
使用
lvextend
或lvresize
对一个逻辑卷做扩容。sudo lvextend -L 11G /dev/myvg/mylv2
返回错误信息:
Please specify number of stripes (-i) and stripesize (-I)
查看逻辑卷的详细信息。
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
指定了扩容后的大小。