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