To compact your virtual drive you have to:
1) defragment the guest operating system (usually WinXP defragmenter)
2) nulling the end of drive with sdelete:
3) compacting the vdi drive from host
VBoxManage modifyhd --compact vdi_name.vdi
Nulling end of drive (writing zeros at the end) enables VBoxManage to compact the drive (cut out the nulled part) and make the vdi file smaller.