VMware 6.5 and 6.7 update fail­ure – rea­son and fix

Prob­lem

If you want to update an ESXi host (or you have upgrad­ed the VMware vSphere appli­ance and try to enable HA on some hosts), some­times it may be the case that it fails (most like­ly when you down­load the update either from VMware via esx­cli com­mand and a https source, or local down­load from the vCen­ter – instead of hav­ing the update on a data­s­tore and point­ing esx­cli to the data­s­tore). If you inves­ti­gate this (in the case of fail­ure to enable HA you may not have a look at esxupdate.log, but if you just updat­ed you vCen­ter appli­ance and the hosts are still on the old ver­sion, just go there and have a look), you may stum­ble on some VMware knowl­edge base arti­cle which tells that this may be a disk space issue on the ESXi host. If you then have a look at the host, you see plen­ty of free space.

Rea­son

You can not see this issue after it has failed, it is only observ­able dur­ing the update process. The rea­son for this is, that the update process is cre­at­ing a ramdisk where it tries to store the update tem­po­rary (at least if the hyper­vi­sor is not installed on some­thing which is detect­ed as a real disk – if you have it installed on a SD card which is detect­ed by the ESXi ker­nel on a USB con­nec­tion, then it is not a real disk in this case; the same is true if it is installed on a SSD behind an USB con­nec­tion, I haven’t found a way to convince/force the installer or the hyper­vi­sor after the instal­la­tion to assume it is a SSD or at least a real disk were it does not need to care about wear-leveling like on a SD card, feel free to add a com­ment to point me to a how­to). This ramdisk is then too small and the update fails.

Solu­tion

Put the update on a data­s­tore and run the update via the esx­cli com­mand. If you use the remote source fea­ture of esx­cli, you will find the down­load URL in esxupdate.log. In case the update comes from the vCen­ter, you can at least find the VIP name in the esxupdate.log and you can use the “find” com­mand to search it in the vCen­ter shell and then scp it to a (shared) data­s­tore on a/the host.