
Hello Peter, thank you for replying in such detail. On Tue, Dec 17, 2019 at 11:22:52AM +0100, Peter Krempa wrote:
So this output was obtained by 'file'. That unfortunately doesn't give enough information. Please run 'qemu-img info' on those files and look for the 'backing file format:'field.
That field is important, because otherwise we'd fall back to image format detection which was deemed unsafe and libvirt no longer allows it.
You're right. My backing files are missing the 'backing file format' field: image: windows7-base.qcow2 file format: qcow2 virtual size: 50 GiB (53687091200 bytes) disk size: 7.37 GiB cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false image: windows7-Office2013.qcow2 file format: qcow2 virtual size: 75 GiB (80530636800 bytes) disk size: 50.4 GiB cluster_size: 65536 backing file: windows7-taintable.qcow2 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false image: windows7-taintable.qcow2 file format: qcow2 virtual size: 50 GiB (53687091200 bytes) disk size: 7.88 GiB cluster_size: 65536 backing file: windows7-base.qcow2 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false
The root of the problem is that the images mentioned above will not have the format section because -F argument for qemu-img was not used when creating them. This would force libvirt to use format detection which is insecure and thus libvirt does not do that and assumes the image is raw.
Understood. So in order to load an image or backing file, qemu/libvirt expects the format to be explicitly defined whenever a 'next image' is being referenced.
This in normal circumstances causes problems right away, because when running any more advanced security model than unix permissions (selinux apparmor) libvirt would not allow qemu to access the backing file. You don't seem to be running it so it was accidentally working for you until now.
Correct. I'm using neither selinux nor apparmor.
(...) So as a first thing you should create the images properly. that when you are creating the overlay image, you have to use the '-F' parameter of qemu-img create. (...)
Fixed the issue successfully using qemu-img rebase.
(...) (Note that snapshots/overlays created by libvirt always do this). (...)
It's probably clear by now but these images were created manually, many years ago.
Lastly this is more-or-less tracked in: https://bugzilla.redhat.com/show_bug.cgi?id=1588373
I think I should finally fix it and report a proper error rather than silently assuming it might work. With -blockdev it will never work properly anyways.
I agree that failing in a clear way would indeed help the user, though now that I know what I'm looking for, it's also clear from the -blockdev argument what's going on. Thanks, again, for your time, Jens.