家裡有臺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系統安裝在隨身碟上面的,那你可以直接把隨身碟拔出來插在自己電腦上,然後將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將隨身碟連線到一個Linux系統中去,按上面同樣的方式完成替換。如果你是將ESXi系統安裝在SSD硬碟上面的,那麼可以參考我下面的方式,製作一個Ubuntu的系統安裝啟動盤(其他Linux發行版也行),插在主機上重啟主機後從Ubuntu引導啟動進入系統救援模式,再將ESXi系統的EFI分割槽掛載過來完成檔案替換。
注:由於我這邊主機已經做過替換,下面我在虛擬化環境來演示這一過程。
下載Ubuntu映象,使用上面所述的工具建立一個系統引導盤,並將ESXi 6.7 U2 (13006603)映象中EFI/BOOT/BOOTX64.EFI檔案複製到引導盤的根目錄中去。
將Ubuntu系統啟動盤插在主機上,重啟主機後從隨身碟引導啟動進到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等工作站或者遇到與我相同問題的人,除了ESXi 8版本,在ESXi 7或ESXi 6.7 U3上同樣有效。