VMWare Fusion Reclaim Free Space of OS X Guest

From Wurst-Wasser.net
Jump to: navigation, search

After installing OS X in a VMWare Fusion v6, I noticed that the disk images are continously growing. And VMWare Fusion won't let me reclaim the free space.

The Problem

As pointed out here and here, the OS X guest does not actually delete files, it just won't remember where the file is stored on the disk. So all the file's data is still stored on the disk. We need to permanently delete the file's data, and then the freed space can be reclaimed.

The Solution (more like a Workaround)

  • Startup your guest os
  • Log in as administrator
  • Get your root-device (the /):
Mac-OS-X-108-Mountain-Lion-VM:~ appleadmin$ mount
/dev/disk0s2 on / (hfs, local, journaled) 
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
.host:/VMware Shared Folders on /Volumes/VMware Shared Folders (vmhgfs)
Mac-OS-X-108-Mountain-Lion-VM:~ appleadmin$ 
  • Erase the free space:
Mac-OS-X-108-Mountain-Lion-VM:~ appleadmin$ sudo diskutil secureErase freespace 0 /dev/disk0s2
Started erase on disk0s2 Macintosh HD
Creating a temporary file
Securely erasing a file
Creating a secondary temporary file
Mounting disk
Finished erase on disk0s2 Macintosh HD
Mac-OS-X-108-Mountain-Lion-VM:~ appleadmin$

The Solution

Thanks to Marco, there is another way[1]:

sudo /Library/Application\ Support/VMware\ Tools/vmware-tools-cli disk shrinkonly

And one more method…

They claim[2] this might work:

1. Erase formerly used space on your guest OS' disk:

diskutil secureErase freespace 0 Macintosh\ HD
sudo halt

or

sudo diskutil secureErase freespace 0 /
sudo shutdown -h now

2. Then shrink the sparse image:

[ -d "/Library/Application Support/VMware\ Fusion" ] && alias vmware-vdiskmanager="/Library/Application Support/VMware Fusion/vmware-vdiskmanager" || alias vmware-vdiskmanager="/Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager"; vmware-diskmanager -k <path-to-disk-image-of-your-guest-os>

or simply:

/Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k <path-to-disk-image-of-your-guest-os>

f.e.:

/Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k /Volumes/EsDeh/Documents/Virtual\ Machines/OS\ X\ 10.11.vmwarevm/Virtual\ Disk.vmdk

Footnotes: