On 03/12/2014 02:21 PM, Eric Blake wrote:
tl;dr:
I am working on a series of patches to expose backing chain information
in <domain> XML. Comments are welcome, to make sure my XML design is on
the right track.
A backing chain of 3 files (base <- mid <- top) in the local file system:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/top.qcow2'/>
<backingStore type='file'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/mid.qcow2'/>
<backingStore type='file'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/base.qcow2'/>
<backingStore/>
</backingStore>
</backingStore>
<target dev='vda' bus='virtio'/>
</disk>
Now that I've been working on virStorageSource for a while, I think I
want to modify this slightly. Most attributes of <driver> are
per-device (things you only set once, such as cache='writethrough');
furthermore, the <volume> XML for storage volumes uses a dedicated
<format type='qcow2'/> rather than a <driver> element. For
back-compat,
we can't drop the old spelling, but I'm thinking the backing chain
should prefer <format>. So if we use nested format, it would look
something like:
<disk type='file' device='disk'>
<format type='qcow2'/>
<source file='/var/lib/libvirt/images/top.qcow2'/>
<backingStore type='file'>
<format type='qcow2'/>
<source file='/var/lib/libvirt/images/mid.qcow2'/>
<backingStore type='file'>
<format type='qcow2'/>
<source file='/var/lib/libvirt/images/base.qcow2'/>
<backingStore/>
</backingStore>
</backingStore>
<driver name='qemu' type='qcow2'
cache='writethrough'/>
<target dev='vda' bus='virtio'/>
</disk>
Or with Dan's proposal to prefer a flat listing, something like:
<disk type='file' device='disk'>
<id index='1'/>
<format type='qcow2'/>
<source file='/var/lib/libvirt/images/top.qcow2'/>
<backingStore type='file'>
<id index='2' parent='1'/>
<format type='qcow2'/>
<source file='/var/lib/libvirt/images/mid.qcow2'/>
</backingStore>
<backingStore type='file'>
<id index='3' parent='2'/>
<format type='qcow2'/>
<source file='/var/lib/libvirt/images/base.qcow2'/>
</backingStore>
<backingStore/>
<driver name='qemu' type='qcow2'
cache='writethrough'/>
<target dev='vda' bus='virtio'/>
</disk>
As I look at it, I'm also worried that a flat listing makes it hard to
tell the difference between a partial chain (for example, we know 'top'
has a backing of 'mid', but haven't followed the chain to see if
'mid'
also has a backing file) vs. an explicit end of the chain. At least
with the nested listing, a <backingStore/> marker fits in better.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org