(1) Blockpull can be used by not providing 'base' -- if you don't specify base, then is made a completely stand-alone image, with no backing file. *** (2) so, # blockpull would populate contents from domain's backing disk image into the file specified into . And, if you don't specify base, then is made a completely stand-alone image, with no backing file. (3) virsh blockpull (is using qemu's 'block-stream') - block-stream says that starting from base<-top, take the backing data from base and pull it into top, ending with top. And, 'block-stream' will let you abandon 'base' after the fact so if we have this: f17test.qcow2<-snap-f17test.qcow2<-snap2-f17test.qcow2<-snap3-f17test.qcow2 - we have two ways to flatten the chain: - online 'virsh blockpull' will work. But, all other directions (trying to make snap2-f17test.qcow2 contain more data from either the base or snap1, or trying to commit data back into lower parts of the chain) requires offline qemu-img manipulation # virsh blockpull supports partial pulls, meaning: base<-snap1<-snap23 or even base<-snap123 (4) Limitations of blockpull: ----------------------------- 1/ It can ONLY pull into the 'active' layer. - support to pull into an 'arbitrary layer' is in progress - Notes: pulling into intermediate images requires opening the intermediate file read/write, as well as ensuring that any reads done in the active layer get correct data. - Example: In the chain base <- snap1 <- active, if you pull base into snap1, reading active has to know whether the data comes from base or from snap1 . But if you pull into active, you already have the destination read/write, and once the data is pulled, you don't have to worry about keeping the chain consistent . - Also think about writing data - if you pull into the active layer, then a write eliminates the need to pull that cluster from the backing file, thanks to copy-on-write semantics. But, but if you pull into an intermediate layer, a write at the active layer doesn't affect the fact that you still have to pull into the intermediate layer. Even though the active layer won't use that cluster from the intermediate layer 2/ virsh blockpull does not work when offline (although, qemu-img can do that) 3/ Note that, as stated in 1/ blockpull can pull only into the top-most image. But with 'qemu-img', it's possible to convert: - from: base <- sn1 <- sn2 <- sn3 to : base <- sn2 <- sn3 (3) some other info https://bugzilla.redhat.com/show_bug.cgi?id=816662 #qemu-img create /var/lib/libvirt/images/test 1M # cat > /tmp/test.xml < test 219200 1 hvm EOF # virsh define /tmp/test.xml Domain test defined from /tmp/test.xml # virsh blockpull test /var/lib/libvirt/images/test --wait http://vmsplice.net/~stefan/blockpull.html http://vmsplice.net/~stefan/blockjob.html