vmware虛擬化故障虛擬磁碟丟失恢復辦法
阿新 • • 發佈:2019-01-01
Dell R710系列伺服器(用於VMware虛擬主機),Dell MD 3200系列儲存(用於存放虛擬機器檔案),VMware ESXi 5.5版本,因意外斷電,導致某臺虛擬機器不能正常啟動,檢視虛擬機器的配置檔案時發現此虛擬機器的配置檔案除了磁碟檔案以外其他配置檔案全部丟失。此時xxx-flat.vmdk磁碟檔案和xxx-000001-delta.vmdk快照檔案還存在。找VMware工程師診斷後,嘗試新建一個虛擬機器來解決故障,但發現ESXi儲存空間不足。因此就將故障虛擬機器下的xxx-flat.vmdk磁碟檔案刪除了,這時ESXi儲存就有200多G的剩餘空間了,而後VMware工程師就重新建了一個40G的虛擬機器,並且分配了固定大小的虛擬磁碟,Windows
Server 2008(虛擬機器作業系統),資料庫應用環境SQL Server 2008資料庫伺服器(管理巨集橋和索菲兩套應用資料庫),虛擬機器磁碟容量200G資料盤(精簡模式)+ 160G快照資料盤。
1、備份資料
在VMware vSphere Client上將掛載的RD220i儲存中VMFS卷以正常方式解除安裝掉。然後將RD220i儲存上的VMFS卷通過網線的方式連線到備份伺服器上,接著使用專業的工具將整個VMFS卷以扇區的方式映象到已準備的備份空間上,以確保客戶的資料安全,之後的分析和恢復操作均在備份的資料上進行。
2、分析故障原因
仔細分析VMFS卷的底層資料發現,ESXi主機的突然斷電導致故障虛擬機器目錄下的目錄項出現破壞,但是這種破壞不會影響虛擬機器的重要資料,只是破壞了檔案的目錄項而已,可以通過人工修復即可解決。而人為刪除某個檔案的話,則目錄項對應的資料區索引會被清掉,也不會影響刪除檔案的實際資料。這種情況可根據刪除虛擬磁碟檔案中的檔案系統以及虛擬磁碟中的檔案型別在VMFS卷自由空間中進行碎片匹配和合並,最終也可恢復刪除的虛擬磁碟檔案。但是在上述的兩種情況之下又新建了一臺虛擬機器,並且分配了虛擬磁碟。經過仔細分析發現分配的40G虛擬磁碟已經全部清零了(在建立虛擬磁碟的時候會選擇建立磁碟的型別),也是這個新建的虛擬機器所佔用的磁碟空間全部被清零。 如果新虛擬磁碟佔用了刪除虛擬機器磁碟所釋放的空間,那麼此部分空間將無法恢復的。
如下圖:(是故障虛擬機器的目錄項區域)
圖一:
實施方向
1、實施方向一:恢復刪除的VMDK檔案
根據刪除虛擬磁碟檔案中的檔案系統以及虛擬磁碟中的檔案型別在VMFS卷的自由空間中進行碎片匹配和合並,最終恢復刪除的虛擬磁碟檔案,再利用快照合併程式將快照檔案和恢復的虛擬磁碟檔案合併成一個完整的虛擬磁碟檔案,然後利用專業的檔案系統解釋工具解釋虛擬磁碟檔案中的所有檔案。
2、實施方向二:恢復MSSQL資料庫檔案
如果方向一實施的效果不太理想,接下來可根據SQL Server資料庫檔案的結構,對VMFS卷自由空間中符合SQL Server頁結構的資料區域進行統計、分析和聚合,最終生成一個可以正常使用的.MDF格式的檔案。
3、實施方向三:恢復MSSQL資料庫備份檔案
由於資料庫每天都在做備份,雖然每天一次增量備份,15天一次全部備份。但是如果上述兩種方案實施過後還有一些資料庫無法恢復的話,則只能利用恢復備份檔案來恢復資料庫了。根據掌握的備份檔案.bak的結構,對VMFS卷自由空間中符合SQL Server備份檔案結構的資料區域進行統計、分析和聚合,最終生成一個可以正常匯入到SQL Server資料庫中.BAK格式的檔案。
恢復過程
1、方向一實施過程
按照方向一的思路進行底層分析,根據VMFS卷的結構以及刪除虛擬磁碟的檔案系統資訊,在底層的自由空間中掃描符合刪除虛擬機器磁碟的區域,並統計其數量和大小是否符合刪除虛擬磁碟的大小。再根據虛擬磁碟中的檔案系統的資訊將這些掃描到的碎片進行排列組合,結果發現中間有好多碎片缺失,仔細再對這些缺失的碎片進行重新掃描,發現這些碎片確實沒有找到。接著將掃描到的碎片安照虛擬磁碟原本的順序重組,對於沒有找到的碎片暫且留空。接下來利用虛擬磁碟快照程式將重組好的父盤和快照盤進行合併,生成一個新的虛擬磁碟。再用專業工具解釋虛擬磁碟中的檔案系統,因缺失好多資料,檔案系統解釋過程中報好多錯誤,提示某些檔案損壞。
解釋完的檔案系統如下圖:
圖二:
在解析完檔案系統後發現沒有找到原始的資料庫檔案,而巨集橋備份和索菲備份這兩個目錄的目錄結構正常。但是在嘗試將備份匯入資料庫中時,資料庫匯入程式提示報錯。
巨集橋備份和索菲備份的部分目錄結構如下圖:
匯入.BAK檔案報錯資訊如下:
圖五:
2、方向二實施過程
由於方向一中並沒有將原始的資料庫檔案恢復出來,並且其中好多備份檔案都無法正常使用。因此需採用第二套方案來恢復尚未恢復的資料庫檔案。根據SQL Server資料庫的結構去自由空間中找到資料庫的開始位置。在資料庫的結構中,資料庫的第9個頁會記錄本資料庫的資料庫名。因此根據這個特徵可以核對此資料庫的頭部頁是否是正在查詢的。並且資料庫的每個頁中都會記錄資料庫頁編號以及檔案號,所以根據這些特徵編寫資料庫掃描程式,然後利用程式去底層掃描所有符合資料庫頁的資料碎片。接著將掃描出來的碎片按順序重組成一個完整MDF檔案,再通過MDF校驗程式檢測整個MDF檔案是否完整。在整個校驗過程中,只有cl_system3.dbf和erp42_jck.dbf因有部分碎片沒有找到外,其餘資料庫均校驗成功。校驗完的MDF檔案如下:
圖六:
cl_system3.dbf和erp42_jck.dbf因底層有很多碎片沒有找不到(初步懷疑可能被覆蓋),因此校驗不通過。如下是cl_system3.dbf檔案中某個碎片丟失的區域:
圖七:
3、方向三實施過程
由於上述兩個方向實施完後,並沒有將所有的資料庫檔案全部恢復出來,還有cl_system3.dbf和erp42_jck.dbf這裡個檔案因缺失部分頁導致其無法正常使用。因此需要採用備份來恢復這兩個資料庫檔案,但是在檢查完這兩個檔案的備份後發現cl_system3.dbf的3月30號全部備份因備份機制故障導致沒有備份出來,而erp42_jck.dbf的3月份備份全部沒有,只有4月份的全部增量備份,如下圖:
圖八:
由於erp42_jck.dbf檔案中只缺失少量的頁,因此可以根據缺失的頁號在增量備份中查詢,再將找到的頁補到erp42_jck.dbf檔案中,這樣可以恢復一部分丟失的資料庫頁。最終補完後還是缺失部分頁,無法正常使用。但是可以通過自主開發的資料庫解析程式將erp42_jck.dbf檔案中使用者比較重要的幾十張表成功匯出,併成功匯入到新建的資料庫中。
驗證資料
在本地伺服器中搭建和原始環境一樣的資料庫環境(SQL Server 2008),由客戶通過Teamviewer遠端工具連線到驗證伺服器,並安裝上層巨集橋應用軟體。再由客戶安排工程驗證資料庫是否完整,經過仔細的驗證後,資料庫恢復基本沒問題。上層應用可以正常執行,資料記錄也都基本沒有缺失,資料恢復成功。
資料庫成功掛載,如下圖:
圖九:
恢復總結
由於對SQL Server資料庫底層結構足夠了解,並且有處理過類似故障型別的經驗。所以整個恢復過程中還算比較順利。資料庫均正常恢復,並且驗證沒有問題,整個資料恢復成功。
1、備份資料
在VMware vSphere Client上將掛載的RD220i儲存中VMFS卷以正常方式解除安裝掉。然後將RD220i儲存上的VMFS卷通過網線的方式連線到備份伺服器上,接著使用專業的工具將整個VMFS卷以扇區的方式映象到已準備的備份空間上,以確保客戶的資料安全,之後的分析和恢復操作均在備份的資料上進行。
2、分析故障原因
仔細分析VMFS卷的底層資料發現,ESXi主機的突然斷電導致故障虛擬機器目錄下的目錄項出現破壞,但是這種破壞不會影響虛擬機器的重要資料,只是破壞了檔案的目錄項而已,可以通過人工修復即可解決。而人為刪除某個檔案的話,則目錄項對應的資料區索引會被清掉,也不會影響刪除檔案的實際資料。這種情況可根據刪除虛擬磁碟檔案中的檔案系統以及虛擬磁碟中的檔案型別在VMFS卷自由空間中進行碎片匹配和合並,最終也可恢復刪除的虛擬磁碟檔案。但是在上述的兩種情況之下又新建了一臺虛擬機器,並且分配了虛擬磁碟。經過仔細分析發現分配的40G虛擬磁碟已經全部清零了(在建立虛擬磁碟的時候會選擇建立磁碟的型別),也是這個新建的虛擬機器所佔用的磁碟空間全部被清零。 如果新虛擬磁碟佔用了刪除虛擬機器磁碟所釋放的空間,那麼此部分空間將無法恢復的。
如下圖:(是故障虛擬機器的目錄項區域)
圖一:
實施方向
1、實施方向一:恢復刪除的VMDK檔案
根據刪除虛擬磁碟檔案中的檔案系統以及虛擬磁碟中的檔案型別在VMFS卷的自由空間中進行碎片匹配和合並,最終恢復刪除的虛擬磁碟檔案,再利用快照合併程式將快照檔案和恢復的虛擬磁碟檔案合併成一個完整的虛擬磁碟檔案,然後利用專業的檔案系統解釋工具解釋虛擬磁碟檔案中的所有檔案。
2、實施方向二:恢復MSSQL資料庫檔案
如果方向一實施的效果不太理想,接下來可根據SQL Server資料庫檔案的結構,對VMFS卷自由空間中符合SQL Server頁結構的資料區域進行統計、分析和聚合,最終生成一個可以正常使用的.MDF格式的檔案。
3、實施方向三:恢復MSSQL資料庫備份檔案
由於資料庫每天都在做備份,雖然每天一次增量備份,15天一次全部備份。但是如果上述兩種方案實施過後還有一些資料庫無法恢復的話,則只能利用恢復備份檔案來恢復資料庫了。根據掌握的備份檔案.bak的結構,對VMFS卷自由空間中符合SQL Server備份檔案結構的資料區域進行統計、分析和聚合,最終生成一個可以正常匯入到SQL Server資料庫中.BAK格式的檔案。
恢復過程
1、方向一實施過程
按照方向一的思路進行底層分析,根據VMFS卷的結構以及刪除虛擬磁碟的檔案系統資訊,在底層的自由空間中掃描符合刪除虛擬機器磁碟的區域,並統計其數量和大小是否符合刪除虛擬磁碟的大小。再根據虛擬磁碟中的檔案系統的資訊將這些掃描到的碎片進行排列組合,結果發現中間有好多碎片缺失,仔細再對這些缺失的碎片進行重新掃描,發現這些碎片確實沒有找到。接著將掃描到的碎片安照虛擬磁碟原本的順序重組,對於沒有找到的碎片暫且留空。接下來利用虛擬磁碟快照程式將重組好的父盤和快照盤進行合併,生成一個新的虛擬磁碟。再用專業工具解釋虛擬磁碟中的檔案系統,因缺失好多資料,檔案系統解釋過程中報好多錯誤,提示某些檔案損壞。
解釋完的檔案系統如下圖:
圖二:
在解析完檔案系統後發現沒有找到原始的資料庫檔案,而巨集橋備份和索菲備份這兩個目錄的目錄結構正常。但是在嘗試將備份匯入資料庫中時,資料庫匯入程式提示報錯。
巨集橋備份和索菲備份的部分目錄結構如下圖:
圖三:
圖四:匯入.BAK檔案報錯資訊如下:
圖五:
2、方向二實施過程
由於方向一中並沒有將原始的資料庫檔案恢復出來,並且其中好多備份檔案都無法正常使用。因此需採用第二套方案來恢復尚未恢復的資料庫檔案。根據SQL Server資料庫的結構去自由空間中找到資料庫的開始位置。在資料庫的結構中,資料庫的第9個頁會記錄本資料庫的資料庫名。因此根據這個特徵可以核對此資料庫的頭部頁是否是正在查詢的。並且資料庫的每個頁中都會記錄資料庫頁編號以及檔案號,所以根據這些特徵編寫資料庫掃描程式,然後利用程式去底層掃描所有符合資料庫頁的資料碎片。接著將掃描出來的碎片按順序重組成一個完整MDF檔案,再通過MDF校驗程式檢測整個MDF檔案是否完整。在整個校驗過程中,只有cl_system3.dbf和erp42_jck.dbf因有部分碎片沒有找到外,其餘資料庫均校驗成功。校驗完的MDF檔案如下:
圖六:
cl_system3.dbf和erp42_jck.dbf因底層有很多碎片沒有找不到(初步懷疑可能被覆蓋),因此校驗不通過。如下是cl_system3.dbf檔案中某個碎片丟失的區域:
圖七:
3、方向三實施過程
由於上述兩個方向實施完後,並沒有將所有的資料庫檔案全部恢復出來,還有cl_system3.dbf和erp42_jck.dbf這裡個檔案因缺失部分頁導致其無法正常使用。因此需要採用備份來恢復這兩個資料庫檔案,但是在檢查完這兩個檔案的備份後發現cl_system3.dbf的3月30號全部備份因備份機制故障導致沒有備份出來,而erp42_jck.dbf的3月份備份全部沒有,只有4月份的全部增量備份,如下圖:
圖八:
由於erp42_jck.dbf檔案中只缺失少量的頁,因此可以根據缺失的頁號在增量備份中查詢,再將找到的頁補到erp42_jck.dbf檔案中,這樣可以恢復一部分丟失的資料庫頁。最終補完後還是缺失部分頁,無法正常使用。但是可以通過自主開發的資料庫解析程式將erp42_jck.dbf檔案中使用者比較重要的幾十張表成功匯出,併成功匯入到新建的資料庫中。
驗證資料
在本地伺服器中搭建和原始環境一樣的資料庫環境(SQL Server 2008),由客戶通過Teamviewer遠端工具連線到驗證伺服器,並安裝上層巨集橋應用軟體。再由客戶安排工程驗證資料庫是否完整,經過仔細的驗證後,資料庫恢復基本沒問題。上層應用可以正常執行,資料記錄也都基本沒有缺失,資料恢復成功。
資料庫成功掛載,如下圖:
圖九:
恢復總結
由於對SQL Server資料庫底層結構足夠了解,並且有處理過類似故障型別的經驗。所以整個恢復過程中還算比較順利。資料庫均正常恢復,並且驗證沒有問題,整個資料恢復成功。