因意外斷電,導(dǎo)致某臺(tái)虛擬機(jī)不能正常啟動(dòng),查看虛擬機(jī)的配置文件時(shí)發(fā)現(xiàn)此虛擬機(jī)的配置文件除了磁盤文件以外其他配置文件全部丟失。此時(shí)xxx-flat.vmdk磁盤文件和xxx-000001-delta.vmdk快照文件還存在。找VMware工程師診斷后,嘗試新建一個(gè)虛擬機(jī)來(lái)解決故 障,但發(fā)現(xiàn)ESXi存儲(chǔ)空間不足。因此就將故障虛擬機(jī)下的xxx-flat.vmdk磁盤文件刪除了,這時(shí)ESXi存儲(chǔ)就有200多G的剩余空間了,而后VMware工程師就重新建了一個(gè)40G的虛擬機(jī),并且分配了固定大小的虛擬磁盤。
因意外斷電,導(dǎo)致某臺(tái)虛擬機(jī)不能正常啟動(dòng),查看虛擬機(jī)的配置文件時(shí)發(fā)現(xiàn)此虛擬機(jī)的配置文件除了磁盤文件以外其他配置文件全部丟失。此時(shí)xxx-flat.vmdk磁盤文件和xxx-000001-delta.vmdk快照文件還存在。找VMware工程師診斷后,嘗試新建一個(gè)虛擬機(jī)來(lái)解決故 障,但發(fā)現(xiàn)ESXi存儲(chǔ)空間不足。因此就將故障虛擬機(jī)下的xxx-flat.vmdk磁盤文件刪除了,這時(shí)ESXi存儲(chǔ)就有200多G的剩余空間了,而后VMware工程師就重新建了一個(gè)40G的虛擬機(jī),并且分配了固定大小的虛擬磁盤。
備份數(shù)據(jù)
在VMware vSphere Client上將掛載的RD220i存儲(chǔ)中VMFS卷以正常方式卸載掉。然后將RD220i存儲(chǔ)上的VMFS卷通過(guò)網(wǎng)線的方式連接到備份
服務(wù)器上,接著使用專業(yè)的工具將整個(gè)VMFS卷以扇區(qū)的方式鏡像到已準(zhǔn)備的備份空間上,以確??蛻舻?a href="/tag/25376" target="blank">數(shù)據(jù)安全,之后的分析和恢復(fù)操作均在備份的數(shù)據(jù)上進(jìn)行。
分析故障原因
仔細(xì)分析VMFS卷的底層數(shù)據(jù)發(fā)現(xiàn),ESXi
主機(jī)的突然斷電導(dǎo)致故障虛擬機(jī)目錄下的目錄項(xiàng)出現(xiàn)破壞,但是這種破壞不會(huì)影響虛擬機(jī)的重要數(shù)據(jù),只是破壞了文件的目錄項(xiàng)而已,可以通過(guò)人工修復(fù)即可解決。而人為刪除某個(gè)文件的話,則目錄項(xiàng)對(duì)應(yīng)的數(shù)據(jù)區(qū)索引會(huì)被清掉,也不會(huì)影響刪除文件的實(shí)際數(shù)據(jù)。這種情況可根據(jù)刪除虛擬磁盤文件中的文件系統(tǒng)以及虛擬磁盤中的文件類型在VMFS卷自由空間中進(jìn)行碎片匹配和合并,最終也可恢復(fù)刪除的虛擬磁盤文件。但是在上述的兩種情況之下又新建了一臺(tái)虛擬機(jī),并且分配了虛擬磁盤。經(jīng)過(guò)仔細(xì)分析發(fā)現(xiàn)分配的40G虛擬磁盤已經(jīng)全部清零了(在創(chuàng)建虛擬磁盤的時(shí)候會(huì)選擇創(chuàng)建磁盤的類型),也是這個(gè)新建的虛擬機(jī)所占用的磁盤空間全部被清零。 如果新虛擬磁盤占用了刪除虛擬機(jī)磁盤所釋放的空間,那么此部分空間將無(wú)法恢復(fù)的。
1、實(shí)施方向一:恢復(fù)刪除的VMDK文件
根據(jù)刪除虛擬磁盤文件中的文件系統(tǒng)以及虛擬磁盤中的文件類型在VMFS卷的自由空間中進(jìn)行碎片匹配和合并,最終恢復(fù)刪除的虛擬磁盤文件,再利用快照合并程序?qū)⒖煺瘴募突謴?fù)的虛擬磁盤文件合并成一個(gè)完整的虛擬磁盤文件,然后利用專業(yè)的文件系統(tǒng)解釋工具解釋虛擬磁盤文件中的所有文件。
2、實(shí)施方向二:恢復(fù)MSSQL數(shù)據(jù)庫(kù)文件
如果方向一實(shí)施的效果不太理想,接下來(lái)可根據(jù)SQL Server數(shù)據(jù)庫(kù)文件的結(jié)構(gòu),對(duì)VMFS卷自由空間中符合SQL Server頁(yè)結(jié)構(gòu)的數(shù)據(jù)區(qū)域進(jìn)行統(tǒng)計(jì)、分析和聚合,最終生成一個(gè)可以正常使用的.MDF格式的文件。
3、實(shí)施方向三:恢復(fù)MSSQL數(shù)據(jù)庫(kù)備份文件
由于數(shù)據(jù)庫(kù)每天都在做備份,雖然每天一次增量備份,15天一次全部備份。但是如果上述兩種方案實(shí)施過(guò)后還有一些數(shù)據(jù)庫(kù)無(wú)法恢復(fù)的話,則只能利用恢復(fù)備份文件來(lái)恢復(fù)數(shù)據(jù)庫(kù)了。根據(jù)掌握的備份文件.bak的結(jié)構(gòu),對(duì)VMFS卷自由空間中符合SQL Server備份文件結(jié)構(gòu)的數(shù)據(jù)區(qū)域進(jìn)行統(tǒng)計(jì)、分析和聚合,最終生成一個(gè)可以正常導(dǎo)入到SQL Server數(shù)據(jù)庫(kù)中.BAK格式的文件。
1、方向一實(shí)施過(guò)程
按照方向一的思路進(jìn)行底層分析,根據(jù)VMFS卷的結(jié)構(gòu)以及刪除虛擬磁盤的文件系統(tǒng)信息,在底層的自由空間中掃描符合刪除虛擬機(jī)磁盤的區(qū)域,并統(tǒng)計(jì)其數(shù)量和大小是否符合刪除虛擬磁盤的大小。再根據(jù)虛擬磁盤中的文件系統(tǒng)的信息將這些掃描到的碎片進(jìn)行排列組合,結(jié)果發(fā)現(xiàn)中間有好多碎片缺失,仔細(xì)再對(duì)這些缺失的碎片進(jìn)行重新掃描,發(fā)現(xiàn)這些碎片確實(shí)沒(méi)有找到。接著將掃描到的碎片安照虛擬磁盤原本的順序重組,對(duì)于沒(méi)有找到的碎片暫且留空。接下來(lái)利用虛擬磁盤快照程序?qū)⒅亟M好的父盤和快照盤進(jìn)行合并,生成一個(gè)新的虛擬磁盤。再用專業(yè)工具解釋虛擬磁盤中的文件系統(tǒng),因缺失好多數(shù)據(jù),文件系統(tǒng)解釋過(guò)程中報(bào)好多錯(cuò)誤,提示某些文件損壞。
在解析完文件系統(tǒng)后發(fā)現(xiàn)沒(méi)有找到原始的數(shù)據(jù)庫(kù)文件,而宏橋備份和索菲備份這兩個(gè)目錄的目錄結(jié)構(gòu)正常。但是在嘗試將備份導(dǎo)入數(shù)據(jù)庫(kù)中時(shí),數(shù)據(jù)庫(kù)導(dǎo)入程序提示報(bào)錯(cuò)。
方向二實(shí)施過(guò)程
由于方向一中并沒(méi)有將原始的數(shù)據(jù)庫(kù)文件恢復(fù)出來(lái),并且其中好多備份文件都無(wú)法正常使用。因此需采用第二套方案來(lái)恢復(fù)尚未恢復(fù)的數(shù)據(jù)庫(kù)文件。根據(jù)SQL Server數(shù)據(jù)庫(kù)的結(jié)構(gòu)去自由空間中找到數(shù)據(jù)庫(kù)的開(kāi)始位置。在數(shù)據(jù)庫(kù)的結(jié)構(gòu)中,數(shù)據(jù)庫(kù)的第9個(gè)頁(yè)會(huì)記錄本數(shù)據(jù)庫(kù)的數(shù)據(jù)庫(kù)名。因此根據(jù)這個(gè)特征可以核對(duì)此數(shù)據(jù)庫(kù)的頭部頁(yè)是否是正在查找的。并且數(shù)據(jù)庫(kù)的每個(gè)頁(yè)中都會(huì)記錄數(shù)據(jù)庫(kù)頁(yè)編號(hào)以及文件號(hào),所以根據(jù)這些特征編寫數(shù)據(jù)庫(kù)掃描程序,然后利用程序去底層掃描所有符合數(shù)據(jù)庫(kù)頁(yè)的數(shù)據(jù)碎片。接著將掃描出來(lái)的碎片按順序重組成一個(gè)完整MDF文件,再通過(guò)MDF校驗(yàn)程序檢測(cè)整個(gè)MDF文件是否完整。在整個(gè)校驗(yàn)過(guò)程中,只有cl_system3.dbf和erp42_jck.dbf因有部分碎片沒(méi)有找到外,其余數(shù)據(jù)庫(kù)均校驗(yàn)成功。
cl_system3.dbf和erp42_jck.dbf因底層有很多碎片沒(méi)有找不到(初步懷疑可能被覆蓋),因此校驗(yàn)不通過(guò)。
方向三實(shí)施過(guò)程
由于上述兩個(gè)方向?qū)嵤┩旰?,并沒(méi)有將所有的數(shù)據(jù)庫(kù)文件全部恢復(fù)出來(lái),還有cl_system3.dbf和erp42_jck.dbf這里個(gè)文件因缺失部分頁(yè)導(dǎo)致其無(wú)法正常使用。因此需要采用備份來(lái)恢復(fù)這兩個(gè)數(shù)據(jù)庫(kù)文件,但是在檢查完這兩個(gè)文件的備份后發(fā)現(xiàn)cl_system3.dbf的3月30號(hào)全部備份因備份機(jī)制故障導(dǎo)致沒(méi)有備份出來(lái),而erp42_jck.dbf的3月份備份全部沒(méi)有,只有4月份的全部增量備份。
由于erp42_jck.dbf文件中只缺失少量的頁(yè),因此可以根據(jù)缺失的頁(yè)號(hào)在增量備份中查找,再將找到的頁(yè)補(bǔ)到erp42_jck.dbf文件中,這樣可以恢復(fù)一部分丟失的數(shù)據(jù)庫(kù)頁(yè)。最終補(bǔ)完后還是缺失部分頁(yè),無(wú)法正常使用。但是可以通過(guò)自主開(kāi)發(fā)的數(shù)據(jù)庫(kù)解析程序?qū)rp42_jck.dbf文件中用戶比較重要的幾十張表成功導(dǎo)出,并成功導(dǎo)入到新建的數(shù)據(jù)庫(kù)中。
在本地服務(wù)器中搭建和原始環(huán)境一樣的數(shù)據(jù)庫(kù)環(huán)境(SQL Server 2008),由客戶通過(guò)Teamviewer遠(yuǎn)程工具連接到驗(yàn)證服務(wù)器,并安裝上層宏橋應(yīng)用軟件。再由客戶安排工程驗(yàn)證數(shù)據(jù)庫(kù)是否完整,經(jīng)過(guò)仔細(xì)的驗(yàn)證后,數(shù)據(jù)庫(kù)恢復(fù)基本沒(méi)問(wèn)題。上層應(yīng)用可以正常運(yùn)行,數(shù)據(jù)記錄也都基本沒(méi)有缺失,數(shù)據(jù)恢復(fù)成功。
由于客戶數(shù)據(jù)先是被突然斷電導(dǎo)致其部分文件丟失,接著人為刪掉了部分?jǐn)?shù)據(jù),并且又重新寫入部分?jǐn)?shù)據(jù),導(dǎo)致其存在數(shù)據(jù)覆蓋的可能性。最后又因數(shù)據(jù)庫(kù)的備份機(jī)制原因?qū)е虏糠謹(jǐn)?shù)據(jù)庫(kù)的備份數(shù)據(jù)沒(méi)有,因此整個(gè)恢復(fù)難度很大。由于對(duì)SQL Server數(shù)據(jù)庫(kù)底層結(jié)構(gòu)足夠了解,并且有處理過(guò)類似故障類型的經(jīng)驗(yàn)。所以整個(gè)恢復(fù)過(guò)程中還算比較順利。數(shù)據(jù)庫(kù)均正常恢復(fù),并且驗(yàn)證沒(méi)有問(wèn)題,整個(gè)數(shù)據(jù)恢復(fù)成功。