2021年7月31日 星期六

[經驗分享] 解決 ESXi 5.1 匯入其它軟體產出 VMDK 檔案問題

  


我在協助客戶建置系統的過程中,經常會遇到不同廠牌及版本的虛擬化平台,在跨軟體之間進行匯入,VMDK 是最常應用到的格式。

不過,最近遇到一個案例,客戶的環境是 VMware ESXi Server 5.1,我從 Proxmox VE 轉出的 VMDK 匯入 ESXi Server 5.1 後發生了一些問題,而我過去的招數都失敗了,該怎麼找出奇招解決這個困境?




問題狀況

這幾年我常接到需要協助建置 LibreNMS 網路裝置與服務監控系統、Graylog 記錄集中收取與分析系統的專案。

若客戶允許,通常我會先在我的 Proxmox VE 伺服器虛擬化平台上先依據討論後的需求項目,安裝好一個接近上線環境設定的虛擬機,再利用 Proxmox VE 支援 VMDK 的特性,直接轉出 VMDK 檔,交給客戶在他的 ESXi Server 將磁碟置入開機,接著進行下一步的設定與導入程序。



利用 Proxmox VE 轉換為 VMDK 格式



在過去,我曾經遇過由 Proxmox VE 產出的 VMDK 無法直接匯入客戶 VMware ESXi 6.5 Server 以上新版本問題,當時也整理了另一篇文章來解決這個問題 (請參考文末連結)。但這次情況剛好相反,是要把 VMDK 放到較舊的 VMware ESXi 5.1 Server。

客戶可以經由 WebUI 上載我由 Proxmox VE 產出的 VMDK 檔,並且可以直接開機使用,很高興的都設定完成以後,運作沒有任何問題........但是,提醒客戶要快照跟備份時,就出現錯誤了。



製作快照出現錯誤


快照錯誤之後,這台虛擬機也無法開機了,必須把剛剛製作時產生錯誤的那一份快照刪除,才能讓該虛擬機開機使用。

原本想用之前介紹過的 StarWind v2v Converter 轉檔來解決,但是 StarWind v2v Converter 轉出後的 flat VMDK 格式,放到客戶的 VMware ESXi Server 5.1 也無法匯入。


v2v Converter 轉換後的 ESXi Server image 是 flat-vmdk


那就慘了,不能做快照,那麼也不能做備份,因為很多跟 VMware ESXi 整合的備份軟體是基於快照機制進行的,該怎麼辦呢?











解決方案一

看起來問題是出在 VMDK 格式問題,因此考慮改用符合 ESXi 匯入程序的作法,以 OVF 格式檔案提供給客戶環境匯入。

我先在 VirtualBox 中建立一個虛擬機,再把 Proxmox VE 產生的 VMDK 檔案放入這個虛擬機的配置,再利用 VirtualBox 將這個虛擬機匯出為 OVA 檔。


經由 VirtualBox 將虛擬機匯出為 OVA 格式


為了提供 OVF 格式,我另外下載了 VMware Workstation Pro 16 三十天試用版,並且找了一台 Windows 電腦來測試。將剛剛匯出的 VirtualBox OVA 檔匯入至 VMware Workstation Pro 裡,完成後再由 VMware Workstation Pro 匯出為 OVF 檔案。



經由 VMware Workstation Pro 將虛擬機匯出為 OVF 格式


搞定!看起來把這包 OVF 檔案提供給客戶就可以了......嗚!又面臨兩項錯誤,首先是檔案雜湊檢驗錯誤。



部署 OVF 時發生 SHA 檢驗錯誤


打開隨著匯出 OVF 時一起產生的 .mf 檔,裡面有像這樣的內容:

SHA256(test.ovf)= 92eec24f1f35626b598aef741511a6068f7345ceb4956da1a5029f4d794e93cc
SHA256(test-disk1.vmdk)= 0900005105e83a72460f979ffe2bed860a34364c637bf85d8eb88ea339bc31cd



參考 VMware 官方的知識庫裡面有提到,較舊的 VMware ESXi 5.5/5.1 不支援 SHA256 演算法,因此我們需要轉換一下 mf 檔的內容,可以使用安裝過 VMware Workstation Pro 後所提供的 ovftool.exe 這支工具程式,將檢驗檔案內容改用 SHA1 產生。

"C:\Program Files (x86)\VMware\VMware Workstation\OVFTool\ovftool.exe" --shaAlgorithm=SHA1 d:\temp\test.ovf d:\temp\test-sha1.ovf



再把這個轉檔後的版本在客戶端匯入,結果又出現其它的錯誤訊息。


匯入 OVF 遇硬體支援度錯誤



無言了,我用最新版的 VMware Workstation Pro 16,只能轉出最新的 vmx-18 硬體版本,但 ESXi Server 5.1 不吃這一套,因為它支援的版本是 vmx-9。


Virtual Hardware Version 對照表













解決方案二

前面的作法無效,在網路上找到了其它人的心得,這時候客戶也剛好找到同一篇貼給我看,因此我們就來改用這個方式處理看看,原文可參考文末最後一個連結。

這次為了效能,我不想在虛擬機裡的 Windows 轉檔,我先到 VMware 官網下載了 macOS 版本的 ovftool,讓它跑在我的 MacBook Pro 本機裡。 

改用前面階段 VirtualBox 所產出的 OVA 檔,交給 ovftool 做 OVA 至 OVF 轉檔處理,打開 macOS 終端機,指令如下:

"/Applications/VMware OVF Tool/ovftool" ~/Downloads/test.ova ~/Downloads/test-open.ovf

使用 ovftool 將 OVA 轉為 OVF


轉檔完成後產出三個檔案,其中的 .mf 檔這次就不處理了,該篇文章作者提到只要把 .mf 檔案刪除或更名,就可以略過 SHA1 檢驗程序。

其中比較重要的是 .ovf 檔,裡面有硬體的相關配置,我們需要手動修改與刪除一些配置,才能順利交給 ESXi Server 5.1 匯入。

需要手動修改的機器版本

請用文字編輯器打開 .ovf 檔案,搜尋到 virtualbox-2.2 修改為 vmx-07


接著修改磁碟控制器部份,將原本的 sataController0 更換為 SCSIController,找到如下區段:
# 原有區段
<Item>
  <rasd:Address>0</rasd:Address>
  <rasd:Caption>sataController0</rasd:Caption>
  <rasd:Description>SATA Controller</rasd:Description>
  <rasd:ElementName>sataController0</rasd:ElementName>
  <rasd:InstanceID>5</rasd:InstanceID>
  <rasd:ResourceSubType>AHCI</rasd:ResourceSubType>
  <rasd:ResourceType>20</rasd:ResourceType>
</Item>


整段刪除,將之替換為:
# 替換內容
<Item>
  <rasd:Address>0</rasd:Address>
  <rasd:Caption>SCSIController</rasd:Caption>
  <rasd:Description>SCSI Controller</rasd:Description>
  <rasd:ElementName>SCSIController</rasd:ElementName>
  <rasd:InstanceID>5</rasd:InstanceID>
  <rasd:ResourceSubType>lsilogic</rasd:ResourceSubType>
  <rasd:ResourceType>6</rasd:ResourceType>
</Item>


接著,再將用不到的音效裝置刪除:
# 刪除區段
<Item>
  <rasd:AddressOnParent>3</rasd:AddressOnParent>
  <rasd:AutomaticAllocation>false</rasd:AutomaticAllocation>
  <rasd:Caption>sound</rasd:Caption>
  <rasd:Description>Sound Card</rasd:Description>
  <rasd:ElementName>sound</rasd:ElementName>
  <rasd:InstanceID>7</rasd:InstanceID>
  <rasd:ResourceSubType>ensoniq1371</rasd:ResourceSubType>
  <rasd:ResourceType>35</rasd:ResourceType>
</Item>

存檔後,再把 .ovf、.vmdk 檔案放置到客戶端,匯入後就可以正常快照,結案!










參考資料