本發(fā)明涉及信息安全技術領域,特別涉及一種基于XFS文件系統(tǒng)數(shù)據(jù)的重組恢復方法。
背景技術:
XFS文件系統(tǒng)是SGI開發(fā)的高級日志文件系統(tǒng),XFS極具伸縮性,非常健壯。目前XFS文件系統(tǒng)逐漸的在一些服務器、PC、嵌入式監(jiān)控視頻、手機上使用并進行數(shù)據(jù)的存儲,XFS不同于任何一種Windows上的文件系統(tǒng),這導致傳統(tǒng)的數(shù)據(jù)恢復技術無法應用到使用XFS的設備上。目前,在針對XFS文件系統(tǒng)中刪除后的數(shù)據(jù)文件無法恢復,而且恢復出來的文件不能進行拼接重組。
技術實現(xiàn)要素:
本發(fā)明針對現(xiàn)有技術的缺陷,提供了一種基于XFS文件系統(tǒng)數(shù)據(jù)的重組恢復方法,能有效的解決上述現(xiàn)有技術存在的問題。
一種基于XFS文件系統(tǒng)數(shù)據(jù)的重組恢復方法,包括以下步驟:
S1:加載磁盤,并讀取磁盤超級塊所在扇區(qū)信息并解析,需要解析的內(nèi)容包括塊大小、塊總數(shù)、AG所包含的塊數(shù)、每一個塊在AG中的相對偏移值;具體地,在相對于超級塊起始地址偏移0x04~0x07記錄的值表示塊大小,在相對于超級塊起始地址偏移0x08~0x0F記錄的值表示塊總數(shù),在相對于超級塊起始地址偏移0x54~0x57記錄的值表示單個AG所包含的塊的總個數(shù),在相對于超級塊起始地址偏移0x7C記錄的值表示在文件鏈表記錄項中塊在AG的相對偏移編號;
S2:獲取單個文件鏈表的大小,即塊大小的值,將整個硬盤的數(shù)據(jù)按照塊大小分成若干個塊;
S3:匹配每一個塊是否符合文件鏈表的結構特征,若符合則記錄下來,不符合則跳過;
S4:解析文件鏈接的結構;
S5:根據(jù)S4中解析的內(nèi)容,依據(jù)文件鏈表中記錄的順序,依次讀取每一記錄項對應塊地址的數(shù)據(jù)內(nèi)容;
S6:將S5中讀取的數(shù)據(jù),按照文件鏈表中記錄的文件鏈表間的關系和記錄項的順序依次拼接項中記錄的塊地址的數(shù)據(jù),重新組合為一個新的文件;
S7:將一個文件鏈表中記錄的值解析完成后,繼續(xù)向下搜索文件鏈表結構并判斷該文件鏈表是否被使用,未使用則以這個文件鏈表為解析目標執(zhí)行S3,若被使用則繼續(xù)向下搜索直至遍歷整個硬盤扇區(qū)。
作為優(yōu)選,所述S3的文件鏈表的結構特征包含如下特征:
特征一:文件鏈表特征頭為“0x424D4150”;
特征二:文件鏈表特征頭后兩個字節(jié)表示文件鏈表的級別,該處記錄的值的范圍是0~255;
特征三:文件鏈表級別后兩個字節(jié)表示文件鏈表的記錄項的個數(shù),該處記錄的值應小于超級塊中記錄的總塊數(shù);
特征四:在特征三之后的8個字節(jié)表示該文件鏈表所記錄的文件之前有數(shù)據(jù)內(nèi)容的狀態(tài),該處記錄的值應小于超級塊中記錄的總塊數(shù);
特征五:在特征三之后的8個字節(jié)表示該文件鏈表所記錄的文件之后有數(shù)據(jù)內(nèi)容的狀態(tài),該處記錄的值應小于超級塊中記錄的總塊數(shù)。
作為優(yōu)選,所述S4其步驟如下:
S401:通過S3中特征四來判斷該文件鏈表所記錄的文件在此文件鏈表記錄的地址之前是否包含數(shù)據(jù),若特征四描述的地址的值為-1則表示在此之前無文件數(shù)據(jù),值不為-1時,該值表示該文件鏈表所記錄的文件在此記錄的地址之前的文件鏈表所在的塊號,跳轉至相應塊號讀取塊中的文件鏈表結構;
S402:同特征四相同方法判斷特征五所描述的該文件鏈表所記錄的文件在此文件鏈表記錄的地址之后是否包含數(shù)據(jù);
S403:依次遍歷文件鏈表中每一記錄項數(shù)據(jù),按照記錄項的結構特征讀取記錄文件數(shù)據(jù)的塊號和所占用的塊個數(shù)。
與現(xiàn)有技術相比本發(fā)明的優(yōu)點在于:根據(jù)XFS文件存儲結構找到中的刪除數(shù)據(jù);提取XFS文件系統(tǒng)中刪除的數(shù)據(jù),并進行數(shù)據(jù)拼接重組;防止重要數(shù)據(jù)丟失。
具體實施方式
為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下舉實施例,對本發(fā)明做進一步詳細說明。
基于XFS文件系統(tǒng)的存儲文件的原理,本發(fā)明所采用的數(shù)據(jù)解析的思路是:通過解析XFS文件系統(tǒng)的存儲原理發(fā)現(xiàn),在XFS存儲數(shù)據(jù)文件時,會產(chǎn)生一個鏈表來存儲文件占用的塊結構的編號,并且按照順序來進行記錄,在每一記錄項中包含了塊地址的編號與使用的塊的個數(shù)。根據(jù)上述特征,確立了通過快速定位存儲文件占用塊編號的鏈表來進行查找數(shù)據(jù),并按照鏈表中記錄的信息讀取相應塊地址的數(shù)據(jù)內(nèi)容,然后按照鏈表的記錄的順序將提取到的數(shù)據(jù)進行拼接重組。
下面詳細介紹XFS文件系統(tǒng)中的文件鏈表的基本結構。為了更為方便的闡述本發(fā)明中的方法,本例使用IRIX 5.3版本發(fā)布的XFS文件系統(tǒng)為例進行闡述,XFS文件系統(tǒng)中每一個文件鏈表的長度為一個塊的長度,其結構如下表所示:
表中文件特征頭為“0x424D4150”,長度為4字節(jié),其后2字節(jié)表示當前文件鏈表的級別,緊接著2字節(jié)記錄的值表示當前文件鏈表中的記錄項的個數(shù),后面左右兄弟節(jié)點的地址均占有8字節(jié)來存儲,在其后的數(shù)據(jù)為若干個記錄項數(shù)據(jù),每一記錄項的長度為16字節(jié),若某一記錄項未被使用時,其16字節(jié)長度的內(nèi)容全用00表示。
在每一個記錄項中記錄著存儲文件的塊地址信息,具體的每一個記錄項的結構如下表所示:
在記錄項中存儲結構的劃分單位為bit(位),由于每一個記錄項的長度為16字節(jié),也即是16*8=128bit,在相對每一記錄項起始偏移1bit的值為記錄項的標記位;在相對每一記錄項起始偏移2bit~55bit的值為記錄項所記錄的塊數(shù)據(jù)在文件中的相對偏移的塊數(shù);在相對每一記錄項起始偏移56bit~107bit的值為文件所使用的塊地址,在該處記錄地址的信息包含的文件所使用塊所在的AG編號及塊在AG中的相對偏移編號,其中塊在AG中的相對偏移編號在該結構中占有的位數(shù)處于低位,長度的值為在XFS文件系統(tǒng)中相對超級塊起始偏移0x7C字節(jié)的處記錄的值,由此可計算出塊所在的AG編號的值位于相對記錄項起始偏移56bit~107bit的高位處,其長度為52減塊在AG中的相對偏移編號的長度值;在相對每一記錄項起始偏移108bit~128bit的值為文件所使用的塊個數(shù)。
一種基于XFS文件系統(tǒng)數(shù)據(jù)的重組恢復方法,包括以下步驟:
S1:加載磁盤,并讀取磁盤超級塊所在扇區(qū)信息并解析,需要解析的內(nèi)容包括塊大小、塊總數(shù)、AG所包含的塊數(shù)、每一個塊在AG中的相對偏移值;具體地,在相對于超級塊起始地址偏移0x04~0x07記錄的值表示塊大小,在相對于超級塊起始地址偏移0x08~0x0F記錄的值表示塊總數(shù),在相對于超級塊起始地址偏移0x54~0x57記錄的值表示單個AG所包含的塊的總個數(shù),在相對于超級塊起始地址偏移0x7C記錄的值表示在文件鏈表記錄項中塊在AG的相對偏移編號;
S2:獲取單個文件鏈表的大小,即塊大小的值,將整個硬盤的數(shù)據(jù)按照塊大小分成若干個塊;
S3:匹配每一個塊是否符合文件鏈表的結構特征,若符合則記錄下來,不符合則跳過;
文件鏈表的結構特征包含如下特征:
特征一:文件鏈表特征頭為“0x424D4150”;
特征二:文件鏈表特征頭后兩個字節(jié)表示文件鏈表的級別,該處記錄的值的范圍是0~255;
特征三:文件鏈表級別后兩個字節(jié)表示文件鏈表的記錄項的個數(shù),該處記錄的值應小于超級塊中記錄的總塊數(shù);
特征四:在特征三之后的8個字節(jié)表示該文件鏈表所記錄的文件之前有數(shù)據(jù)內(nèi)容的狀態(tài),該處記錄的值應小于超級塊中記錄的總塊數(shù);
特征五:在特征三之后的8個字節(jié)表示該文件鏈表所記錄的文件之后有數(shù)據(jù)內(nèi)容的狀態(tài),該處記錄的值應小于超級塊中記錄的總塊數(shù);
S4:解析文件鏈接的結構,其步驟如下:
S401:首先通過S:3中特征四來判斷該文件鏈表所記錄的文件在此文件鏈表記錄的地址之前是否包含數(shù)據(jù),若特征四描述的地址的值為-1則表示在此之前無文件數(shù)據(jù),值不為-1時,該值表示該文件鏈表所記錄的文件在此記錄的地址之前的文件鏈表所在的塊號,跳轉至相應塊號讀取塊中的文件鏈表結構,
S402:同特征四相同方法判斷特征五所描述的該文件鏈表所記錄的文件在此文件鏈表記錄的地址之后是否包含數(shù)據(jù);
S403:依次遍歷文件鏈表中每一記錄項數(shù)據(jù),按照記錄項的結構特征讀取記錄文件數(shù)據(jù)的塊號和所占用的塊個數(shù);
S5:根據(jù)S4中解析的內(nèi)容,依據(jù)文件鏈表中記錄的順序,依次讀取每一記錄項對應塊地址的數(shù)據(jù)內(nèi)容;
S6:將S5中讀取的數(shù)據(jù),按照文件鏈表中記錄的文件鏈表間的關系和記錄項的順序依次拼接項中記錄的塊地址的數(shù)據(jù),重新組合為一個新的文件;
S7:將一個文件鏈表中記錄的值解析完成后,繼續(xù)向下搜索文件鏈表結構并判斷該文件鏈表是否被使用,未使用則以這個文件鏈表為解析目標執(zhí)行S3,若被使用則繼續(xù)向下搜索直至遍歷整個硬盤扇區(qū)。
本領域的普通技術人員將會意識到,這里所述的實施例是為了幫助讀者理解本發(fā)明的實施方法,應被理解為本發(fā)明的保護范圍并不局限于這樣的特別陳述和實施例。本領域的普通技術人員可以根據(jù)本發(fā)明公開的這些技術啟示做出各種不脫離本發(fā)明實質(zhì)的其它各種具體變形和組合,這些變形和組合仍然在本發(fā)明的保護范圍內(nèi)。