I just saw an interesting article on Jason Boche's blog about VMware's recall of the new VAAI UNMAP primitive for vSphere 5. VMware released a new KB article KB2007427 documenting the details along with a recommendation to disable the VAAI UNMAP primitive for now (a patch will be released in the future to automatically disable this until the issue is resolved).
One thing that caught my in the VMware KB article is to disable the VAAI UNMAP primitive, you need to manually login to ESXi 5 Tech Support Mode (SSH) to run the local version of esxcli command. This is trivial if you have several hosts, but it can be time consuming if you have several hundred hosts to manage. Even though the "VMFS3.EnableBlockDelete" is a hidden parameter that can not be seen using any of the supported utilities, you can enable and disable the property using the remote version of esxcli which is part of vMA 5 or vCLI 5.
Here is an example of the command when connecting directly to an ESXi 5 host:
esxcli --server himalaya.primp-industries.com --username root system settings advanced set --int-value 1 --option /VMFS3/EnableBlockDelete
Here is an example of command when connecting to vCenter Server:
esxcli --server reflex.primp-industries.com --vihost himalaya.primp-industries.com --username administrator system settings advanced set --int-value 1 --option /VMFS3/EnableBlockDelete
As you can see, you can easily wrap this in a simple for-loop to disable the VAAI UNMAP primitive. So here is a script to help with exactly that called vaaiUNMAP.sh
The script accepts 4 parameters:
- A list of ESXi 5 hosts to enable or disable VAAI UNMAP primitive
- Name of the vCenter Server managing the ESXi 5 hosts
- vCenter auth file which contains the username/password
- 0 to disable or 1 to enable VAAI UNMAP primitive
The auth file is just a file that contains the following:
VI_USERNAME=administrator
VI_PASSWORD=y0mysuperdupersecurepassword
Here is an example of disabling VAAI UNMAP primitive on 3 ESXi hosts being managed by a vCenter Server:
To help extract all ESXi 5 hosts from your vCenter Server, you can use the following vSphere SDK for Perl getESXi5Hosts.pl
Here is an example of running the script and just save the output to a file:
One of the unfortunate thing about the VMFS3.EnableBlockDelete is that it is a hidden parameter along with others, so it will not automatically display when using local or remote ESXCLI, but thanks to Craig Risinger, you can still get the information using the remote ESXCLI by specifying the --option parameter which is great because you do not need to login to the ESXi Shell to retrieve the information.
esxcli --server himalaya.primp-industries.com --username root system settings advanced list --option /VMFS3/EnableBlockDelete
I would also recommend adding an entry into your ESXi 5 kickstart to automatically disable VAAI UNMAP by default until a fix is released.
%firstboot --interpreter=busybox #disable VAAI UNMAP primitive esxcli system settings advanced set --int-value 0 --option /VMFS3/EnableBlockDelete
This comment has been removed by the author.
There's no need for vsish. You can view the current setting via remote esxcli thus:
esxcli --server himalaya.primp-industries.com --username root system settings advanced list --option /VMFS3/EnableBlockDelete
The "int-value" value will say if the host has UNMAP enabled (1) or disabled (0).
If you omit the "--option" bit, a huge list is displayed, but the /VMFS3/EnableBlockDelete option is not included, which I guess is because it's a "hidden" option.
@Craig,
Thanks for the tip! I did not know you can just specify the --option. I assumed if it's not in the default list, you would not be able to retrieve it.
Is there a Java VAAI API ?
VAAI is an API available only for partners, I don't know what programmatic interfaces they provide. You'll need to contact VMware's TAP program to see if they can provide that information but it's only disclosed to partners within the program.