1. 程式人生 > >【長文慎點】IBM X3850服務器刪除並重建虛擬機恢復過程

【長文慎點】IBM X3850服務器刪除並重建虛擬機恢復過程

文件合並 效果 難度 數據覆蓋 可能 很多 存儲陣列 排列 編號

一、服務器故障描述

1、架構環境概述
服務器:IBM X 3850系列服務器(用於VMware虛擬主機)。
存儲陣列:柏科RD220i系列存儲(用於存放虛擬機文件)。
操作系統:VMware ESXi 5.5版本。
2、故障虛擬機概述
操作系統:Windows Server 2008(虛擬機操作系統)。
應用環境:SQL Server 2008數據庫服務器(管理宏橋和索菲兩套應用數據庫)。
虛擬磁盤:200G數據盤(精簡模式)+ 160G快照數據盤。
故障描述:因意外斷電,導致某臺虛擬機不能正常啟動,查看虛擬機的配置文件時發現此虛擬機的配置文件除了磁盤文件以外其他配置文件全部丟失。此時xxx-flat.vmdk磁盤文件和xxx-000001-delta.vmdk快照文件還存在。找VMware工程師診斷後,嘗試新建一個虛擬機來解決故障,但發現ESXi存儲空間不足。因此就將故障虛擬機下的xxx-flat.vmdk磁盤文件刪除了,這時ESXi存儲就有200多G的剩余空間了,而後VMware工程師就重新建了一個40G的虛擬機,並且分配了固定大小的虛擬磁盤。

二、故障分析

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因有部分碎片沒有找到外,其余數據庫均校驗成功。
圖六:技術分享圖片

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數據庫底層結構足夠了解,並且有處理過類似故障類型的經驗。所以整個恢復過程中還算比較順利。數據庫均正常恢復,並且驗證沒有問題,整個數據恢復成功。

【長文慎點】IBM X3850服務器刪除並重建虛擬機恢復過程