17

I use VMWare Fusion on my Mac to run a virtual Windows 7 machine, and the Microsoft IE compatibility Windows XP virtual machines.

In VMWare Tools on the Windows guest OSes, there’s a “Shrink” option that lets you reduce the size of the sparse disk image used by the guest OS, to save hard drive space on your host OX.

I’ve recently created another virtual machine, this time running Snow Leopard Server. I was wondering if I could shrink the spare disk image used by this machine too, but I can’t find a VMWare Tools app on the Mac guest OS, even though VMWare Tools have been installed (as VMWare’s Shared Folders feature is working).

Is there any way to shrink the sparse disk image used by Mac OS X guest OSes in VMWare Fusion?

3

7 Answers 7

6

In VMware Fusion since version 4 you can go to VM preference -> General -> Clean Up Virtual Machine.

Additionally there is a chart where you can see, what size is expected after shrinking.

2
  • 1
    True, but with VMware Fusion 7+ it never offers to clean up a Mac OS guest.
    – dakcarto
    Commented Jun 10, 2016 at 19:58
  • @dakcarto - VMware Fusion 5 offers it, but only when there's something reclaimable. Perhaps you don't have anything reclaimable? (I've got 33 GB of reclaimable for a Windows 8.1 guest after the 8.0 → 8.1 upgrade).
    – jww
    Commented Jun 29, 2016 at 7:54
10

Aha — indeed you can, as per this thread on the VMWare discussion boards about this issue, assuming:

  1. The file is a sparse disk image, and not pre-allocated.
  2. The VM does not have snapshots.

In short:

Erase free space on the guest OS’s disk from within the guest OS using Disk Utility, then shrink the guest OS’s disk from the host OS using vmware-vdiskmanager at the command line.

In long:

In the guest OS:

  1. Open Disk Utility.
  2. Select the guest OS’s partition.
  3. Go to the “Erase” tab.
  4. Click on the “Erase Free Space” button.
  5. Make sure “Zero Out Deleted Files” is selected, and erase the free space.
  6. Once it’s finished, close Disk Utility, and shut down the guest OS.

Or in the terminal of the guest OS when the partition is named 'Macintosh HD':

diskutil secureErase freespace 0 Macintosh\ HD
sudo halt

In the host OS:

  1. Open Terminal and type:

    [ -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

  2. Type 'space' then the path to the virtual disk file of your VM.

  3. Hit return.

The guest OS’s virtual disk file is found within its virtual machine file. E.g. if your virtual machine file is at /Users/you/VM, the path to its virtual disk is /Users/you/VM.vmwarevm/VM.vmdk.

For the record, this shrunk a Snow Leopard VM of mine from 15 GB to 6 GB.

0
8

They added a CLI option that was super easy - do this from inside the guest OS:

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

From mudaltsov at the VMware Commmunity Forums:

A slightly easier method - the shrink functionality is built into the VMware Tools command-line utility:

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

This will first do a wipe of empty space one the file system (same as creating a zero-filled file) and show a progress in the guest Terminal. When that's done, the VMDK shrink will be invoked without shutting down the VM, and show up as a progress bar over the VM window.

The / is a path to the file system to wipe empty space on. If you have multiple partitions, you can wipe them individually and do a final shrink at the end:

  • vmware-tools-cli disk list to see the available locations for wipe
  • vmware-tools-cli disk wipe <location> to wipe each location (repeat multiple times), without the shrink operation
  • vmware-tools-cli disk shrinkonly to do the final shrink operation.

This is also explained by vmware-tools-cli help disk

1
  • This is the easiest "one command" way of shrinking the disk. Works for VMware Fusion 8.
    – pointum
    Commented Aug 11, 2016 at 14:31
5

In variants of VMware Fusion, succeeding 3.x, the locale of vmware-vdiskmanager, as mentioned in the accepted answer is:

/Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager

So all you need is

/Applications/VMware\ Fusion.app/Contents/Library/vmware-vdiskmanager -k 

then go to finder, navigate to your VM, which normally is in "~/Documents/Virtual Machines/".

Right click on the File, select "Show package contents", then drag the .vmdk-File to Terminal and hit enter.

1
  1. Open the terminal and run

     sudo diskutil secureErase freespace 0 Macintosh
    

    (Make sure you replace Macintosh with your actual HDD Partition Name, you can find it from Disk Utility. If its not correct you'll rececive “Macintosh HD not found” error)

    Wait for the command to finish processing. You might also receive some error from VMware just click on continue and ignore it.

  2. Once done, Shut Down your Mac OS VM

  3. On your main PC open Command Prompt with elevated (admin) priviledges and run

     "\vmware-path\vmware-vdiskmanager.exe" -k "\vm-path\VM-name.vmdk"
    

    NOTE: vmware-vdiskmanager.exe is not included in VMware Player version so you can download it from https://code.vmware.com/web/sdk/60/vddk and extract the downloaded development kit folder and you can finr vmware-vdiskmanager.exe in /bin folder. Now for point 3 you'll need to use this path for vmware-vdiskmanager.exe section.

  4. Once the above steps are done, you can on your Virtual Machine. It might take longer than usual for its first boot.


screenshot of host command, point 3

0

In VMWare Fusion 6, it's a 3-step process.

  1. Replace any deleted files with zeroes:

    $ diskutil secureErase freespace 0 Macintosh\ HD

  2. Run VMWare's disk-shrinking utility

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

  3. Shut down (or restart) the virtual machine.
2
0

~/cat /dev/zero > wipefile; rm wipefile

shutdown system afterwards and in Windows

vmware-vdiskmanager -k virtualmachinefile.vmdk

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .