Xen Server虛擬機數據丟失的恢復過程
因服務器突然斷電原因導致Xen Server服務器中一臺VPS(即Xen Server虛擬機)不可用,虛擬磁盤文件丟失。硬件環境是Dell 720服務器配戴一張H710P的RAID卡,由4塊希捷2T STAT硬盤組成的RAID 10,上層環境是Xen Server 6.2版本操作系統,虛擬機是Windows Server 2003系統,10G系統盤 + 5G數據盤兩個虛擬機磁盤,上層是Web服務器(ASP + SQL 2005的網站架構)。
分析故障原因
為確保客戶原始數據的安全必須先將客戶的數據盤連接到恢復環境服務器上準備對數據進行鏡像備份,這一步中需要準備超過客戶硬盤總容量的存儲空間將數據以底層扇區的方式進行鏡像備份。
如下圖:
根據未被更新的LVM信息找到了虛擬磁盤的數據區域,發現該區域的數據已被破壞。分析後發現造成虛擬機不可用的最終原因是因為虛擬機的虛擬磁盤被破壞,從而導致虛擬機中的操作系統和數據丟失。而導致這種情況的發生很有可能是虛擬機遭遇網絡×××或hack***後留下惡意程序造成的。仔細核對這片區域後發現,雖然該區域有很多數據被破壞了,但還是發現了很多數據庫的頁碎片。因此可以嘗試將許多數據庫的頁碎片拼成一個可用的數據庫。
1、實施方案一
根據RAR壓縮包的結構可以找到很多壓縮包的數據開始位置,而RAR壓縮包文件的第一個扇區中會記錄此RAR的文件名。因此根據從客戶那裏得知備份數據庫的壓縮包文件名和目前找到的壓縮包位置的文件名相匹配,即可找到備份數據庫壓縮包的開始位置。找到壓縮包的位置後仔細分析這片區域的數據,然後將此區域的數據恢復出來重命名為一個RAR格式的壓縮文件。然後嘗試解壓此壓縮包,發現解壓報錯。
報錯如下圖所示:
仔細分析恢復出來的壓縮包發現中有部分數據被破壞了,因此解壓的時候報錯。嘗試使用RAR的修復工具看能否忽略錯誤,解壓部分數據。結果修復完成之後解壓的數據庫只有網站的部分代碼,並沒有數據庫的備份文件。因此可以判斷數據的備份文件在RAR壓縮包中是損壞的。
2、實施方案二
由於方案一並沒有將數據庫恢復出來,因此采用方案二來恢復數據。根據SQL Server數據庫的結構去底層分析數據庫的開始位置,在數據庫的結構中,第9個頁會記錄本數據庫的數據庫名。因此在客戶那裏獲取數據庫的名稱之後,再分析底層找到此數據庫的開始位置。因為在數據庫的每個頁中都會記錄數據庫頁編號以及文件號,所以可以根據這些特征編寫程序去底層掃描符合數據庫頁的數據。
然後將掃描出來的碎片按順序重組成一個完整MDF文件,再通過MDF校驗程序檢測整個MDF文件是否完整。
重建的MDF文件如下:
驗證數據
檢測沒問題之後再搭建數據庫環境,將重組後的數據庫附加到搭建好的數據庫環境中。然後查詢相關表數據是否正常,查詢最新數據是否存在。
截圖如下:
虛擬機數據恢復總結
由於數據庫需要結合網站代碼才能更好的驗證數據庫的完整性。客戶從開發商裏拿到了網站代碼搭建好了環境,然後將恢復好的數據庫發給用戶。經用戶驗證後,數據庫沒問題,通過拼數據庫碎片的方式成功將數據庫恢復完成,整個數據恢復成功。
Xen Server虛擬機數據丟失的恢復過程