家里有台HP Z4G4 Workstation工作站,底层安装运行了VMware的ESXi Hypervisor,作为Homelab的All in one环境。
之前安装ESXi 8的时候有个问题,在启动ESXi安装阶段,一直停留在"Shutting down firmware services..."这个地方。
我知道可能大多数人遇到的问题都是如下报错,解决方法也是在安装向导前按Shift+O,添加ignoreHeadless=TRUE参数。
Shutting down firmware services...
Using 'simple offset' UEFI RTS mapping policy
Relocating modules and starting up the kernel...
实际上,这个方法也许有用但并不适合我,而且你看上面的图片,我的报错信息里只有Shutting down firmware services...。
我的工作站肯定不在官方的VCG支持列表里,但我当时配的时候,CPU、硬盘、网卡是满足兼容性的,并支持最新的ESXi 8。
当然后来,我通过将工作站BIOS启动方式调整为Legacy传统启动并关闭Secure Boot安全启动后,是可以顺利进行安装和使用。
但是,我想要使用UEFI+Secure Boot方式,我觉得这个问题应该是不难解决,我后面也尝试过升级固件调整配置参数等,未果。
经过一段时间网上资料的查询,也看到有好几位国外的朋友遇到这个相同问题,但都没有解决,不过却给我提供许多参考方向。
最后,结合VMware官方的KB和VMware工程师William的文章,现在我的Z4 G4可以在UEFI+Secure Boot上安装运行ESXi了。
参考VMware KB 76159,出现此问题的原因可能是,在某些主机上,ESXi的引导加载程序Bootloader与UEFI固件版本不兼容导致的。
为什么下面要用到ESXi 6.7 U2 (13006603)镜像呢?因为你在UEFI+Secure Boot模式下使用ESXi 6.7 U2镜像可以正常完成安装的!如果你安装了ESXi 6.7 U2 (13006603),想要升级或者新安装ESXi 6.7 U3(14320388),那么就会向上面那样停留在哪里。文章中说了这个问题在ESXi 6.7 EP13(15018017)中得到了修复,不过你可以看到,我使用了最新的ESXi 8 U2b镜像安装,这个问题依然存在,我也试过ESXi 7.x和6.7 U3,问题同样存在,不知道为什么VMware这么久了都没有修复?!
参考William的文章,他说用新的ESXi镜像引导加载程序来替代旧镜像的引导加载程序,我的做法与他刚好相反,我想,将旧的镜像引导加载程序来替换新镜像的引导加载程序是否可行,因为上面说了ESXi 6.7 U2 (13006603)镜像可以被正常安装和使用,目前来看,这个方法确实有效而且运行似乎也很正常。
下面把解决过程分享给需要的朋友:
- **Step 1:**使用ESXi 6.7 U2 (13006603)镜像中的EFI/BOOT/BOOTX64.EFI文件替换ESXi 8镜像中的EFI/BOOT/BOOTX64.EFI文件,制作引导盘并完成ESXi安装。
- **Step 2:**重启主机,使用Ubuntu镜像进救援模式,再次使用ESXi 6.7 U2 (13006603)镜像中的BOOTX64.EFI文件替换ESXi 8 EFI分区系统中的mboot64.efi文件。
使用ESXi 6.7 U2 (13006603)镜像中的EFI/BOOT/BOOTX64.EFI文件替换你所安装的ESXi镜像EFI/BOOT/BOOTX64.EFI文件。
使用Rufus或者Ventoy工具创建刚刚替换好的ISO系统安装启动盘,然后你应该能顺利完成ESXi的安装。
安装完以后,如果你正常重启主机,它应该还会停留在文章开头图片中的位置。参考William文章Option B中所说的,ESXi安装完以后使用的是原始引导加载程序文件,并不是我们所替换后的引导加载程序文件,所以我们还需要执行第二步。
如果你是将ESXi系统安装在U盘上面的,那你可以直接把U盘拔出来插在自己电脑上,然后将USB连接到WSL中去,再使用ESXi 6.7 U2 (13006603)镜像中EFI/BOOT/BOOTX64.EFI文件替换ESXi系统EFI分区中的/EFI/VMware/mboot64.efi文件(注:BOOTX64.EFI文件复制过来后名字需要改成mboot64.efi以替换原来的mboot64.efi)。或通过VMware Workstation将U盘连接到一个Linux系统中去,按上面同样的方式完成替换。如果你是将ESXi系统安装在SSD硬盘上面的,那么可以参考我下面的方式,制作一个Ubuntu的系统安装启动盘(其他Linux发行版也行),插在主机上重启主机后从Ubuntu引导启动进入系统救援模式,再将ESXi系统的EFI分区挂载过来完成文件替换。
注:由于我这边主机已经做过替换,下面我在虚拟化环境来演示这一过程。
下载Ubuntu镜像,使用上面所述的工具创建一个系统引导盘,并将ESXi 6.7 U2 (13006603)镜像中EFI/BOOT/BOOTX64.EFI文件复制到引导盘的根目录中去。
将Ubuntu系统启动盘插在主机上,重启主机后从U盘引导启动进到Ubuntu的GRUB菜单,选择第一项然后按 e 进行编辑。
在Linux这一行的最后添加 systemd.unit=rescue.target 代码,然后按Ctrl+x或者F10保存并启动。
等一会儿后,进入rescue mode救援模式。
先查看一下BOOTX64.EFI文件在哪里。
使用fdisk -l命令查看ESXi系统EFI分区位于哪里,环境不同设备名称会不一样,这里是/dev/sda1。
使用下面命令,对ESXi系统EFI分区中的mboot64.efi文件完成替换。
cp /cdrom/BOOTX64.EFI / //拷贝文件到根目录
mkdir /mnt/esxi && mount /dev/sda1 /mnt/esxi //创建临时目录并挂载ESXi系统EFI分区
ls /mnt/esxi/EFI/VMware/ //查看EFI分区中的文件
mv BOOTX64.EFI /mnt/esxi/EFI/VMware/mboot64.efi //使用mv命令完成替换
最后,使用umount卸载目录,然后reboot重启主机即可。
现在,你应该能正常进入ESXi系统了,检测所有硬件是否都识别并运行正常。
我不太确定如果对ESXi进行补丁修复或升级会不会再次将这个引导加载程序文件进行还原,但如果要重新替换应该也非常简单。
上述方法同样适用于HP Z6/Z8 G4等工作站或者遇到与我相同问题的人,除了ESXi8版本,在ESXi7或ESXi 6.7 U3上同样有效。