<!-- 
.. title: Shrink VirtualBox disk image
.. slug: shrink-virtualbox-disk-image
.. date: 2008-08-19 12:08:42 UTC+01:00 
.. tags: virtual-machines, 
.. link: 
.. description: 
.. type: text 
--> 

* prerequisite: the virtual disk image is of type "dynamically expanding"
* delete and install in the guest as much as you want
* defrag your virtual disk, if necessary (Windows guests)
* with the guest running, fill the free space on your virtual disk with zeros. 

    - For Windows guests, use [sdelete](http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx/):

			sdelete -c c:

    - For Linux and BSD guests:

			cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill

* finally, with the guest shut down, issue the following command in your host system:

		VBoxManage modifyvdi virtualdiskname.vdi compact

YMMV, but I managed to save 2 GB in this way for a Windows XP guest.

**Update:** in VirtualBox 3.\* and later, use the following command:

	VBoxManage modifyhd --compact virtualdiskname.vdi
	
Furthermore, in more recent versions of sdelete, the command-line options 'c' and 'z' has been exchanged. To zero a disk, you now have to use

    sdelete -z c:

