VMware released vSphere 5.0 Update 1 last week, which mainly included bug fixes but it also brought back one very cool feature that was initially introduced with the release of vSphere 5.0 called Thin Provisioning UNMAP primitive for an ESXi host. You can read more about the details in this article by my colleague Cormac Hogan.
As you can see from From Cormac's article, the process of reclaiming of dead space on a thin provisioned LUN is currently a manual process, but does it have to be? The answer is, No of course, we can can definitely automate this!
Disclaimer: This script is not officially supported by VMware, please test this in a development environment before using on production system. This script is provided as an example on you can automate this manual process.
Before you proceed, please understand that the UNMAP operation can potentially take a few minutes up to a few hours depending on the size of your datastore and how your array handles this operation. You should consider performing this operation during a maintenance window or during off peak hours else you could impact VMs residing on the datastore. You should also ensure you have a VAAI-capable storage array before performing running this script.
I wrote a simple shell script called reclaimMyDeadsSace.sh which needs to be executed on the ESXi Shell via SSH. The script will also perform some validation such as ensuring you are running ESXi 5.0 Update 1 and that your host is in maintenance mode as a per-caution to ensure no running VMs are on the host during this process.
You will only need to run the script on one of the hosts connected to all the datastores you wish to reclaim dead space on. You may use scp or WinSCP to transfer the script to your ESXi host and ensure you set the execute permission on the script (chmod +x reclaimMyDeadSpace.sh)
The script can be executed in two ways:
- Identify ALL VMFS3 and VMFS5 volumes and perform the reclaim based on the percentage entered by the user
- Reclaim on specific datastores specified by the user as well as the percentage to be reclaimed (this is recommended, that way script does not choose all datastores including local ones)
Here is an example of selecting ALL VMFS3 and VMFS5 datastores to reclaim 60% of free space:
Here is an example of selecting just 4 datastores specified in a file and we will be reclaiming 60% of free space:
In this example, we created a file called "datastore_list.txt" (you may name the file anything you want) which contains the following:
iSCSI-1
iSCSI-2
iSCSI-3
iSCSI-4
So if you are using thin provisioned LUNs and would like to reclaim some of that dead space back and have a VAAI-capable storage array, be sure to check out the UNMAP functionality in ESXi 5.0u1.
vExpert2011 says
William, does this apply to NFS datastores?
thanks
William says
@vExpert2011,
This is only applicable to block storage
Dominguez says
Hi Mr lam,
I want to automate "vmkfstools –y 90", you script reclaimMyDeadSpace.sh work on ESXi 5.1?
Thank for you time
Chris Brothers says
Hey William,
I used to use this script in the 5.0 and 5.1 days and it worked great (thanks for the work, this helped me out a lot!). Unfortunately, this doesn't seem to want to run on 5.5 and 6.0 and it doesn't seem like ESXi/VMWare is cleaning up dead blocks. Do you have any insight? Can this be adapted to work on later versions, or is there something doing garbage collection that I missed?