我有一台带有软件 RAID 10 阵列的 KVM 主机。软件 RAID 10 阵列是主机上的一个 PV,并且有一个 VG。
我有几个在主机级别使用的 LV(KVM 来宾.img
文件的数据存储)。
通常,当向来宾添加新磁盘时,我在主机上创建 LV,然后将其添加到来宾的配置中。然后pvcreate
直接在块设备上(无分区),vgcreate
以及lvcreate
在mkfs
来宾内的新块设备上。
我之前没有费心对块设备进行分区,pvcreate
因为在调整主机上的 LV 大小时,这少了一步。我意识到缺点是理论上某些系统可能会决定自动对未分区的块设备进行分区,因为它们无法识别 LVM 元数据,尽管我在实践中从未见过这种情况发生。
当调整主机上 LV 的大小时,PV 中的可用空间会被占用,我必须这样做vgextend
,lvextend
并且resize2fs
在来宾中也是如此。
我不认为有一种方法可以跳过在来宾中运行 LVM,然后只lvextend
在主机上运行,然后resize2fs
在来宾中运行?
答案1
我不认为有一种方法可以跳过在来宾中运行 LVM,而只在主机上进行 lvextend,然后在来宾中调整 size2fs?
绝对没有要求在 guest 虚拟机中使用 LVM。直接使用块设备即可。使用LVM里面来宾几乎无法为您带来任何好处(因为您已经在主机上使用 LVM 来管理您的空间)。
如果“KVM”指的是“libvirt”,那么在调整块设备大小后,您可以使用该virsh blockresize
命令让您的客户机识别额外的空间。也就是说,如果我有一位带有附加 LV 的客人:
</disk><disk type="block" device="disk">
<driver name="qemu" type="raw"/>
<source dev="/dev/tank/foobar"/>
<backingStore/>
<target dev="vdb" bus="virtio"/>
<alias name="virtio-disk1"/></disk>
在哪里:
# lvs
foobar tank -wi-ao---- 4.00g
我可以向主机上的 LV 添加空间:
# lvresize -L +2G /dev/tank/foobar
告诉 libvirt 更新大小:
# virsh blockresize myguest /dev/tank/foobar --size 0
然后在来宾内部,调整文件干的大小:
guest# resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/vdb to 1572864 (4k) blocks.
The filesystem on /dev/vdb is now 1572864 (4k) blocks long.