[libvirt] RFC: Exposing backing chains in <domain> XML

Eric Blake eblake at redhat.com
Sun Apr 13 02:49:50 UTC 2014


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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 604 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20140412/ed322d68/attachment-0001.sig>


More information about the libvir-list mailing list