Compact a VirtualBox Windows Guest on Ubuntu Linux
I use VirtualBox to run Windows XP as a virtual machine within Ubuntu Linux and periodically like to compact the virtual drive (VDI) file.
Being a bit boneheaded, every time I do this, I spend ten minutes searching for instructions, so I thought I’d post them here both for myself, and for anyone else it may help.
Steps to Compact a VirtualBox WinXP Guest in Linux
- While in your Windows XP virtual machine, download the sdelete program and save it to your c: drive in Windows. This program allows you to ‘zero out’ the free space on the drive by writing zeros to the unused sectors.
- In WinXP go to Start/Run and type ‘cmd‘ to open a command prompt.
- Change directory (cd) to the location where you saved the sdelete.exe file.
- Enter ‘sdelete -c c:/’ to execute the program.
- Once sdelete is finished, shut down the Windows virtual machine.
- Open a terminal in Linux and cd to the directory that contains the VDI you’d like to compact.
- Type ‘VBoxManage modifyvdi xxxxx.vdi’ compact where xxxxx.vdi represents the filename of the virtual disk you’d like to compact.
- After the command is runs, your VDI will be reduced in size.
There’s a ton of information on Sun’s VirtualBox site and forum. Here’s a forum thread that I found especially helpful.
November 11th, 2008 at 23:30
Interesting–I haven’t thought of ever compacting my vdi files. I think I’ll give this a try now that I see my HD space ever dwindling (mostly due to VirtualBox in the first place!)
Thanks for posting the instructions
November 12th, 2008 at 09:00
No problem. I ran it yesterday on my main WinXP virtual machine and the VDI went from 8.3 to 7GB. Let me know how it works for you.
November 19th, 2008 at 02:57
Ah storage space is like a cupboard, you can get in a lot there but never enough and the room is cluttered!
February 13th, 2009 at 13:10
Do you recommend any tools for cleaning out things like the swap file before sealing a VM guest with sysprep?
February 13th, 2009 at 13:47
Hi Jeff,
I’ve really not had any experience with that, but would be curious to know if you find anything.
April 22nd, 2009 at 13:49
I’ve just tried to run this procedure after upgrading VirtualBox to the latest version and it’s not working.
Looks like Sun changed the command line ‘modifyvdi’ command to ‘modifyhd’ and has temporarily removed the ability to compact the disk.
April 28th, 2009 at 12:51
Okay, I’ve just upgraded to VirtualBox 2.2.2 and the modifyvdi command is deprecated and replaced by the modifyhd command..
To run the VDI compact command in step g. above:
Type ‘VBoxManage modifyhd xxxxx.vdi compact‘ where xxxxx.vdi represents the filename of the virtual disk you’d like to compact.
If you get an error regarding the disk location, you may wish to use the full path & file in place of the xxxxx.vdi above. (ex. VBoxManage modifyhd /home/eric/.VirtualBox/VDI/WinXP_Pro.vdi compact)
October 1st, 2009 at 06:36
Hi MikeF,
I’ve not had any trouble with sdelete, although I have only used it on virtualized WinXP systems. I don’t get the impression that it’s been updated in years, but I don’t think it really needs to be.
This Microsoft Technet article seems to indicate that sdelete works with Windows 2000.
I’ve also used Steve Gibson’s SpinRite, although it does a lot more than sdelete and is meant more for hard disk maintenance.