There maybe certain use cases where you need to execute a command or series of commands during the boot up of an ESX(i) host and historically administrators have added commands to the /etc/rc.local which is one of the last scripts to be executed in the boot up process. However, with ESXi 5.1, the location of the file has changed from /etc/rc.local to /etc/rc.local.d/local.sh.
VMware also provides a KB2043564 that describes the locations for the various version of ESX(i):
- In ESX 3.x/4.x - You would add the command(s) to /etc/rc.d/rc.local
- In ESXi 4.x/5.0 - You would add the command(s) to /etc/rc.local
- In ESXi 5.1 - It has changed to /etc/rc.local.d/local.sh
Disclaimer: As mentioned in the VMware KB, though this is supported, it is still not recommended that you edit these files unless directed by VMware support or under special scenarios.
A question that came up recently was about automatically loading the “multiextent” VMkernel module (which is required if you wish to use the 2gbsparse VMDK format, you can find more details in this blog article here) during the boot up of an ESXi 5.1 host as this had to be done manually, even if you had enabled the module. To do so, you just need to edit the /etc/rc.local.d/local.sh and add the following command above the “exit 0″.
localcli system module load -m multiextent
Note: The reason I used localcli versus ESXCLI is that hostd may not be completely ready and hence the command may fail during the boot up process. One can also loop and wait for ESXCLI to be ready, but this is another way of performing the operation.