[VMware] 繞過損壞無法修復的 snapshot 的 VM
前一陣子公司的硬碟壞掉,不幸的是這顆硬碟上裝了 ESXi server,
其中一台 VM 是部門的 Wiki server,導致資料都讀不出來了…
最近用 在 CentOS 7 上讀取 VMware ESXi 5.0 vmfs 的檔案 的方法,
把這台 VM 的檔案從硬碟中直接複製了出來,想說直接用 VMware Workstation Pro 來開開看,
結果就遇到了 VMDK corruption 的問題:
這邊就算按下 Yes 試著去修復也沒有用,結果還是失敗:
參考了一下 VMware Knowledgebase: Repairing a virtual disk in Workstation
似乎可以用 vmware-vdiskmanager 來修修看:
testuser@localhost ~/Wiki $ vmware-vdiskmanager -R Wiki-000004.vmdk
The virtual disk, 'Wiki-000004.vmdk', was corrupted and has been successfully repaired.
訊息說是成功了,不過想要開啟 VM 時依然是說 VMDK corruption…
最後找到一個 workaround…
因為這台 VM 上有四個 snapshot,
其中最後兩個 snapshot 的時間只差一個星期,也就是說資料相差不大,
現在壞掉的是最後一個 snapshot 的 VMDK,因此如果跳過它,
改用前一個 snapshot 的 VMDK,只會損失一點點資料~
先看一下 VM 目錄裡的檔案,可以看到四組 snapshot,
日期由舊到新分別是:
– 第一組:Wiki-000001-delta.vmdk, Wiki-000001.vmdk, Wiki-Snapshot1.vmsn
– 第二組:Wiki-000002-delta.vmdk, Wiki-000002.vmdk, Wiki-Snapshot2.vmsn
– 第三組:Wiki-000003-delta.vmdk, Wiki-000003.vmdk, Wiki-Snapshot6.vmsn
– 第四組:Wiki-000004-delta.vmdk, Wiki-000004.vmdk, Wiki-Snapshot7.vmsn
testuser@localhost ~/Wiki $ ll
-rw-------. 1 testuser testuser 822497280 Dec 11 15:29 Wiki-000001-delta.vmdk
-rw-------. 1 testuser testuser 332 Dec 11 15:29 Wiki-000001.vmdk
-rw-------. 1 testuser testuser 18606346240 Dec 11 15:40 Wiki-000002-delta.vmdk
-rw-------. 1 testuser testuser 339 Dec 11 15:40 Wiki-000002.vmdk
-rw-------. 1 testuser testuser 3674624000 Dec 11 15:42 Wiki-000003-delta.vmdk
-rw-------. 1 testuser testuser 339 Dec 11 15:42 Wiki-000003.vmdk
-rw-------. 1 testuser testuser 4394106880 Dec 11 17:56 Wiki-000004-delta.vmdk
-rw-------. 1 testuser testuser 339 Dec 11 15:45 Wiki-000004.vmdk
-rw-r--r--. 1 testuser testuser 27 Dec 11 15:47 Wiki-c9fa2401.hlog
-rwxr-xr-x. 1 testuser testuser 0 Dec 11 15:47 Wiki-c9fa2401.vswp
-rw-------. 1 testuser testuser 214748364800 Dec 11 16:14 Wiki-flat.vmdk
-rw-------. 1 testuser testuser 8684 Dec 11 16:14 Wiki.nvram
-rw-------. 1 testuser testuser 27967 Dec 11 15:45 Wiki-Snapshot1.vmsn
-rw-------. 1 testuser testuser 27974 Dec 11 15:45 Wiki-Snapshot2.vmsn
-rw-------. 1 testuser testuser 2155325194 Dec 11 15:46 Wiki-Snapshot6.vmsn
-rw-------. 1 testuser testuser 2156825838 Dec 11 15:47 Wiki-Snapshot7.vmsn
-rw-------. 1 testuser testuser 529 Dec 11 16:14 Wiki.vmdk
-rw-r--r--. 1 testuser testuser 1459 Dec 11 16:14 Wiki.vmsd
-rwxr-xr-x. 1 testuser testuser 3004 Dec 11 16:28 Wiki.vmx
-rw-r--r--. 1 testuser testuser 269 Dec 11 16:14 Wiki.vmxf
這四組 snapshot 的關聯用 Snapshot Manager 來看,正好是直線的:
(第一組) -> (第二組) -> (第三組) -> (第四組)
想要跳過最後一組 snapshot,需要先修改 Wiki.vmx:
scsi0:0.fileName = "Wiki-000004.vmdk"
上面是寫說這個 VM 的目前硬碟是 Wiki-000004.vmdk~
要跳過壞掉的 Wiki-000004.vmdk,很直覺地將 Wiki.vmx 的內容改成用 Wiki-000003.vmdk:
scsi0:0.fileName = "Wiki-000003.vmdk"
不過光是這樣改沒有用,想將 VM 開機時,說這個 Wiki-000003.vmdk 已經被使用:
不過這個錯誤訊息似乎不太正確,其實是因為 VM 裡還設定了四個 snapshot,
所以 VMware Workstation 還會試著去找 Wiki-000004.vmdk,
不過大概是資料不一致導致出錯了…
修改一下 Wiki.vmsd,將 snapshot 數量從 4 改成 3:
snapshot.numSnapshots = "3"
就可以成功將 VM 開機囉~
算是一個 workaround,真希望可以找到一個把 VMDK 完全修復的方法呀~
參考資料:ESXi Snapshot Files