A problem reared it’s head over the weekend with one of our hosts’ Fibre Channel HBAs negotiating it’s way down to 2GB, and consequently introducing massive latency for the LUNs behind it. Analysis showed that the drivers for the HBA were over a year out of date so the suggested fix from VMware was to update the drivers. This is fine to do manually for a few hosts, but would be a real pain for the 300+ hosts in the environment I manage.
Enter VMware Update Manager - we already use it to patch and upgrade our hosts, but it can also apply host extensions - driver packages as well.
First, we need to determine the exact hardware ID of the HBA and then get the latest supported driver package from the VMware Hardware Compatibility List. To do this
Log on to the host via SSH and issue an “esxcfg-scsidevs -a” to list installed SCSI devices. You’ll see output similar to below - the currently loaded driver is the second column, highlighted in red.
vmhba1 qla2xxx link-up fc.20000024ff25da1c:21000024ff25da1c (0:2 1:0.0) QLogic Corp ISP2532-based 8Gb Fibre Channel to PCI Express HBA
Use “vmkload_mod -s qla2xxx | grep Version” to locate the exact version of the driver loaded and you’ll see output similar to this:
Version: Version 911.k1.1-26vmw, Build: 472560, Interface: 9.2 Built on: Feb 8 2012
Now to get the exact device code to look the drivers up on the HCL, use “vmkchdev -l | grep vmhba1” - this will list the Vendor, Device, Sub-vendor and Sub-device IDs:
00:15:00.0 1077:2532 1077:0166 vmkernel vmhba1
Plug those device details along with the version of ESXi you’re running into the HCL and you should get the correct device identification - the host I’m using is running ESXi 5.1 so I can see that qla2xxx version 934.5.10.0-1vmw is the correct driver. Once you’ve identified the correct package, download and unzip it.
Unzip the package you’ve downloaded and locate the “offline_bundle.zip” - in my case this was a “qla2xxx-934.5.10.0-offline_bundle-1031464.zip”
Open the Update Manager administration view from your vSphere client and go to the Patch Repository tab, then click “Import Patches”
Import the offline bundle and confirm the details of the import:
Once the import is completed, search for the package using the Patch Repository page, and then click “Add to baseline” if you want to add it to an existing baseline, or head over to “Baselines and Groups” if you want to create a new baseline. I need to apply this to specific test hosts first, so I don’t want to add to my existing baselines.
From the Baselines and Groups tab, click “Create…” and then name your baseline - it’s good practice to include a decent description too. Make sure you select “Host Extension” as the baseline type.
Search for and add the patch you’ve just uploaded, and finish the wizard.
You can now scan, stage and remediate with the baseline as you would any other.
Hope this helps!