通過拚數據庫碎片的方式恢複虛擬機磁盤文件丟失問題
背景概述
由於服務器突然斷電,造成我公司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的網站架構)。通過電話聯係到北亞數據恢複中心進行恢複,同時派兩名同事駐場。
分析故障原因
我們的數據盤首先被連接到北亞恢複環境服務器上,然後超過硬盤總容量的空間將數據盤以磁盤底層扇區的方式鏡像到備份空間上。
由於Xen Server服務器中虛擬機的磁盤都是以LVM的結構存放的,(即每個虛擬機的虛擬磁盤都是一個LV,並且虛擬磁盤的模式為精簡模式。)LVM的相關信息在Xen Server中都有記載,查看“/etc/lvm/backup/frombtye.com “下LVM的相關信息發現並沒有存在損壞的虛擬磁盤信息,因此可以斷定LVM的信息已經被更新。接著分析底層看能否找到未被更新的LVM信息,果不其然在底層發現了還未更新的LVM信息。
圖1:
根據未被更新的LVM信息找到了虛擬磁盤的數據區域,但遺憾的是該區域的數據已被破壞。分析後發現造成虛擬機不可用的最終原因是因為虛擬機的虛擬磁盤被破壞,從而導致虛擬機中的操作係統和數據丟失。而導致這種情況的發生很有可能是虛擬機遭遇網絡攻擊或hack入侵後留下惡意程序造成的。仔細核對這片區域後發現,雖然該區域有很多數據被破壞了,但還是發現了很多數據庫的頁碎片。因此可以嚐試將許多數據庫的頁碎片拚成一個可用的數據庫。
處理辦法:
1、實施方案一
按照方案一的思路進行底層分析,根據RAR壓縮包的結構可以找到很多壓縮包的數據開始位置,而RAR壓縮包文件的第一個扇區中會記錄此RAR的文件名。因此根據我們提供的備份數據庫的壓縮包文件名和目前找到的壓縮包位置的文件名相匹配,即可找到備份數據庫壓縮包的開始位置。找到壓縮包的位置後仔細分析這片區域的數據,然後將此區域的數據恢複出來重命名為一個RAR格式的壓縮文件。然後嚐試解壓此壓縮包,發現解壓報錯。
圖2:
解壓報錯的原因是有部分數據被破壞了。接著開始嚐試使用RAR的修複工具看能否忽略錯誤解壓部分數據,結果修複完成之後解壓的數據庫隻有網站的部分代碼,並沒有數據庫的備份文件。因此可以判斷數據的備份文件在RAR壓縮包中是損壞的。
圖3:
2、實施方案二
由於方案一並沒有將數據庫恢複出來,所以又采取了另一方案。根據SQL Server數據庫的結構去底層分析數據庫的開始位置,在數據庫的結構中,第9個頁會記錄本數據庫的數據庫名。因此在提供了數據庫的名稱之後,再分析底層找到此數據庫的開始位置。因為在數據庫的每個頁中都會記錄數據庫頁編號以及文件號,所以可以根據這些特征編寫程序去底層掃描符合數據庫頁的數據。
然後將掃描出來的碎片按順序重組成一個完整MDF文件,再通過MDF校驗程序檢測整個MDF文件是否完整。
圖4:
3、驗證數據
檢測沒問題之後再搭建數據庫環境,將重組後的數據庫附加到搭建好的數據庫環境中。然後查詢相關表數據是否正常,查詢最新數據是否存在。
圖5:
4、結論
由於數據庫需要結合網站代碼才能更好的驗證數據庫的完整性。我們又開發商處拿到了網站代碼搭建好了環境,然後將恢複好的數據庫發送給我們驗證,一切正常,通過拚數據庫碎片的方式成功將數據庫恢複完成,整個數據恢複成功。
最後更新:2017-08-13 22:42:23