Hello list,
upon upgrading from libvirt v5.9.0 -> v5.10.0, libvirt started calling
qemu differently causing the VM operating system to not be found. I'm
wondering whether I'm chasing a bug, or have to otherwise fix my domain
config (created by virt-manager).
To start with, I have a Windows 7 domain based on the following images:
windows7-base.qcow2: QEMU QCOW2 Image (v3), 53687091200 bytes
windows7-Office2013.qcow2: QEMU QCOW2 Image (v3), has backing file (path
windows7-taintable.qcow2), 80530636800 bytes
windows7-taintable.qcow2: QEMU QCOW2 Image (v3), has backing file (path
windows7-base.qcow2), 53687091200 bytes
The VM must be launched with image windows7-Office2013.qcow2.
Using the domain config [1] with a <disk> section
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/home/joj/lib/vm/windows/windows7-Office2013.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00'
slot='0x07' function='0x0'/>
</disk>
libvirt 5.9.0 is calling qemu 4.2.0 like [2], and libvirt 5.10.0 like [3], the
differences being (5.9.0 1st, 5.10.0 2nd lines)
[--drive
file=/home/joj/lib/vm/windows/windows7-Office2013.qcow2,format=qcow2,if=none,id=drive-virtio-disk0-]
{+-blockdev
{"driver":"file","filename":"/home/joj/lib/vm/windows/windows7-taintable.qcow2","node-name":"libvirt-2-storage","auto-read-only":true,"discard":"unmap"}
-blockdev
{"node-name":"libvirt-2-format","read-only":true,"driver":"raw","file":"libvirt-2-storage"}
-blockdev
{"driver":"file","filename":"/home/joj/lib/vm/windows/windows7-Office2013.qcow2","node-name":"libvirt-1-storage","auto-read-only":true,"discard":"unmap"}
-blockdev
{"node-name":"libvirt-1-format","read-only":false,"driver":"qcow2","file":"libvirt-1-storage","backing":"libvirt-2-format"}+}
-device
[-virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1-]
{+virtio-blk-pci,scsi=off,bus=pci.0,addr=0x7,drive=libvirt-1-format,id=virtio-disk0,bootindex=1+}
As you can see, 5.10.0 is expanding the backing file chain, not leaving
that to qemu. Under 5.10.0, I get an Operating System not Found error,
under 5.9.0, with the shorter -drive argument, everything works as
desired.
Can you perhaps advise me how I either fix the domain spec [1] to get
libvirt to use a true equivalent to the old qemu invocation as I don't
think this is a qemu problem, or how I can turn the new-style JSON
parametrization off?
Other suggestions how to tackle this would also be much appreciated.
---
[1]
https://0x0.st/z0KM.xml
[2]
https://0x0.st/z0K1.txt
[3]
https://0x0.st/z0Kj.txt