Xen server虛擬化中虛擬機(jī)磁盤文件丟失的處理辦法
描述
因服務(wù)器突然斷電原因?qū)е耎en Server服務(wù)器中一臺(tái)VPS(即Xen Server虛擬機(jī))不可用,虛擬磁盤文件丟失,通過電話聯(lián)系北亞數(shù)據(jù)來進(jìn)行恢復(fù)。硬件環(huán)境是Dell 720服務(wù)器配戴一張H710P的RAID卡,由4塊希捷2T STAT硬盤組成的RAID 10,上層環(huán)境是Xen Server 6.2版本操作系統(tǒng),虛擬機(jī)是Windows Server 2003系統(tǒng),10G系統(tǒng)盤 + 5G數(shù)據(jù)盤兩個(gè)虛擬機(jī)磁盤,上層是Web服務(wù)器(ASP + SQL 2005的網(wǎng)站架構(gòu))。
分析故障原因
將客戶的數(shù)據(jù)盤連接到北亞恢復(fù)環(huán)境服務(wù)器上,然后準(zhǔn)備超過客戶硬盤總?cè)萘康目臻g。將客戶數(shù)據(jù)盤以磁盤底層扇區(qū)的方式鏡像到備份空間上,以確保客戶的數(shù)據(jù)安全。
仔細(xì)分析底層數(shù)據(jù)發(fā)現(xiàn)Xen Server服務(wù)器中虛擬機(jī)的磁盤都是以LVM的結(jié)構(gòu)存放的,即每個(gè)虛擬機(jī)的虛擬磁盤都是一個(gè)LV,并且虛擬磁盤的模式是精簡(jiǎn)模式的。LVM的相關(guān)信息在Xen Server中都有記載,查看“/etc/lvm/backup/frombtye.com “下LVM的相關(guān)信息發(fā)現(xiàn)并沒有存在損壞的虛擬磁盤信息,因此可以斷定LVM的信息已經(jīng)被更新了。接著分析底層看能否找到未被更新的LVM信息,果不其然在底層發(fā)現(xiàn)了還未更新的LVM信息。如下圖:
根據(jù)未被更新的LVM信息找到了虛擬磁盤的數(shù)據(jù)區(qū)域,發(fā)現(xiàn)該區(qū)域的數(shù)據(jù)已被破壞。分析后發(fā)現(xiàn)造成虛擬機(jī)不可用的最終原因是因?yàn)樘摂M機(jī)的虛擬磁盤被破壞,從而導(dǎo)致虛擬機(jī)中的操作系統(tǒng)和數(shù)據(jù)丟失。而導(dǎo)致這種情況的發(fā)生很有可能是虛擬機(jī)遭遇網(wǎng)絡(luò)攻擊或hack入侵后留下惡意程序造成的。仔細(xì)核對(duì)這片區(qū)域后發(fā)現(xiàn),雖然該區(qū)域有很多數(shù)據(jù)被破壞了,但還是發(fā)現(xiàn)了很多數(shù)據(jù)庫(kù)的頁(yè)碎片。因此可以嘗試將許多數(shù)據(jù)庫(kù)的頁(yè)碎片拼成一個(gè)可用的數(shù)據(jù)庫(kù)。
處理辦法:
1、實(shí)施方案一
按照方案一的思路進(jìn)行底層分析,根據(jù)RAR壓縮包的結(jié)構(gòu)可以找到很多壓縮包的數(shù)據(jù)開始位置,而RAR壓縮包文件的第一個(gè)扇區(qū)中會(huì)記錄此RAR的文件名。因此根據(jù)從客戶那里得知備份數(shù)據(jù)庫(kù)的壓縮包文件名和目前找到的壓縮包位置的文件名相匹配,即可找到備份數(shù)據(jù)庫(kù)壓縮包的開始位置。找到壓縮包的位置后仔細(xì)分析這片區(qū)域的數(shù)據(jù),然后將此區(qū)域的數(shù)據(jù)恢復(fù)出來重命名為一個(gè)RAR格式的壓縮文件。然后嘗試解壓此壓縮包,發(fā)現(xiàn)解壓報(bào)錯(cuò)。
報(bào)錯(cuò)如下圖所示:
仔細(xì)分析恢復(fù)出來的壓縮包發(fā)現(xiàn)中有部分?jǐn)?shù)據(jù)被破壞了,因此解壓的時(shí)候報(bào)錯(cuò)。嘗試使用RAR的修復(fù)工具看能否忽略錯(cuò)誤,解壓部分?jǐn)?shù)據(jù)。結(jié)果修復(fù)完成之后解壓的數(shù)據(jù)庫(kù)只有網(wǎng)站的部分代碼,并沒有數(shù)據(jù)庫(kù)的備份文件。因此可以判斷數(shù)據(jù)的備份文件在RAR壓縮包中是損壞的。
如下是解壓出來的部分網(wǎng)站代碼。
2、實(shí)施方案二
由于方案一并沒有將數(shù)據(jù)庫(kù)恢復(fù)出來,因此采用方案二來恢復(fù)數(shù)據(jù)。根據(jù)SQL Server數(shù)據(jù)庫(kù)的結(jié)構(gòu)去底層分析數(shù)據(jù)庫(kù)的開始位置,在數(shù)據(jù)庫(kù)的結(jié)構(gòu)中,第9個(gè)頁(yè)會(huì)記錄本數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)名。因此在客戶那里獲取數(shù)據(jù)庫(kù)的名稱之后,再分析底層找到此數(shù)據(jù)庫(kù)的開始位置。因?yàn)樵跀?shù)據(jù)庫(kù)的每個(gè)頁(yè)中都會(huì)記錄數(shù)據(jù)庫(kù)頁(yè)編號(hào)以及文件號(hào),所以可以根據(jù)這些特征編寫程序去底層掃描符合數(shù)據(jù)庫(kù)頁(yè)的數(shù)據(jù)。
然后將掃描出來的碎片按順序重組成一個(gè)完整MDF文件,再通過MDF校驗(yàn)程序檢測(cè)整個(gè)MDF文件是否完整。重建的MDF文件如下:
3、驗(yàn)證數(shù)據(jù)
檢測(cè)沒問題之后再由我們的數(shù)據(jù)庫(kù)工程師搭建數(shù)據(jù)庫(kù)環(huán)境,將重組后的數(shù)據(jù)庫(kù)附加到搭建好的數(shù)據(jù)庫(kù)環(huán)境中。然后查詢相關(guān)表數(shù)據(jù)是否正常,查詢最新數(shù)據(jù)是否存在。截圖如下:
4、結(jié)論
由于數(shù)據(jù)庫(kù)需要結(jié)合網(wǎng)站代碼才能更好的驗(yàn)證數(shù)據(jù)庫(kù)的完整性。客戶從開發(fā)商里拿到了網(wǎng)站代碼搭建好了環(huán)境,然后將恢復(fù)好的數(shù)據(jù)庫(kù)發(fā)給用戶。經(jīng)用戶驗(yàn)證后,數(shù)據(jù)庫(kù)沒問題,通過拼數(shù)據(jù)庫(kù)碎片的方式成功將數(shù)據(jù)庫(kù)恢復(fù)完成,整個(gè)數(shù)據(jù)恢復(fù)成功。