假设我创建了以下 Linux LVM 卷组和逻辑卷:
$ sudo vgcreate vg1 /dev/sdb1
$ sudo lvcreate -L 10G -n lv1 vg1
$ sudo lvcreate -L 10G -n lv2 vg1
$ sudo lvcreate -L 10G -n lv3 vg1
$ sudo mkfs.ext4 /dev/mapper/vg1-lv1
$ sudo mkfs.ext4 /dev/mapper/vg1-lv2
$ sudo mkfs.ext4 /dev/mapper/vg1-lv3
我最终得到以下内容,它们都将使用 ext4 文件系统:
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lv1 vg1 -wi-a----- 10.00g
lv2 vg1 -wi-a----- 10.00g
lv3 vg1 -wi-a----- 10.00g
我想减少lv1 大小从 10G 变为 5G,并且生长lv2 大小从 10G 增加到 15G。这意味着 lv2 需要向磁盘前端增长。
$ sudo lvreduce --resizefs --size 5G /dev/mapper/vg1-lv1
fsck from util-linux 2.36.1
/dev/mapper/vg1-lv1: clean, 11/655360 files, 66753/2621440 blocks
resize2fs 1.46.3 (27-Jul-2021)
Resizing the filesystem on /dev/mapper/vg1-lv1 to 1310720 (4k) blocks.
The filesystem on /dev/mapper/vg1-lv1 is now 1310720 (4k) blocks long.
Size of logical volume vg1/lv1 changed from 10.00 GiB (2560 extents) to 5.00 GiB (1280 extents).
Logical volume vg1/lv1 successfully resized.
减少 LV1 似乎有效。我现在该如何增加 LV2?
答案1
是的,这是可能的。lvm 的一个主要特点是它将磁盘从分区中抽象出来,因此即使您在磁盘末尾释放块(或者在本例中在下一个分区开始之前),lvm 也会允许您将其添加到现有分区,因为它在内部映射块。这里唯一棘手的一点是缩小 lv1,因为它已经在 iit 上有一个文件系统,而 ext4 文件系统无法在线缩小。
我认为所有块设备操作都具有一定程度的风险,因此建议在尝试之前先进行备份,这是最佳实践。
没有唯一正确的解决方案,而且我不在电脑旁,所以我无法测试我的 dyntax,但我可以这样做 -
卸载 lvm1 / 使其进入卸载状态(如果它是根分区,则可能需要使用 USB 磁盘)
将其上的文件系统缩小到比最终应有的大小(您可以使用 resize2fs/resize4fs 来缩小未挂载的卷)
使用 lvreduce 将 lvm1 缩小到所需大小。它不能小于调整大小后的 ext4 分区。
Resize4fs(resize2fs)扩展 lvm1 上的文件系统。
(严格来说,如果您的数学计算正确,则无需先将卷调整为较小尺寸,然后再将其扩展,但我发现在使用 512/1024/2048 字节块时,这要容易得多)。此时,最困难的部分已经完成。
- 使用 lvexpand 来扩大 lvm2,使用 resize4fs 来扩大文件系统。这可以在线完成。