Reclaim Used Space with VMKFSTOOLS –Punchzero

I see vmkfstools -punchzero quite a bit as one of the search terms leading to my other posts about vmkfstools, so thought it would be worthwhile giving this useful feature its own post.

Thin provisioned disks allow you to assign storage to virtual machines, without actually using up that space on the datastore. For example, if you allocate a 20GB disk as Thin, then it’s size on the datastore will start at zero bytes, and will grow as files are written to the disk up to a maximum of 20 GB. So, if I copy a 5 GB file to the disk, then the thin provisioned disk will grow to ~5 GB. However, if I then delete the 5GB file, the virtual disk does not shrink, it remains at 5 GB. This is where vmkfstools -K or vmkfstools –punchzero comes in handy.

The best way to demonstrate this is with a real example. We’ll start with a VM with a single thin provisioned disk. Looking at its size on the datastore (remember to use ‘du’ rather than ‘ls’ to get the true size) we can see that it is currently using 1.9 GB of space on the datastore:


# du -ah vma-flat.vmdk
1.9G    vma-flat.vmdk

We’ll add some data to the thin provisioned disk. As this is a linux virtual machine I’ll use the following method to create a 500Mb file. The following command needs to be run within the guest OS:


dd if=/dev/zero of=test.file bs=500000000 count=1

Going back to the host, the virtual disk has now grown to 2.3GB as expected:


# du -ah vma-flat.vmdk
2.3G    vma-flat.vmdk

Following deletion of the file in the guest OS, the virtual disk remains at 2.3GB. In order to reclaim that 500Mb we can use vmkfstools -K or vmkfstools –punchzero. However, before we can run that command we need to shutdown the virtual machine to release the lock the host has on the .vmdk file.

Once the VM is shutdown we can run:


# vmkfstools --punchzero vma.vmdk
vmfsDisk: 1, rdmDisk: 0, blockSize: 1048576
Hole Punching: 19% done.

It will take a little while depending on the size of the virtual disk. Once complete, the virtual disk has returned to its original size:


# du -ah vma-flat.vmdk
1.9G    vma-flat.vmdk

And, confirmed in the datastore browser:

Bear in mind that you can also achieve a similar result by using svMotion to move a thin provisioned disk, however this remains useful if you prefer to leave the disk in its current location, albeit with the downside of having to shutdown the virtual machine in order to reclaim the space.

Related posts

VMware vSphere Virtual Machine Snapshots Explained

How to Enable SSH on All ESXi Hosts using PowerCLI

How to Install VMware Tools on Debian 11

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Read More