Use-case for 'diff' of images: Useful for converting a monolithic image back into a thin image on top of a common base. (useful when you have copied or cloned a guest, and you want to get back to a thin image on top of a template or base image) NOTE: (1) the base-image is base-f17.img ; . #----------------------------------------------------------------# [root@localhost difftest]# qemu-img info ../base-f17.qcow2 image: ../base-f17.qcow2 file format: qcow2 virtual size: 5.0G (5368709120 bytes) disk size: 5.0G cluster_size: 65536 [root@localhost difftest]# #----------------------------------------------------------------# [root@localhost difftest]# rsync -avh --progress ../base-f17.qcow2 modified-f17.qcow2 [root@localhost difftest]# ls modified-f17.qcow2 #----------------------------------------------------------------# The modified-f17.qcow2 has 3 extra textfiles, and a directory /export (that's the 'difference' between base-f17.img) #----------------------------------------------------------------# [root@localhost difftest]# qemu-img info modified-f17.qcow2 image: modified-f17.qcow2 file format: qcow2 virtual size: 5.0G (5368709120 bytes) disk size: 5.0G cluster_size: 65536 #----------------------------------------------------------------# [root@localhost difftest]# qemu-img create -f qcow2 -b modified-f17.qcow2 diff.qcow2 Formatting 'diff.qcow2', fmt=qcow2 size=5368709120 backing_file='modified-f17.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off #----------------------------------------------------------------# [root@localhost difftest]# qemu-img info diff.qcow2 image: diff.qcow2 file format: qcow2 virtual size: 5.0G (5368709120 bytes) disk size: 196K cluster_size: 65536 backing file: modified-f17.qcow2 [root@localhost difftest]# #----------------------------------------------------------------# Now, let's do the 'rebase' operation. (this is an expensive operation) - At the end of operation, the diff.qcow2 will have its backing file changed to 'base-f17.qcow2' - Note that: (In 'Safe mode', which is the default -- any clusters that differ between backing_file and the old backing file of filename are merged into filename before actually changing the backing file. ) #----------------------------------------------------------------# [root@localhost difftest]# qemu-img rebase -b ../base-f17.qcow2 diff.qcow2 #----------------------------------------------------------------# [root@localhost difftest]# qemu-img info diff.qcow2 image: diff.qcow2 file format: qcow2 virtual size: 5.0G (5368709120 bytes) disk size: 1.4M cluster_size: 65536 backing file: ../base-f17.qcow2 [root@localhost difftest]# #----------------------------------------------------------------# guestfish is able to boot into the diff, and also list the files added here (at this point, we can discard 'modified.qcow2 #----------------------------------------------------------------# [root@localhost difftest]# guestfish --rw -i -a diff.qcow2 Welcome to guestfish, the libguestfs filesystem interactive shell for editing virtual machine filesystems. Type: 'help' for help on commands 'man' to read the manual 'quit' to quit the shell Operating system: Fedora release 17 (Beefy Miracle) /dev/mapper/vg_none-lv_root mounted on / /dev/sda1 mounted on /boot > ls /export testfile1 testfile2 testfile3 > #----------------------------------------------------------------# Now, the overlay is quite small, as it can be noticed here: #----------------------------------------------------------------# [root@localhost difftest]# ls -lash diff.qcow2 1.4M -rw-r--r--. 1 root root 1.5M Oct 4 05:58 diff.qcow2 [root@localhost difftest]# #----------------------------------------------------------------# Also, you can quickly boot into the diff.qcow2 to see what's up with it. #----------------------------------------------------------------# [root@localhost difftest]# qemu-kvm -enable-kvm -m 1024 diff.qcow2 -nographic #----------------------------------------------------------------#