所有虚拟机均在 LVM 池中运行。
我调整了其中一个 LVM 卷的大小以增加虚拟机驱动器容量。像lvextend
往常一样调整了它的大小。一切都成功并lvs
显示新的大小。
但是 Libvirt 看不到新的大小。我尝试刷新 - 没有成功。它仍然显示旧容量。
在卷上运行virsh vol-info
会在容量条目中显示旧大小,在分配条目中显示新大小。为什么会这样?以前从来没有这样过。增加 LVM 卷会传播并在刷新后可见。
现在,将新大小添加到虚拟机的唯一方法是重新启动,这是不可能的。我怎样才能使新大小可见?
编辑
操作系统:Arch Libvirt:1.3.0 Qemu:2.4.1
重新启动 libvirt 服务也无济于事。卷在 libvirt 中仍然显示旧大小。
lvs
...
sswus00-vd0 vga -wi-a----- 200.00g
...
virsh vol-info --pool pool sswus00-vd0
Name: sswus00-vd0
Type: block
Capacity: 100.00 GiB
Allocation: 200.00 GiB
因此容量仍为原有的大小,这就是 VM 所获得的。
编辑2
这真是很奇怪。
lsblk
显示此 lvm 卷的旧磁盘大小 - 100G 但lvs
显示新大小 - 200g
逻辑卷组的后端是 iSCSI。因此,我认为重新扫描 scsi 总线可能会有所帮助。
两者都不echo "- - -" > echo "- - -" > /sys/devices/platform/host2/scsi_host/host2/scan
或者iscsiadm -m node -R
有任何区别
有什么想法吗?我该如何让内核知道新的大小?最重要的是它为什么这样做?
答案1
您可以向虚拟机的 qemu 进程发送 qemu 监控命令,使其识别块设备的新大小。例如:
virsh qemu-monitor-command vmname --hmp "block_resize drive/virtio-disk0 200G"
请注意,这drive/virtio-disk0
指的是 qemu 对驱动器的看法,这将根据所使用的驱动程序(例如 virtio 或 virtio-scsi)以及按顺序排列的虚拟驱动器而有所不同(0 将更改为 1、2 等)。对于 SCSI 驱动器,您将看到类似这样的内容,drive-scsi0-0-0-0
其中数字指的是 libvirt XML 中定义的虚拟控制器、总线、目标和 LUN。