Brain storage

Personal blog about IT and more

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.