装好ESXi之后,我先装上了`Ubuntu Server 22.10`和`Windows Server 2019 Datacenter`。用了一段时间,总感觉有点奇怪,尽管说这是好多年前的机器,性能不强我是有心理准备的,但也不至于点个开始菜单都要好几秒,打开资源管理器也要将近半分钟。今天等待程序载入的时候看了眼任务管理器,发现磁盘占用率竟然100%,要知道我这是两块固态硬盘组的阵列诶!既然有问题,就上网搜一搜呗,这不冲浪不知道,一冲浪吓一跳,惠普给`ESXi 6.x`打包的`B120i`板载阵列卡驱动有性能问题,会导致磁盘读写异常缓慢。针对这个问题,网上最普遍的一个解决方案就是把阵列卡驱动退回到`ESXi 5.x`中的最后一个版本`5.5.0-88`。


装好ESXi之后,我先装上了Ubuntu Server 22.10Windows Server 2019 Datacenter。用了一段时间,总感觉有点奇怪,尽管说这是好多年前的机器,性能不强我是有心理准备的,但也不至于点个开始菜单都要好几秒,打开资源管理器也要将近半分钟。今天等待程序载入的时候看了眼任务管理器,发现磁盘占用率竟然100%,要知道我这是两块固态硬盘组的阵列诶!既然有问题,就上网搜一搜呗,这不冲浪不知道,一冲浪吓一跳,惠普给ESXi 6.x打包的B120i板载阵列卡驱动有性能问题,会导致磁盘读写异常缓慢。针对这个问题,网上最普遍的一个解决方案就是把阵列卡驱动退回到ESXi 5.x中的最后一个版本5.5.0-88

那话不多说,搞它!

首先,把所有虚拟机关机,全部关机后,在ESXi的主机页面里,点击操作菜单中的进入维护模式;在点击操作菜单,进入服务,选择启用 Secure Shell(SSH),因为后面要SSH进ESXi里面安装驱动。

下载http://downloads.hpe.com/pub/softlib2/software1/pubsw-linux/p1749737361/v98767/hpvsa-5.5.0-88.zip完成后,解压这个ZIP包,得到驱动本体scsi-hpvsa-5.5.0-88OEM.550.0.0.1331820.x86_64.vib。将这个vib文件上传到ESXi的/var/log/vmware目录下。上传成功后,SSH进入ESXi,执行如下命令:

# 卸载当前版本的驱动
esxcli software vib remove -n scsi-hpvsa -f

# 安装5.5.0-88版驱动
esxcli software vib install -v file:scsi-hpvsa-5.5.0-88OEM.550.0.0.1331820.x86_64.vib --force --no-sig-check --maintenance-mode

# 重启ESXi
reboot

重启完了,进ESXi看了眼驱动,发现RAID也没认出来,驱动也变成vmw_achi了,这是没认出来阵列卡驱动啊。搜了一下,发现可以强制禁用vmw_ahci,于是再进SSH,执行esxcli system module set --enabled=false --module=vmw_ahci这条命令,再重启之后,RAID回来了,驱动也变成hpvsa了。

支持ESXI的阵列卡 esxi 阵列卡_支持ESXI的阵列卡

如果你在禁用vmw_ahci之后还不能成功加载hpvsa驱动,那么就得先执行esxcli software vib remove -n scsi-hpvsa -f来卸掉它,重启之后再重装。这时候千万不能操作硬盘,否则可能造成数据损毁。

换驱动的时候了解到,VMWare也会给ESXi推出一些系统修正补丁,那有补丁当然要打啊。一开始我想着参照ESXi 6.5 - VMware ESXi Patch Tracker这个网站给的命令在线更新,但是一直报Got no data from process这个错误,VMWare Communities上面也有人遇到同样的错误,解决方法是下载补丁然后手动安装。

关于Got no data from process这个错误,根据How to Upgrade from VMware vSphere ESXi 6.7 to 7.0中的描述:

If you see the error message:

Got no data from process: LANG=en_US.UTF-8 /usr/lib/vmware/esxcli-software profile.update -d "https://hostupdate.vmware.com/software/VUM/PRODUCTION/main/vmw-depot-index.xml" -p "ESXi-7.0.0-15843807-standard",

check whether there is a persistent scratch partition. There may not be a persistent scratch partition if you’re running ESXi from a USB flash drive.

而根据How to Run ESXi from a USB Flash Drive所说:

支持ESXI的阵列卡 esxi 阵列卡_重启_02


If ESXi is installed on a USB flash drive or SD card whose size is 8 GB or more, partitions #2 and #3 are not created. The Scratch directory used to store logs is linked to the /tmp/scratch directory that is located on the RAM drive.

也就是说,如果把ESXi装在大于等于8GB的TF卡或者U盘里面的话,就会缺少一个scratch分区。

另外根据这个分区图,我还发现,如果把ESXi装在硬盘里的话,它会把剩余空间作为数据存储,而不是像网上一些文章说的只用来装系统,这个我后面有时间会再测试一下。

那么,首先到Product Patches这里,Product选ESXi (Embeeded and Installable),Version选6.5.0(如果你装的不一样,以你为准),点Search后会列出一堆补丁,选最新那个,点Download Now来下载补丁的ZIP包。然后点View Details,我们要在详细信息页面找到Image Profile的名字。

支持ESXI的阵列卡 esxi 阵列卡_重启_03

关于什么是Image Profile:
VMWare文档说:Image profiles define the set of VIBs that an ESXi installation or update process uses.
也就是说,Image Profile定义了包里的哪些VIB会被安装。
每个补丁包中都会带有2~4个Image Profile,根据VMware ESXi Image Profiles的描述,各个Image Profile的含义是:

  1. ESXi-5.5.0-20140704001-standard - 包含全部补丁
  2. ESXi-5.5.0-20140704001-no-tools - 包含除了VMware Tools之外的全部补丁
  3. ESXi-5.5.0-20140701001s-standard - 只包含安全补丁
  4. ESXi-5.5.0-20140701001s-no-tools - 只包含安全补丁,同时没有VMware Tools

因为我要更新所有的VIB,所以我将要用ESXi-6.5.0-20221004001-standard这个Image Profile。SSH进ESXi,执行esxcli software profile update -p ESXi-6.5.0-20221004001-standard -d /vmfs/volumes/63a1b271-3340b157-711e-d0bf9c4694d8/ESXi650-202210001.zip开始安装(记得把-d参数指定的绝对路径改为你的机器上面的路径)。安装过程比较耗时间,这期间可以tail -f /var/log/esxupdate.log来看ESXi正在干什么,毕竟看着日志在跑,心里也有底,不然总害怕系统是不是死掉了。

更新成功后,esxcli会打出来哪些包被更新了,但是实在是太多,我根本懒得看,直接重启。重启之后,ESXi能正常进系统,存储和虚拟机都正常载入,说明没出啥毛病。这时候就可以退出维护模式,给虚拟机开机。有一说一,现在不管是开机还是打开什么东西,反应确实快了不少,看来驱动导致的硬盘性能问题已经成功解决。