Troubleshoot missing ESXi host BIOS data
Recently, I was involved in the investigation of missing or incomplete ESXi BIOS info. I’ll share multiple ways how this data can be retrieved to troubleshoot such scenario, and what was the outcome of the investigation.
UI
vSphere Client
https://vc-address/ui
The vSphere Client is usually the go-to place for day-to-day operations. You can also find useful hardware information about your hosts, and of course, the BIOS version. Just select an ESXi host and navigate to:
Configure -> <scroll down to the Hardware section> -> Overview
or Configure -> <scroll down to the Hardware section> -> Firmware
ESXi Host Client
https://esxi-host-address/ui
The ESXi Host Client allows you to connect to a specific ESXi host rather than a vCenter Server. In my opinion, it’s less used and not recommended to make any changes through it if the host is managed by a vCenter Server. However, I don’t see a harm just to check the BIOS version and confirm it’s shown.
After login, you can locate the BIOS information within the System Information
widget on the host summary page.
Digging deeper
Despite the user-friendly places where the ESXi host BIOS information is available, when troubleshooting missing data we may need to get deeper than that.
PowerCLI and the Managed Object Browser (MOB)
I don’t know exactly how it actually works, but based on experience if the data is missing in the UI it also won’t be available neither from PowerCLI nor through the MOB (or API for that matter). However, including those methods in case there is no such strong dependency.
PowerCLI
Here is a “one-liner” to retrieve all possible host BIOS data and export it in a .csv
Get-VMHost | Select-Object @{Name="vendor"; Expression={ $_.ExtensionData.Hardware.SystemInfo.Vendor}},@{Name="model"; Expression={ $_.ExtensionData.Hardware.SystemInfo.Model}},@{Name="bios_vendor"; Expression={ $_.ExtensionData.Hardware.BiosInfo.Vendor}},@{Name="bios_version"; Expression={ $_.ExtensionData.Hardware.BiosInfo.BiosVersion}},@{Name="bios_releasedate"; Expression={ $_.ExtensionData.Hardware.BiosInfo.ReleaseDate}},@{Name="bios_majorrelease"; Expression={ $_.ExtensionData.Hardware.BiosInfo.MajorRelease}},@{Name="bios_minorrelease"; Expression={ $_.ExtensionData.Hardware.BiosInfo.MinorRelease}},@{Name="bios_fw_majorrelease"; Expression={ $_.ExtensionData.Hardware.BiosInfo.FirmwareMajorRelease}},@{Name="bios_fw_minorrelease"; Expression={ $_.ExtensionData.Hardware.BiosInfo.FirmwareMinorRelease}} | Export-Csv -Path <path-to-save.csv>
vCenter MOB
Navigate to https://vc-address/mob
and authenticate. It’s possible to navigate through the interface and select the desired host, but I’ll share a shortcut: https://vc-address/mob/?moid=<host-moid>&doPath=hardware.biosInfo
. You can get the host-moid
directly from the vSphere Client. Just select the host and inspect the URL in the browser’s address bar. Somewhere in the middle, you’ll see something like HostSystem:host-10688
-> host-10688
is the moid.
_Tip: There is a MOB directly on ESXi host as well. You can access it at https://esxi-host-address/mob
. It’s often disabled (maybe in some versions by default) so if when you access that URL you see 503 Service Unavailable
don’t panic. It’s possible to enable it via an advanced setting on the ESXi host Config.HostAgent.plugins.solo.enableMob
.
ESXi host console
That’s probably one of the most low-level and reliable ways to retrieve not only BIOS, but also much more system information. You’ll need to SSH or use the DCUI to log in to the ESXi console interface.
esxcfg-info
command
Produces a huge amount of system and hardware information, including the BIOS info. It’s important to mention that it’s still possible to access this information even from your browser. Just head to https://esxi-host-address/cgi-bin/esxcfg-info.cgi
, authenticate and you’ll see all info directly there.
vsish -e get /hardware/bios/biosInfo
command
Shows only the BIOS information. You can adjust the path to explore other data as well. Currently, I’m not aware if it’s possible to invoke and get vsish
command data remotely.
Results from the investigation
After checking multiple of the above-mentioned sources of information in different environments (HP and also Dell servers) it came down to this: the vsish -e get /hardware/bios/biosInfo
command was showing correct BIOS info so the ESXi host itself knows this information. However, it was completely missing in the vCenter Server - therefore retrieving the data through PowerCLI or API would not return useful data. Seems to be related to the communication between ESXi and vCenter. Restarting the vpxa
agent on the ESXi host seems to help temporarily to get the data flow running, but doesn’t seem like a good solution or workaround. Hopefully, there will be a permanent fix by VMware sooner than later.