背景概述
由于伺服器突然斷電,造成我公司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、結論
由于資料庫需要結合網站代碼才能更好的驗證資料庫的完整性。我們又開發商處拿到了網站代碼搭建好了環境,然後将恢複好的資料庫發送給我們驗證,一切正常,通過拼資料庫碎片的方式成功将資料庫恢複完成,整個資料恢複成功。