How to compact VirtualBox’s VDI file size

vdivirtualbox

I've a VirtualBox VM which configured a very large hard disk size (bigger than host). By my mistake, a program on the VM generated lots of log files and the VDI file size keeps growing until there is no space on the host.

Now I've deleted the log files but the VDI file size are not getting smaller after using VBoxManage.exe modifyhd "C:\Virts\mybox-i386.vdi" compact

Is there a way to really compact the VDI file size? Thanks!

Best Answer

You have to do the following steps:

  1. Run defrag in the guest (Windows only)

  2. Nullify free space:

    With a Linux Guest run this:

     dd if=/dev/zero of=/var/tmp/bigemptyfile bs=4096k ; rm /var/tmp/bigemptyfile
    

    Or:

     telinit 1
     mount -o remount,ro /dev/sda1
     zerofree -v /dev/sda1
    

    With a Windows Guest, download SDelete from Sysinternals and run this:

     sdelete.exe c: -z
    

(replace C: with the drive letter of the VDI)

  1. Shutdown the guest VM

  2. Now run VBoxManage's modifymedium command with the --compact option:

    With a Linux Host run this:

     vboxmanage modifymedium --compact /path/to/thedisk.vdi
    

    With a Windows Host run this:

     VBoxManage.exe modifymedium --compact c:\path\to\thedisk.vdi
    

    With a Mac Host run this:

     VBoxManage modifymedium --compact /path/to/thedisk.vdi
    

    VBoxManage is located here: /Applications/VirtualBox.app/Contents/MacOS/VBoxManage

This reduces the vdi size.

Related Question