虛擬硬碟的 vmdk 描述檔不見了

虛擬機器的硬碟檔案可分成 *.vmdk 的硬碟描述檔,以及真正存放資料的 *-flat.vmdk 硬碟檔,當 *-flat.vmdk 不見了,那就只能從備份如 vDP 來還原它,如果只是 *.vmdk 描述檔不見了,但 *-flat.vmdk 還在,https://cubik.com.tw/vpn/ 那還可以救得回來。

當 *.vmdk 檔案不見了,VM 開機時在 Task 會出現 File *.vmdk was not found 的錯誤訊息,如下圖:

001

看到這種錯誤訊息就令人大為緊張,趕快連線到 ESXi ,進到放置虛擬機的目錄中,用 ls -al 看看檔案發生什麼事了:
002

還好雖然 vmdk 描述檔不見了,但 *-flat.vmdk 實體硬碟檔還在,那就將 vmdk 描述檔重建回來:

一、先確認 xxxx-flat.vmdk 的容量大小:
# ls -al xxxx-flat.vmdk
003

二、抓 *.vmx 檔案來看,以確認虛擬硬碟 SCSI 控制器的規格,在這個例子中它的型號是 lsilogic:
# cat xxxx.vmx | grep virtualDev
004

三、利用 vmkfstools 工具建立 vmdk 描述檔:
# vmkfstools -c 1234567890 -a lsilogic -d thin temp.vmdk
上述 -c「123456789」要填入真實的 xxxx-flat.vmdk 的容量大小,-a「lsilogic」要填入從 *.vmx 查出來的 SCSI 控制器型號,而 -d thin 則是指先建立 thin provision 的虛擬硬碟,暫時的虛擬硬碟檔名為 temp.vmdk,建立好後再用 ls -al 看檔案是否存在。
005

四、將建立好的 temp.vmdk 改名成相對應的名稱:
# mv temp.vmdk xxxx.vmdk
006

五、修改 xxxx.vmdk 描述檔:
# vi xxxx.vmdk
007

六、將原本的「”temp-flat.vmdk”」修改成對應的 *-flat.vmdk 名稱,並確認當初那顆不見了的原始虛擬硬碟格式設定是否為 thin provision,如果是則「ddb.thinProvisioned = “1’」這行保留,如果不是則整行刪除
008

七、刪除 tmp-flat.vmdk:
# rm temp-flat.vmdk
009

十、確認一下虛擬硬碟檔是否一致,如果一致會出現 Disk chain is consistent 訊息:
# vmkfstools -e xxxx.vmdk
010

十一、這時就可以正常開機了
012