Actual: base(raw) <- sn1 <- sn2 <- sn3 <- sn3(active) Desired: base(raw) <- sn3(active) [0] Quickly test if the image is valid: ----- # /usr/bin/qemu-system-x86_64-oct21-git -enable-kvm -m 2048 /export/vmimgs2/commitraw-base-f17.img -nographic ----- [1] Use the same procedure as here, while creating snapshots -- http://kashyapc.fedorapeople.org/virt/blockcommit/recursive-blockcommit-base-qcow2.txt - Before taking a snapshot, Add a textfile (say file1.txt before taking snap1, file2.txt before taking snap2) in /export, to distinguish content, then take snapshot ====================== [root@moon qemu]# virsh snapshot-create-as --domain commitraw-base snap1 snap1-desc --disk-only --diskspec vda,snapshot=external,file=/export/vmimgs2/snap1-c-rawbase.qcow2 --atomic Domain snapshot snap1 created [root@moon qemu]# [root@moon qemu]# virsh snapshot-create-as --domain commitraw-base snap2 snap2-desc --disk-only --diskspec vda,snapshot=external,file=/export/vmimgs2/snap2-c-rawbase.qcow2 --atomic Domain snapshot snap2 created [root@moon qemu]# [root@moon qemu]# virsh snapshot-create-as --domain commitraw-base snap3 snap3-desc --disk-only --diskspec vda,snapshot=external,file=/export/vmimgs2/snap3-c-rawbase.qcow2 --atomic Domain snapshot snap3 created [root@moon qemu]# [root@moon qemu]# virsh snapshot-create-as --domain commitraw-base snap4 snap4-desc --disk-only --diskspec vda,snapshot=external,file=/export/vmimgs2/snap4-c-rawbase.qcow2 --atomic Domain snapshot snap4 created [root@moon qemu]# ====================== [2] List the backing chain, BEFORE blockcommit (it can be noticed that the Base image is RAW) ====================== [kashyap@moon qemu-n]$ sudo ./qemu-img info --backing-chain /export/vmimgs2/snap4-c-rawbase.qcow2 image: /export/vmimgs2/snap4-c-rawbase.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 520K cluster_size: 65536 backing file: /export/vmimgs2/snap3-c-rawbase.qcow2 backing file format: qcow2 image: /export/vmimgs2/snap3-c-rawbase.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 776K cluster_size: 65536 backing file: /export/vmimgs2/snap2-c-rawbase.qcow2 backing file format: qcow2 image: /export/vmimgs2/snap2-c-rawbase.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 712K cluster_size: 65536 backing file: /export/vmimgs2/snap1-c-rawbase.qcow2 backing file format: qcow2 image: /export/vmimgs2/snap1-c-rawbase.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 392K cluster_size: 65536 backing file: /export/vmimgs2/commitraw-base-f17.img backing file format: raw image: /export/vmimgs2/commitraw-base-f17.img file format: raw virtual size: 1.0G (1073741824 bytes) disk size: 699M [kashyap@moon qemu-n]$ ====================== [3] List files in base & all snapshots BEFORE 'blockcommit' ====================== [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/snap4-c-rawbase.qcow2 ls /export file1.txt file2.txt file3.txt file4.txt [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/snap3-c-rawbase.qcow2 ls /export file1.txt file2.txt file3.txt file4.txt [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/snap2-c-rawbase.qcow2 ls /export file1.txt file2.txt file3.txt [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/snap1-c-rawbase.qcow2 ls /export file1.txt file2.txt [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/commitraw-base-f17.img ls /export file1.txt [root@moon qemu]# ====================== [4] List the disk image sizes BEFORE 'blockcommit' ====================== [root@moon qemu]# ls -lash /export/vmimgs2/*rawbase* 392K -rw-------. 1 qemu qemu 448K Oct 21 18:38 /export/vmimgs2/snap1-c-rawbase.qcow2 712K -rw-------. 1 qemu qemu 768K Oct 21 18:39 /export/vmimgs2/snap2-c-rawbase.qcow2 776K -rw-------. 1 qemu qemu 832K Oct 21 18:39 /export/vmimgs2/snap3-c-rawbase.qcow2 712K -rw-------. 1 qemu qemu 768K Oct 21 18:40 /export/vmimgs2/snap4-c-rawbase.qcow2 [root@moon qemu]# ls -lash /export/vmimgs2/commitraw-base-f17.img 700M -rw-r--r--. 1 qemu qemu 1.0G Oct 21 18:35 /export/vmimgs2/commitraw-base-f17.img [root@moon qemu]# ====================== [5] Recursively merge merge overlays into their spective backing files: sn3 into sn2 ; sn2 into sn1 ; sn1 into base(RAW) ====================== [root@moon qemu]# virsh blockcommit --domain commitraw-base vda --base /export/vmimgs2/snap2-c-rawbase.qcow2 --top /export/vmimgs2/snap3-c-rawbase.qcow2 --wait --verbose Block Commit: [100 %] Commit complete ====================== [root@moon qemu]# virsh blockcommit --domain commitraw-base vda --base /export/vmimgs2/snap1-c-rawbase.qcow2 --top /export/vmimgs2/snap2-c-rawbase.qcow2 --wait --verbose Block Commit: [100 %] Commit complete ====================== [root@moon qemu]# virsh blockcommit --domain commitraw-base vda --base /export/vmimgs2/commitraw-base-f17.img --top /export/vmimgs2/snap1-c-rawbase.qcow2 --wait --verbose Block Commit: [100 %] Commit complete [root@moon qemu]# ====================== [6] Now, list the backing chain info AFTER 'blockcommit' of snap4-c-rawbase.qcow2 (the current active-layer) to reflect the reduced backing chain. ====================== [kashyap@moon qemu-n]$ sudo ./qemu-img info --backing-chain /export/vmimgs2/snap4-c-rawbase.qcow2 image: /export/vmimgs2/snap4-c-rawbase.qcow2 file format: qcow2 virtual size: 1.0G (1073741824 bytes) disk size: 904K cluster_size: 65536 backing file: /export/vmimgs2/commitraw-base-f17.img backing file format: raw image: /export/vmimgs2/commitraw-base-f17.img file format: raw virtual size: 1.0G (1073741824 bytes) disk size: 699M [kashyap@moon qemu-n]$ ====================== [7] List files in base & all snapshots AFTER 'blockcommit' ====================== [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/snap4-c-rawbase.qcow2 ls /export file1.txt file2.txt file3.txt file4.txt [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/snap3-c-rawbase.qcow2 ls /export file1.txt file2.txt file3.txt file4.txt [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/snap2-c-rawbase.qcow2 ls /export file1.txt file2.txt file3.txt file4.txt [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/snap1-c-rawbase.qcow2 ls /export file1.txt file2.txt file3.txt file4.txt [root@moon qemu]# guestfish --ro -i -a /export/vmimgs2/commitraw-base-f17.img ls /export file1.txt file2.txt file3.txt file4.txt [root@moon qemu]# ====================== [8] List the disk image sizes AFTER 'blockcommit' ====================== [root@moon qemu]# ls -lash /export/vmimgs2/commitraw-base-f17.img 700M -rw-r--r--. 1 qemu qemu 1.0G Oct 21 18:48 /export/vmimgs2/commitraw-base-f17.img [root@moon qemu]# [root@moon qemu]# ls -lash /export/vmimgs2/*rawbase* 904K -rw-------. 1 qemu qemu 960K Oct 21 18:47 /export/vmimgs2/snap1-c-rawbase.qcow2 840K -rw-------. 1 qemu qemu 896K Oct 21 18:46 /export/vmimgs2/snap2-c-rawbase.qcow2 776K -rw-------. 1 qemu qemu 832K Oct 21 18:39 /export/vmimgs2/snap3-c-rawbase.qcow2 904K -rw-------. 1 qemu qemu 960K Oct 21 18:48 /export/vmimgs2/snap4-c-rawbase.qcow2 [root@moon qemu]# ====================== [9] Snapshot metadata can be cleaned to reflect the new reality of disk image snapshots: # virsh snapshot-delete --domain commitraw-base snap3 --metadata # virsh snapshot-delete --domain commitraw-base snap2 --metadata # virsh snapshot-delete --domain commitraw-base snap1 --metadata