[libvirt] [RFC v2] external (pull) backup API

John Snow jsnow at redhat.com
Thu Apr 12 21:16:56 UTC 2018



On 04/03/2018 08:01 AM, Nikolay Shirokovskiy wrote:
> Hi, all.                                                                                         
>                                                                                                  
> This is another RFC on pull backup API. This API provides means to read domain                   
> disks in a snapshotted state so that client can back them up as well as means                    
> to write domain disks to revert them to backed up state. The previous version                    
> of RFC is [1]. I'll also describe the API implementation details to shed light                   
> on misc qemu dirty bitmap commands usage.                                                        
>                                                                                                  
> This API does not use existent disks snapshots. Instead it introduces snapshots                  
> provided by qemu's blockdev-backup command. The reason is we need snapshotted                    
> disk state only temporarily for duration of backup operation and newly                           
> introduced snapshots can be easily discarded at the end of operation without                     
> block commit operation. Technically difference is next. On usual snapshot we                     
> create new image backed by original and all new data goes to the new image thus                  
> original image stays in a snapshotted state. In temporary snapshots we create                    
> new image backed by original and all new data still goes to the original image                   
> but before new data is written old data to be overwritten is popped out to the new               
> image thus we get snapshotted state thru new image.                                              
>                                                                                                  
> Disks snapshots as well as disks itself are avaiable to read/write thru qemu                     
> NBD server.                                                                                      

[snip!]

Do you think it's possible to characterize this API proposal as two
mechanisms:

(1) A mechanism for creating and manipulating "checkpoints" -- which are
book-ended by bitmap objects in QEMU -- implemented by the creation,
deletion, 'disabling' and 'merging' of bitmaps, and

(2) A mechanism for the consumption of said checkpoints via NBD / the
"fleecing" mechanisms that allow a live export of a static view of the
disk at that time (block snapshots + NBD exports)

If this is the case, do you think it is possible to consider (1) and (2)
somewhat orthogonal items -- in so far as it might be possible to add
support to libvirt directly to add push-model support for writing out
these checkpoints?

i.e.

once you have created a temporary snapshot and merged the various
component bitmaps into it, instead of creating an ephemeral block
snapshot and exporting it via NBD, we request a `blockdev-backup` with a
libvirt-specified target instead?

You don't have to add support for this right away, but I would really
enjoy if any API we check in here has the capacity to support both
push-and-pull paradigms without getting too ugly.

Does that sound like it can easily fit in with your designs so far?




More information about the libvir-list mailing list