[libvirt-users] Change in treatment of qcow2 with chained backing files in v5.10.0?

Jens John lists at 2ion.de
Mon Dec 16 11:49:40 UTC 2019

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'/>

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-]

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

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

More information about the libvirt-users mailing list