I have seen it with both VBox native VDI format and VMDK format. Even though I delete files from virtual drive, I see it always keeps growing. I have some vague idea that file zero-ing doesn't happen with the virtual drives from this link. When I tried to do that with SDelete (as said in the link) it didn't reduce the VDi disk size. I have applications which once installation grows the disk to 10GB each time. I believe there should be some simple way to zero it than going through the tedious process, is there any? Is there any option in VirtualBox to keep virtual drive small?
When creating a new virtual machine, you are prompted to create a Virtual Hard Disk. You have two options for the disk, fixed or dynamically allocated. These are the descriptions (from virtual box) of both types of disks.
Fixed: A fixed hard disk file may take longer to create on some systems but is often faster to use
Dynamically allocated: A dynamically allocated hard disk file will only use space on your physical hard disk as it fills up (up to a maximum fixed size), although it will not shrink again automatically when space on it is freed
Chance are, you set it to dynamically allocated so the disk does not shrink again automatically when space on it is freed.
Here is a batch script I use to compact all the VDI files:
@echo off for /d %%d in (*.*) do ( cd "%%d" for %%f in (*.vdi) do ( echo Compacting %%f . . . echo Initial size: %%~zf "C:\Program Files\VirtualBox\VBoxManage.exe" modifymedium --compact disk "%%f" echo Post compact size: %%~zf echo. ) cd .. )
Just save it in the folder containing the Virtual Machines and run...
Deleting files from a virtual drive does not reduce it's size for performance reasons.
When a file is deleted it leaves a hole where the files data previously resided. When new files are created or data is written to the disk it will fill in these holes. The file will grow when necessary to accommodate more data but it will never shrink.
Removing data from a file anywhere but the end is a time consuming operation. Data has to be moved to fill the holes and in the case of a virtual drive many internal references to data locations will need to be updated. Even with an SSD a deletion of even a small file could take minutes. This is clearly not acceptable.
You need to use vboxmanage --compact to remove the holes and shrink the virtual drive.