I was recently made aware of an issue with my ghettoVCB script that after upgrading to ESXi 5.1, the ability to clone (or in this case backup) using the 2gbsparse disk format with vmkfstools was no longer working. The error that users were seeing was “The system cannot find the file specified.” and I also confirmed this behavior by manually creating a VMDK and then trying to clone using the 2gbsparse format.
To give you some background, the 2gbsparse disk format is not a VMFS virtual disk format, it is part of the hosted desktop product (VMware Fusion, Workstation, Server & Player) disk format. This disk format was created to prevent cross-platform file system compatibility issue as pointed out in this VMware KB article. This issue does not exists on VMFS and hence this extra disk format is not necessary.
After some investigation, I found to use the 2gbsparse format in vmkfstools, you will need to load a specific VMkernel module called “multiextent“. 2gbsparse was never officially supported on ESXi, you can not run a virtual machine with 2gbsparse disk format on ESXi and that is why a conversion maybe required when moving from a hosted product to ESXi. So by disabling unnecessary VMkernel modules that were not used made sense to help reduce amount of resources needed to load up. This is especially important with stateless deployments, where you want your ESXi host to load up as fast as possible.
Once you have enabled this VMkernel module, the 2gbsparse format will function again with vmkfstools. I also found that this was mentioned in the vSphere 5.1 release notes (yes, you should read the release notes)
To load the multiextent VMkernel module, run the following ESXCLI command:
esxcli system module load -m multiextent
To check whether the multiextent VMkernel module has loaded, run the following ESXCLI command:
esxcli system module list | grep multiextent
If you wish to persist this configuration after a system reboot, I found that you need to add the following command in a start-up script /etc/rc.local.d/local.sh as just setting the “enabled” flag is not sufficient for this particular VMkernel module.
localcli system module load -m multiextent
Note: We are using localcli because hostd may not be completely ready and you can either add a sleep/timer or just use localcli.