Shrinking VMware Virtual Disks

From Nearline Storage
Jump to: navigation, search

The guest cannot have snapshots and it cannot be marked as a template from which clones are made.

In VMware Workstation:

  • For Windows guests:
    • Start the guest system and log in
    • Open a command prompt window in administrator mode
    • C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe disk list
    • C:\Program Files\VMware\VMware Tools\VMwareToolboxCmd.exe disk shrink C:\
  • For Linux guests:
    • Start the guest system and login as root
    • Open a terminal window
    • vmware-toolbox-cmd disk list
    • vmware-toolbox-cmd disk shrink /

In ESXi:

  • For Linux guests using LVM volumes:
    The zerofree utility is much quicker than the old "dd if=/dev/zero" method and it does not expand the thin-provisioned volume to full size, but it requires that the partition be unmounted.
    • Download the systemrescuecd.iso and place it on one of the ESXi server's datastore volumes
    • Remove any snapshots
    • Modify the guest system's settings so that it boots from the ISO image
      • Change "Boot Options" to "Force BIOS Setup"
      • Set the CD drive to "Connected" and and point it at the ISO image
      • Restart the guest and, in boot settings, set it to boot from the CD ahead of the hard drive
      • "Save and Exit" to boot the guest into the systemrescuecd image
    • Activate the LVM volume that contains the root partition
      • Activate all volume groups
        lvm vgchange -a y
      • List all volumes and their volume groups
        lvm lvs --all
    • Zero out the root volume
      zerofree -v /dev/volume_group/volume
      in my case that's
      zerofree -v /dev/vg_ioc51prod/lv_root
    • Shutdown the systemrescuecd guest system
    • Modify the guest system's settings to restore the original boot settings
      • Remove the systemrescuecd.iso as the CD device
      • Change "Boot Options" to "Force BIOS Setup"
      • Power on the guest and set it to boot from the hard drive ahead of the CD in boot settings
      • "Save and Exit" to boot the guest to confirm that it still works
    • Shutdown the guest
    • SSH to the ESXi server
    • Locate and change to directory that contains the guest's VMDK file
    • vmkfstools --punchzero <guest>.vmdk