Hi Eric,

Please see the blew:

On Wed, Feb 11, 2015 at 3:12 PM, Eric Blake <eblake@redhat.com> wrote:
On 02/11/2015 02:07 PM, Edward Young wrote:
>>> What if this vm has a number of disk-only external snapshots? In the
>>> current version, how can live migrate this vm?
>>
>> Are the snapshots based on shared storage, or local-only storage?
>>
>
> Yes, I'm talking about the local-only storage.

Okay, glad I guessed as much, then.

>
> Yes, I agree with you. In this case, we need to migrate the entire disk
> state. In this case, there is no snapshot involved. we just perform the
> regular migration with 'virsh migrate....'. Is this correct?

Using 'virsh migrate --copy-storage-all' would indeed migrate the entire
disk, if you can't supply shared storage.

>>> Or is it possible to iteratively transfer all the snapshots to the
>>> destination and later live migrate only the latest new data?
>>>
>>
>> Yes, that works too, and is probably faster, especially if you have
>> out-of-band means for sharing read-only state between source and
>> destination.
>>
>
> My question is here. If we do not have any shared storage resource between
> source and destination (eg. long distance VM migration), how can we migrate
> the latest new data to the destination? we can copy the base, mid to
> destination manually, then how can we migrate the active snapshot( new data
> goes in)? I learned that drive_mirror in qemu is built to finish this, but
> do not understand clearly. Could you elaborate for me, or provide an
> example?

Use 'virsh migrate --copy-storage-inc' to migrate only the incremental
changes, which assumes that the destination can already see the same
read-only backing data that the source sees. 

I perform a simple test, but failed. 

In the source, I create:   base <- mid <- active (2 snapshots, the active one is the current one)
In order to migrate this vm to the destination, I manually copy both base and mid to the destination, and put them in the sam e directory /var/lib/libvirt/images/
Then I call the following commands:
'sudo virsh migrate --live --unsafe --verbose --copy-storage-inc vm1 qemu+ssh://192.168.1.3/system tcp://192.168.1.3'

The error I got is:
error: Requested operation is not valid: cannot migrate domain with 2 snapshots.

I do not know the reason for this.
 
In fact, modern
libvirt/qemu does this for you by setting up an NBD server on the
destination, doing a data mirror from the source into the destination
(so that you DO have shared storage, at least for the duration of the
migration), then doing the live migration, then tearing down the NBD
mirroring link.
 
Sounds interesting! Can you provide me an example or point me to a link about how to use this function?

Sorry to take you so much time to answer my questions. I appreciate it deeply. After I solve this issue, I will write a blog and share these knowledge with other people. 

Best,
Ed


--
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org