問題背景:
1、一台虛拟機,建立了三份快照。在一次維護過程中,把快照全部删除(合并快照,保持目前最新狀态),同時關閉虛拟機。
由于快照較多,還沒有全部合并完成,虛拟機已經關機了。
2、重新打開虛拟機時提示開機失敗,提示大概意思是找不到之前的快照檔案,無法開機。
3、打開存儲管理器,原始vmdk檔案、000001.vmdk 、000002.vmdk 000003.vmdk檔案都在,虛拟機目前所使用的硬碟對應000002.vmdk。
4、重新裝載虛拟機,隻能選擇原始vmdk作為硬碟,無法選擇其他vmdk作為硬碟,如果挂載原始盤,虛機隻回到沒有做任何快照時候的狀态,後期的資料全部丢失。
解決步驟:
登入到ESX主機,進入虛機所在的檔案目錄,有以下多個檔案:
abc.-000001-delta.vmdk
abc.-000001.vmdk
abc.-000002-delta.vmdk
abc.-000002.vmdk
abc.-000003-delta.vmdk
abc.-000003.vmdk
abc.-flat.vmdk
abc..vmdk
abc.vmx
... ...
1、#grep -i filename abc.vmx 檢視目前虛拟機挂載哪些硬碟,結果如下:
scsi0:0.fileName="abc.-000002.vmdk" //目前硬碟為0002.vmdk;
2、#cat abc.-00002.vmdk 檢視00002硬碟的父盤是哪一塊,資訊如下:
CID=929c1b7d //此硬碟的編号
parentCID=9b5a6f9f //父盤的編号
parentFileNameHint="abc.-000001.vmdk" //父盤對應的硬碟
3、找到并打開上面的父盤(000001)資訊
#cat abc.-000001.vmdk,結果如下:
CID=9b5a6f9f //此硬碟的編号
parentCID=9b5a6f9f//父盤的編号,此處9b5a6f9f資訊已經混亂了
parentFileNameHint="abc.-000003.vmdk" //父盤對應的硬碟
4、忽略混亂錯誤,找到并打開-000003.vmdk ,
#cat abc.-000003.vmdk,結果如下:
CID=9b5a6f9f //此硬碟的編号,混亂,和子盤重複
parentCID=014617b2//父盤的編号,混亂,
parentFileNameHint="abc..vmdk" //父盤對應的硬碟
5、打開.vmdk,
#cat abc..vmdk,結果如下:
CID=95bd0757//此硬碟的編号,此盤沒有子盤,是以提示找不到快照所對應的硬碟!
parentCID=ffffffff //沒有父盤,此盤為最原始的盤。
6、按照vmware文檔的要求,正常情況下用vmkfstools将原始盤克隆一個新的硬碟,然後将新硬碟挂載到空的虛機上,應該能夠解決問題。
#mkdir recover
#vmkfstools -i abc..vmdk recover/newdisk.vmdk
運作會顯示:
Destination disk format :VMFS thick
Coloning disk 'abc..vmdk'...
Clone: 100% done。
由于編号混亂,如果對..vmdk克隆,所得到的硬碟和原始盤一樣;如果對000001或000002、000003.vmdk進行克隆,提示當建立子盤的時候,父盤已經被修改過了,無法克隆。
7、如果人為按照上述邏輯,修改每塊硬碟的CID号和父盤的CID号,得到的克隆盤挂載、開機後顯示硬碟損壞。
8、考慮到目前虛拟機的硬碟為000002.vmdk,正常的快照合并時,應該先将3合并到2,再将2合并到1,再将1合并到原始盤,隻是合并到2的時候就關機了,是以編号混亂。按照此思路,修改000001.vmdk檔案,
将父盤CID(9b5a6f9f)修改為原始盤的CID(95bd0757),并将parentFileNameHint直接指向到原始盤..vmdk,修改後的000001.vmdk資訊如下:
CID=9b5a6f9f
parentCID=95bd0757
parentFileNameHint="abc..vmdk"
9、按照上述方式,果然回到最新狀态,隻不過打開虛拟後裡面的部分檔案夾損壞,這次運氣比較好話,最重要的幾個檔案和資料庫是最新的,有些檔案夾無法打開,比原始盤的效果更好了。
本文轉自 lorysun 51CTO部落格,原文連結:http://blog.51cto.com/lorysun/1227198