故障描述
1、硬體架構概述
伺服器:Dell 720伺服器配戴一張H710P的RAID卡。
存儲陣列:由4塊希捷2T STAT硬碟組成的RAID 10。
作業系統:Xen Server 6.2版本。
2、故障虛拟機概述
作業系統:Windows Server 2003。
應用:Web伺服器(ASP + SQL 2005的網站架構)。
虛拟磁盤:10G系統盤 + 5G資料盤。
故障描述:因特殊原因導緻Xen Server伺服器中一台VPS(即Xen Server虛拟機)不可用,虛拟磁盤中資料丢失。
故障分析
1、備份資料;先将客戶的資料盤連接配接到恢複環境伺服器上,然後準備比客戶資料總容量還要大的空間。将客戶資料盤以磁盤底層扇區的方式鏡像到準備的空間上,以確定客戶的資料安全。
2、分析故障原因;仔細分析底層資料發現Xen Server伺服器中虛拟機的磁盤都是以LVM的結構存放的,即每個虛拟機的虛拟磁盤都是一個LV,并且虛拟磁盤的模式是精簡模式的。LVM的相關資訊在Xen Server中都有記載,檢視“/etc/lvm/backup/ “下LVM的相關資訊發現并沒有存在損壞的虛拟磁盤資訊,是以可以斷定LVM的資訊已經被更新了。接着分析底層看能否找到未被更新的LVM資訊,果不其然在底層發現了還未更新的LVM資訊。如下圖:
圖一:
根據未被更新的LVM資訊找到了虛拟磁盤的資料區域,發現該區域的資料已被破壞。分析後發現造成虛拟機不可用的最終原因是因為虛拟機的虛拟磁盤被破壞,進而導緻虛拟機中的作業系統和資料丢失。而導緻這種情況的發生很有可能是虛拟機遭遇網絡攻擊或hack入侵後留下惡意程式造成的。仔細核對這片區域後發現,雖然該區域有很多資料被破壞了,但還是發現了很多資料庫的頁碎片。是以可以嘗試将許多資料庫的頁碎片拼成一個可用的資料庫。
解決方案
1、方案一:恢複資料庫備份;根據客戶描述,資料庫在4月份做過一次備份,并将這個資料庫備份檔案和網站代碼一起壓縮到一個RAR的壓縮包中。是以隻需要恢複這個壓縮包即可恢複這個備份的資料庫和網站的源代碼。
2、方案二:拼資料庫碎片;由于資料區被破壞,是以隻能在底層根據資料庫的結構将将資料庫的碎片按照原有的順序都拼接起來,然後做資料庫的修複以及資料庫的校驗即可恢複此資料庫。
恢複資料
1、實施方案一;按照方案一的思路進行底層分析,根據RAR壓縮包的結構可以找到很多壓縮包的資料開始位置,而RAR壓縮封包件的第一個扇區中會記錄此RAR的檔案名。是以根據從客戶那裡得知備份資料庫的壓縮封包件名和目前找到的壓縮包位置的檔案名相比對,即可找到備份資料庫壓縮包的開始位置。找到壓縮包的位置後仔細分析這片區域的資料,然後将此區域的資料恢複出來重命名為一個RAR格式的壓縮檔案。然後嘗試解壓此壓縮包,發現解壓報錯。
圖二:
仔細分析恢複出來的壓縮包發現中有部分資料被破壞了,是以解壓的時候報錯。嘗試使用RAR的修複工具看能否忽略錯誤,解壓部分資料。結果修複完成之後解壓的資料庫隻有網站的部分代碼,并沒有資料庫的備份檔案。是以可以判斷資料的備份檔案在RAR壓縮包中是損壞的。
圖三:如下是解壓出來的部分網站代碼。
<a href="https://s3.51cto.com/wyfs02/M00/8F/42/wKiom1jY0yawmns5AAH8oT71hi0110.png-wh_500x0-wm_3-wmp_4-s_2671730204.png" target="_blank"></a>
2、實施方案二:由于方案一并沒有将資料庫恢複出來,是以采用方案二來恢複資料。根據SQL Server資料庫的結構去底層分析資料庫的開始位置,在資料庫的結構中,第9個頁會記錄本資料庫的資料庫名。是以在客戶那裡擷取資料庫的名稱之後,再分析底層找到此資料庫的開始位置。因為在資料庫的每個頁中都會記錄資料庫頁編号以及檔案号,是以可以根據這些特征編寫程式去底層掃描符合資料庫頁的資料。
然後将掃描出來的碎片按順序重組成一個完整MDF檔案,再通過MDF校驗程式檢測整個MDF檔案是否完整。重建的MDF檔案如下:
圖四:
<a href="https://s2.51cto.com/wyfs02/M00/8F/42/wKiom1jY0zyiC_xCAAFA0HVLD_U398.jpg-wh_500x0-wm_3-wmp_4-s_361822238.jpg" target="_blank"></a>
3、搭建環境驗證資料
檢測沒問題之後再由我們的資料庫工程師搭建資料庫環境,将重組後的資料庫附加到搭建好的資料庫環境中。然後查詢相關表資料是否正常,查詢最新資料是否存在。截圖如下:
圖五:
<a href="https://s4.51cto.com/wyfs02/M00/8F/40/wKioL1jY01_QjeWdAARqZoKWd2E793.png-wh_500x0-wm_3-wmp_4-s_3617393127.png" target="_blank"></a>
驗證資料
由于資料庫需要結合網站代碼才能更好的驗證資料庫的完整性,而網站源代碼大部分都被破壞了,備份中的源代碼也隻有部分才可以用。客戶從開發商裡拿到了網站代碼搭建好了環境,然後将恢複好的資料庫發給使用者。經使用者驗證後,資料庫沒問題。
恢複總結
由于客戶資料被非法破壞,是以恢複難度很大。底層大量的資料都被破壞了,但是客戶重要的是SQL Server資料庫,是以隻需要恢複資料庫檔案即可。是以通過拼資料庫碎片的方式成功将資料庫恢複完成,整個資料恢複成功。
本文轉自 宋國建 51CTO部落格,原文連結:http://blog.51cto.com/sun510/1910822,如需轉載請自行聯系原作者