I have this exported over NFS to all my local machines:
$ ls -lh /mnt/media/guest-library/ total 12G -rw-r--r--. 1 rjones rjones 971M Apr 16 23:38 debian5x64.img.xz -rw-r--r--. 1 rjones rjones 250M Jul 26 23:09 f16x32.img.xz -rw-r--r--. 1 rjones rjones 809M Jul 26 20:29 f17x64.img.xz -rw-r--r--. 1 rjones rjones 59M Jul 6 22:19 freedos11.img.xz -rw-r--r--. 1 rjones rjones 379M Jul 7 20:11 opensuse1113x64.img.xz -rw-r--r--. 1 rjones rjones 349M Jul 6 22:31 plan9.img.xz -rw-rw-r--. 1 rjones rjones 126 Apr 16 17:22 README -rw-r--r--. 1 rjones rjones 384M Apr 18 00:19 rhel3x64.img.xz -rw-r--r--. 1 rjones rjones 471M Apr 18 00:15 rhel4x64.img.xz -rw-r--r--. 1 rjones rjones 848M Apr 16 17:02 rhel5epelx64.img.xz -rw-r--r--. 1 rjones rjones 768M Jul 7 07:21 sl60x64.img.xz -rw-r--r--. 1 rjones rjones 148M May 23 16:08 ubuntu1204ppc.img.xz -rw-r--r--. 1 rjones rjones 1.1G Apr 16 17:09 win2003.img.xz -rw-r--r--. 1 rjones rjones 3.4G Jun 1 10:46 win8-preview.img.xz -rw-r--r--. 1 rjones rjones 2.1G Apr 16 20:28 winxp.img.xz
Having a library of images which are (relatively) small like this is great for testing. If someone gives me a bug and it happens to affect one of the guests I have saved, then I can just unpack that guest, virt-resize it to the right size and off I go, and that’s usually a lot quicker than installing a new guest, particularly when you’ve got only slow ADSL.
Adding a new guest is easy using virt-sparsify and xz
. Note I’ve set the temporary directory (TMPDIR) to somewhere with plenty of space.
$ sudo TMPDIR=$(pwd) virt-sparsify /dev/vg_pin/F18Rawhidex32 f18rawhidex32.img Create overlay file to protect source disk ... Examine source disk ... 100% ⟦▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓⟧ 00:00 Fill free space in /dev/vda1 with zero ... 100% ⟦▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓⟧ --:-- Fill free space in /dev/vg_f18rawhidex32/lv_root with zero ... 100% ⟦▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓⟧ --:-- Clearing Linux swap on /dev/vg_f18rawhidex32/lv_swap ... 100% ⟦▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓⟧ 00:00 Copy to destination and make sparse ... Sparsify operation completed with no errors. Before deleting the old disk, carefully check that the target disk boots and works correctly. $ ll -h f18rawhidex32.img -rw-r--r--. 1 root root 10G Jul 27 14:42 f18rawhidex32.img $ du -sh f18rawhidex32.img 3.0G f18rawhidex32.img $ xz -T 0 --best f18rawhidex32.img $ ll -h f18rawhidex32.img.xz -rw-r--r--. 1 rjones rjones 667M Jul 27 14:42 f18rawhidex32.img.xz
How would you integrate virt-sysprep into this workflow?
Darksecond, that’s a good question.
Either you could create an overlay / snapshot on top of the original guest:
and then run virt-sysprep on the overlay:
before continuing to sparsify the overlay:
Or you could sysprep the guests just before you create/use them. Copy and uncompress the
.xz
file and run virt-sysprep on that. The advantage of this second method is that you get to choose which virt-sysprep options you want to use.For more information see http://libguestfs.org/virt-sysprep.1.html#copying-and-cloning
The other thing I forgot to mention is that you might want to use virt-resize to choose the final size for the guest.