蘇神保,劉丹
(湖南商務(wù)職業(yè)技術(shù)學(xué)院,湖南長沙 410205)
Ext3文件系統(tǒng)的大致結(jié)構(gòu)如圖1所示,該文件系統(tǒng)將整個空間分成若干個大小相同的塊組,每個塊組又由若干個塊(block)構(gòu)成;每個塊包含2的n次冪個扇區(qū)(sector),一般為2、4、8等,這些參數(shù)在超級塊中都有描述〔1〕。
在數(shù)據(jù)恢復(fù)領(lǐng)域,手工定位Ext3文件系統(tǒng)中的文件的方法一般是通過底層數(shù)據(jù)恢復(fù)軟件Winhex來實現(xiàn):通過搜索53EF可以找到塊組中的超級塊或者備份,然后根據(jù)超級塊或者備份可以算出文件系統(tǒng)的起始0號扇區(qū)的位置,再根據(jù)Ext3文件系統(tǒng)的結(jié)構(gòu)在下一塊中找到塊組描述符。塊組描述符中描述有塊組塊位圖、i-節(jié)點位圖以及i-節(jié)點的相關(guān)信息,通過塊組描述符中i-節(jié)點的塊號則可以定位i-節(jié)點的起始位置。i-節(jié)點對數(shù)據(jù)恢復(fù)人員恢復(fù)Ext3文件來說相當(dāng)重要,因為文件系統(tǒng)中每個文件都是通過i-節(jié)點來記錄的,每個文件都對應(yīng)一個獨一無二的i-節(jié)點號,該文件的大小、所占塊號等都通過i-節(jié)點來體現(xiàn)。數(shù)據(jù)恢復(fù)人員需要先找到根目錄的i-節(jié)點(一般位于2號i-節(jié)點),定位根目錄后再根據(jù)根目錄中的目錄項描述的文件的i-節(jié)點號來定位文件。
圖1 Ext3文件系統(tǒng)的結(jié)構(gòu)〔2〕
圖2為一Ext3文件系統(tǒng)中的文件311.docx文檔的i-節(jié)點表,該表占用256個字節(jié),列出了該文件的大小、最后訪問時間、最后修改時間以及所占用的塊號等關(guān)鍵信息。對于數(shù)據(jù)恢復(fù)人員來說,字節(jié)偏移0X04-0X07處的262F0000即表示該文件實際大小,數(shù)據(jù)解釋器顯示該文件實際大小為12,070字節(jié)。0X28-0X33表示該文件所占用的塊號,分別占1705、1706、1707三個塊,這三個塊為直接塊指針,直接指向文件。每塊大小8扇區(qū)即8*512=4096字節(jié)。三個塊占用空間即為4096*3=12288字節(jié)。
根據(jù)以上數(shù)據(jù)可知,該文件的起始塊號為1705號塊,實際大小為12070字節(jié),占用空間大小為12288字節(jié)。有了這些關(guān)鍵數(shù)據(jù)后,根據(jù)圖3所示步驟,即可恢復(fù)該文件。
Ext3文件系統(tǒng)的i-節(jié)點只提供12個直接塊指針,假設(shè)該文件系統(tǒng)塊大小為8扇區(qū),文件的最大空間為12*8*512=49152B=48KB,很顯然這個是不能滿足用戶需求的。這個時候就需要引入間接塊指針。
Ext3文件系統(tǒng)跟UFS文件系統(tǒng)一樣,在i-節(jié)點中用塊指針描述文件內(nèi)容的存放地址。每個i-節(jié)點中有15個塊指針,包括12個直接塊指針、1個間接塊指針、1個二級間接塊指針和1個三級間接塊指針〔3〕。
12個直接塊指針指向文件內(nèi)容的前12個數(shù)據(jù)塊地址。如果文件大于12個塊,則第13個塊指針是一個間接塊指針,它指向的塊內(nèi)存放的是直接塊指針而不是文件內(nèi)容。
圖2 311.docx文件的i-節(jié)點表(部分截取)
圖3 恢復(fù)311.docx文件步驟
圖4 有間接塊指針的i-節(jié)點(部分截取)
如果間接塊指針指向的塊依然存放不下文件所占的塊號,就需要二級間接塊指針了。第14個塊指針是二級間接塊指針,它指向的塊內(nèi)存放的是一級間接塊指針,而不是文件內(nèi)容。二級間接塊指針如果還是無法滿足文件的塊號需求,就要用第15個塊指針了。第15個塊指針是三級間接塊指針,它指向的塊內(nèi)存放的是二級間接塊指針而不是文件內(nèi)容。
在數(shù)據(jù)恢復(fù)領(lǐng)域,直接指針塊所指向才是用戶需要的數(shù)據(jù),因此需要將所有指針指向的數(shù)據(jù)找出來才能有效地恢復(fù)數(shù)據(jù)。圖4為一示例壓縮文件的i-節(jié)點表,根據(jù)i-節(jié)點所描述指針定義可知,該文件的i-節(jié)點包含14個指針,前12個直接塊指針已占滿且直接指向用戶數(shù)據(jù)。CC2E0000(十進(jìn)制11980)為第一間接塊指針,該指針指向的是直接塊指針而不是用戶數(shù)據(jù),用戶數(shù)據(jù)需要先跳轉(zhuǎn)至11890號塊,然后利用11890號塊內(nèi)存放的直接塊指針來找到用戶數(shù)據(jù)。同理,BE380000(十進(jìn)制14526)為第二間接塊指針,該塊指針指向的是第一間接塊指針,根據(jù)里面存放的第一間接塊指針就可以找到直接塊指針,從而找到用戶數(shù)據(jù)。
根據(jù)以上直接塊指針與間接塊指針的定義,可以列出該文件的i-節(jié)點中所描述指針對應(yīng)塊的占用情況(見表1)。
由表1可知,該文件的實際存放地址為3788—11979號塊和11989—14523號塊兩個部分,分為兩個碎片(Fragment)。中間11980—11988號塊用來存放第一間接塊指針,不能被算在文件里面,不然恢復(fù)出來的文件也會報錯或者打不開。該文件所占塊號可以用Winhex軟件列出來,如圖5所示。
表1 Ext3文件系統(tǒng)的間接塊指針情況表
圖5 示例文件所占塊號圖
圖5中列出了文件在11979號塊的位置被分成兩個部分,且文件大小占用10727個塊,表示該示例文件所占空間為10727*8*512=43937792B。此數(shù)據(jù)與用戶在系統(tǒng)里面根據(jù)文件屬性查看到的占用空間大小相符。數(shù)據(jù)恢復(fù)人員只需要利用Winhex軟件提供的文件合并功能將兩個碎片合并在一起手提文件即可。碎片合并功能如圖6所示。
圖6 碎片合并功能
Ext3文件系統(tǒng)的文件存儲原理大致可以總結(jié)如下:先根據(jù)塊組描述符中的i-節(jié)點表塊號找到根目錄的i-節(jié)點從而找到根目錄;在根目錄中讀取目錄中相關(guān)文件的i-節(jié)點號,然后根據(jù)該i-節(jié)點號再回到i-節(jié)點表找到該文件的i-節(jié)點表;從i-節(jié)點表內(nèi)存儲有該文件的文件大小、直接塊指針或者間接塊指針等信息可知,i-節(jié)點表作用等同于NTFS文件系統(tǒng)的文件記錄表MFT。
由以上分析可知,文件的目錄項和i-節(jié)點表對于恢復(fù)文件作用相當(dāng)重要。為了更好地說明Ext3文件系統(tǒng)文件刪除后目錄項和i-節(jié)點表的變化情況,可以將文件刪除前和刪除后的目錄項和i-節(jié)點表形成對比。
311.docx刪除前與刪除后目錄項對比圖如圖7、8所示:
根據(jù)文件刪除前與刪除后的目錄項對比可知,311.docx文件刪除后,其目錄項沒有發(fā)生任何變化,i-節(jié)點號為3F010000H,目錄項長度為1000H,文件名長度為08H,文件類型為01H,文件名311.docx。但是前一目錄項的長度由原先的1000H變?yōu)?000H,即由16變成了32,也就是311.docx的目錄項長度被加到前一文件的目錄項中去了,相當(dāng)于被遮蓋了,只是不影響數(shù)據(jù)恢復(fù)人員根據(jù)該信息找到該文件的i-節(jié)點表。
311.docx刪除前與刪除后i-節(jié)點表對比圖如圖9、10所示:
圖7 311.docx刪除前的目錄項
圖8 311.docx刪除后的目錄項
圖9 311.docx刪除前的i-節(jié)點表
圖10 311.docx刪除后的i-節(jié)點表
根據(jù)該文件刪除前和刪除后的i-節(jié)點表對比可知,文件被刪除后,i-節(jié)點表中的文件大小以及文件的直接塊指針或者間接塊指針(如果存在的話)都被清零了,這就給數(shù)據(jù)恢復(fù)帶來了極大難度。雖然我們可以根據(jù)前一i-節(jié)點所指向的塊和后一i-節(jié)點所指向的塊中間的間隙來恢復(fù)該數(shù)據(jù),但是假如文件存在間接塊指針的話,那就比較困難了。
全文分析了Ext3文件系統(tǒng)的文件存儲的基本原理,介紹了該文件系統(tǒng)在只有直接塊指針和有間接塊指針兩種不同的情況下數(shù)據(jù)重現(xiàn)的不同方法,文中也通過實例闡述了Ext3文件系統(tǒng)中文件被刪除前后目錄項以及i-節(jié)點表的變化情況,可以為專業(yè)數(shù)據(jù)恢復(fù)技術(shù)人員提供技術(shù)參考,也可以作為大中專職業(yè)院校學(xué)生參加全國職業(yè)院校數(shù)據(jù)恢復(fù)技能大賽的參考資料〔4〕。