On Wed, Feb 22, 2012 at 05:13:32PM +0000, Federico Simoncelli wrote: > Hi, > recently I've been working on live block migration combining the live > snapshots and the blkmirror patch sent by Marcelo Tosatti few months ago. > > The design is summarized at this url as "Mirrored-Snapshot": > > http://www.ovirt.org/wiki/Features/Design/StorageLiveMigration > > The design assumes that the qemu process can reach both the source and > destination storages and no real VM migration between hosts is involved. > The principal problem that it tries to solve is moving a VM to a new > reachable storage (more space, faster) without temporarily disrupting its > services. > > The following set of patches are implementing the required changes in > QEMU.
What is the motivation here? What is the limitation with image streaming that this tries to solve? > Here it is a quick example of the use case (for consistency with the > design at the url above I will use the same step numbers): > > Preparation > =========== > > $ mkdir /tmp/{src/dst} > $ qemu-img create -f qcow2 /tmp/src/hd0base.qcow2 20G > Formatting '/tmp/src/hd0base.qcow2', fmt=qcow2 size=21474836480 > encryption=off cluster_size=65536 > > Step 1 - Initital Scenario > ========================== > VM1 is running on the src/hd0base. (Where "<=" stands for "uses") > > [src/hd0base] <= VM1(read-write) > > $ qemu-system-x86_64 -hda /tmp/src/hd0base.qcow2 -monitor stdio > QEMU 1.0.50 monitor - type 'help' for more information > (qemu) > > Step 3 - Mirrored Live Snapshot > =============================== > A mirrored live snapshot is issued using src/hd0snap1 and dst/hd0snap1 as > image files. (Where "<-" stands for "has backing file") > > [src/hd0base] <- [src/hd0snap1] <= VM1(read-write) > ... <- [dst/hd0snap1] <= VM1(write-only) > > $ qemu-img create -f qcow2 \ > -b /tmp/src/hd0base.qcow2 /tmp/src/hd0snap1.qcow2 20G > Formatting '/tmp/src/hd0snap1.qcow2', fmt=qcow2 size=21474836480 > backing_file='/tmp/src/hd0base.qcow2' encryption=off cluster_size=65536 > > $ qemu-img create -f qcow2 \ > -b /tmp/dst/hd0base.qcow2 /tmp/dst/hd0snap1.qcow2 20G > Formatting '/tmp/dst/hd0snap1.qcow2', fmt=qcow2 size=21474836480 > backing_file='/tmp/src/hd0base.qcow2' encryption=off cluster_size=65536 > > (qemu) snapshot_blkdev -n ide0-hd0 \ > blkmirror:/tmp/src/hd0snap1.qcow2:/tmp/dst/hd0snap1.qcow2 blkmirror > > Step 4 - Backing File Copy > ========================== > An external manager copies src/hd0base to the destination dst/hd0base. > > [src/hd0base] <- [src/hd0snap1] <= VM1(read-write) > [dst/hd0base] <- [dst/hd0snap1] <= VM1(write-only) > > $ cp -a /tmp/src/hd0base.qcow2 /tmp/dst/hd0base.qcow2 > > Step 5 - Final Switch to Destination > ==================================== > VM1 is now able to switch to the destination for both read and write > operations. > > [src/hd0base] <- [src/hd0snap1] <= VM1(read-write) > > (qemu) snapshot_blkdev -n ide0-hd0 /tmp/dst/hd0snap1.qcow2 > > -- > Federico