[libvirt] question about save/restore domain

Zeeshan Ali (Khattak) zeeshanak at gnome.org
Tue Jul 3 20:44:16 UTC 2012

On Tue, Jul 3, 2012 at 9:18 PM, Eric Blake <eblake at redhat.com> wrote:
> On 07/03/2012 11:35 AM, Jovanka Gulicoska wrote:
>> On Tue, Jul 3, 2012 at 6:01 PM, Eric Blake <eblake at redhat.com> wrote:
>>> On 07/03/2012 06:42 AM, Jovanka Gulicoska wrote:
>>>> Hi,
>>>> my name is Jovanka Gulicoska and I'm SoC student. I'm working on
>>>> implementing save/load of VM in Gnome-Boxes.
>>>> Something confused me about snapshots. In the documentation about life
>>>> cycle, in section about Save/Restore is said that domain saved with
>>>> virDomainSave/virDomainSaveFlags can be restored only once.
>>> Can you point out the URL to that documentation?  It's slightly
>>> incorrect, and worth patching to make clearer if that would help the
>>> next person to read them.
>> This is in the draft of the documentation:
>> http://libvirt.org/guide/html-single/#Application_Development_Guide-Lifecycle-Save
>> --- "For basic usage this implies that a guest can only be restored
>> once from any given saved state image."
> Ah, and I think reading that sentence in context clarifies the situation:
> "Thus when the guest is restored, the underlying guest storage must be
> in exactly the same state as it was when the guest was initially saved.
> For basic usage this implies that a guest can only be restored once from
> any given saved state image. To allow a guest to be restored from the
> same saved state multiple times, the application must also have taken a
> snapshot of the guest storage at time of saving, and explicitly revert
> to this storage snapshot when restoring."
> Either you manually revert the storage back to match the save image
> state before restoring, or you use things in a more basic manner (never
> touch the storage manually, and therefore restore works only once
> because the storage was unchanged between the save/restore cycle but is
> now altered after the successful restore).
> But you're still welcome to provide a patch; the source code for that
> page can be found at this repo:
>  http://libvirt.org/git/?p=libvirt-appdev-guide.git;a=summary
>>>> So is it better just to use virDomainSnapshotCreateXML instead of
>>>> virDomainSave/virDomainSaveFlags?
>>> It all depends on what your end goal is with doing a save/load of a VM.
>>>  Do you need fast saves, or is it okay if the save takes several
>>> seconds?  Will you be loading the state exactly once, or do you plan to
>>> make it something that the user can revert to multiple times in a row?
>> The main idea is to allow the user to save the virtual machine and be
>> able to load it when he wants and be able to share it with others who
>> uses Boxes, so the other person can also load it on his machine (in
>> Boxes).
> Letting _another_ person load the saved image sounds like some degree of
> cloning.  Are you trying to clone from an offline state (in which case,
> it is just as easy to create a new domain from XML pointing to the
> cloned disks), or are you trying to clone from an online state (where
> the other user gets to load the domain already booted to the point that
> the first user had it)?

Yeah, this feature is about cloning the VM but using a single file
that has everything about the domain: disk, ram and the config.

>  The former is already possible, the latter is
> on my wishlist of cool things where it would be nice to add better
> libvirt support.  Another thing to worry about with the feature request
> of online cloning is what happens if the guest has saved state related
> to the original (for example, dmidecode information in the guest can see
> the UUID assigned by the host, but cloning implies creating a new domain
> with a new UUID).

The plan was to do the latter (online cloning) but since its not
already possible and IMO it might be too much work for Jovanka to
handle within the GSoC timeline (keeping in mind that half of the time
is already gone), we can drop the "saving of RAM/state" part for now
at least.

Which API should we be using for offline cloning? Recall that we want
to have it all in one file. If thats not possible, I guess we have to
manually put the config and disk in a tarball and on loading machine,
we create the new domain with that config and put the disk image in
the right place?


Zeeshan Ali (Khattak)
FSF member#5124

More information about the libvir-list mailing list