蘇神保,劉丹
(湖南商務職業技術學院,湖南長沙 410205)
Ext3文件系統的大致結構如圖1所示,該文件系統將整個空間分成若干個大小相同的塊組,每個塊組又由若干個塊(block)構成;每個塊包含2的n次冪個扇區(sector),一般為2、4、8等,這些參數在超級塊中都有描述〔1〕。
在數據恢復領域,手工定位Ext3文件系統中的文件的方法一般是通過底層數據恢復軟件Winhex來實現:通過搜索53EF可以找到塊組中的超級塊或者備份,然后根據超級塊或者備份可以算出文件系統的起始0號扇區的位置,再根據Ext3文件系統的結構在下一塊中找到塊組描述符。塊組描述符中描述有塊組塊位圖、i-節點位圖以及i-節點的相關信息,通過塊組描述符中i-節點的塊號則可以定位i-節點的起始位置。i-節點對數據恢復人員恢復Ext3文件來說相當重要,因為文件系統中每個文件都是通過i-節點來記錄的,每個文件都對應一個獨一無二的i-節點號,該文件的大小、所占塊號等都通過i-節點來體現。數據恢復人員需要先找到根目錄的i-節點(一般位于2號i-節點),定位根目錄后再根據根目錄中的目錄項描述的文件的i-節點號來定位文件。

圖1 Ext3文件系統的結構〔2〕
圖2為一Ext3文件系統中的文件311.docx文檔的i-節點表,該表占用256個字節,列出了該文件的大小、最后訪問時間、最后修改時間以及所占用的塊號等關鍵信息。對于數據恢復人員來說,字節偏移0X04-0X07處的262F0000即表示該文件實際大小,數據解釋器顯示該文件實際大小為12,070字節。0X28-0X33表示該文件所占用的塊號,分別占1705、1706、1707三個塊,這三個塊為直接塊指針,直接指向文件。每塊大小8扇區即8*512=4096字節。三個塊占用空間即為4096*3=12288字節。
根據以上數據可知,該文件的起始塊號為1705號塊,實際大小為12070字節,占用空間大小為12288字節。有了這些關鍵數據后,根據圖3所示步驟,即可恢復該文件。
Ext3文件系統的i-節點只提供12個直接塊指針,假設該文件系統塊大小為8扇區,文件的最大空間為12*8*512=49152B=48KB,很顯然這個是不能滿足用戶需求的。這個時候就需要引入間接塊指針。
Ext3文件系統跟UFS文件系統一樣,在i-節點中用塊指針描述文件內容的存放地址。每個i-節點中有15個塊指針,包括12個直接塊指針、1個間接塊指針、1個二級間接塊指針和1個三級間接塊指針〔3〕。
12個直接塊指針指向文件內容的前12個數據塊地址。如果文件大于12個塊,則第13個塊指針是一個間接塊指針,它指向的塊內存放的是直接塊指針而不是文件內容。

圖2 311.docx文件的i-節點表(部分截取)

圖3 恢復311.docx文件步驟

圖4 有間接塊指針的i-節點(部分截取)
如果間接塊指針指向的塊依然存放不下文件所占的塊號,就需要二級間接塊指針了。第14個塊指針是二級間接塊指針,它指向的塊內存放的是一級間接塊指針,而不是文件內容。二級間接塊指針如果還是無法滿足文件的塊號需求,就要用第15個塊指針了。第15個塊指針是三級間接塊指針,它指向的塊內存放的是二級間接塊指針而不是文件內容。
在數據恢復領域,直接指針塊所指向才是用戶需要的數據,因此需要將所有指針指向的數據找出來才能有效地恢復數據。圖4為一示例壓縮文件的i-節點表,根據i-節點所描述指針定義可知,該文件的i-節點包含14個指針,前12個直接塊指針已占滿且直接指向用戶數據。CC2E0000(十進制11980)為第一間接塊指針,該指針指向的是直接塊指針而不是用戶數據,用戶數據需要先跳轉至11890號塊,然后利用11890號塊內存放的直接塊指針來找到用戶數據。同理,BE380000(十進制14526)為第二間接塊指針,該塊指針指向的是第一間接塊指針,根據里面存放的第一間接塊指針就可以找到直接塊指針,從而找到用戶數據。
根據以上直接塊指針與間接塊指針的定義,可以列出該文件的i-節點中所描述指針對應塊的占用情況(見表1)。
由表1可知,該文件的實際存放地址為3788—11979號塊和11989—14523號塊兩個部分,分為兩個碎片(Fragment)。中間11980—11988號塊用來存放第一間接塊指針,不能被算在文件里面,不然恢復出來的文件也會報錯或者打不開。該文件所占塊號可以用Winhex軟件列出來,如圖5所示。

表1 Ext3文件系統的間接塊指針情況表

圖5 示例文件所占塊號圖
圖5中列出了文件在11979號塊的位置被分成兩個部分,且文件大小占用10727個塊,表示該示例文件所占空間為10727*8*512=43937792B。此數據與用戶在系統里面根據文件屬性查看到的占用空間大小相符。數據恢復人員只需要利用Winhex軟件提供的文件合并功能將兩個碎片合并在一起手提文件即可。碎片合并功能如圖6所示。

圖6 碎片合并功能
Ext3文件系統的文件存儲原理大致可以總結如下:先根據塊組描述符中的i-節點表塊號找到根目錄的i-節點從而找到根目錄;在根目錄中讀取目錄中相關文件的i-節點號,然后根據該i-節點號再回到i-節點表找到該文件的i-節點表;從i-節點表內存儲有該文件的文件大小、直接塊指針或者間接塊指針等信息可知,i-節點表作用等同于NTFS文件系統的文件記錄表MFT。
由以上分析可知,文件的目錄項和i-節點表對于恢復文件作用相當重要。為了更好地說明Ext3文件系統文件刪除后目錄項和i-節點表的變化情況,可以將文件刪除前和刪除后的目錄項和i-節點表形成對比。
311.docx刪除前與刪除后目錄項對比圖如圖7、8所示:
根據文件刪除前與刪除后的目錄項對比可知,311.docx文件刪除后,其目錄項沒有發生任何變化,i-節點號為3F010000H,目錄項長度為1000H,文件名長度為08H,文件類型為01H,文件名311.docx。但是前一目錄項的長度由原先的1000H變為2000H,即由16變成了32,也就是311.docx的目錄項長度被加到前一文件的目錄項中去了,相當于被遮蓋了,只是不影響數據恢復人員根據該信息找到該文件的i-節點表。
311.docx刪除前與刪除后i-節點表對比圖如圖9、10所示:

圖7 311.docx刪除前的目錄項

圖8 311.docx刪除后的目錄項

圖9 311.docx刪除前的i-節點表

圖10 311.docx刪除后的i-節點表
根據該文件刪除前和刪除后的i-節點表對比可知,文件被刪除后,i-節點表中的文件大小以及文件的直接塊指針或者間接塊指針(如果存在的話)都被清零了,這就給數據恢復帶來了極大難度。雖然我們可以根據前一i-節點所指向的塊和后一i-節點所指向的塊中間的間隙來恢復該數據,但是假如文件存在間接塊指針的話,那就比較困難了。
全文分析了Ext3文件系統的文件存儲的基本原理,介紹了該文件系統在只有直接塊指針和有間接塊指針兩種不同的情況下數據重現的不同方法,文中也通過實例闡述了Ext3文件系統中文件被刪除前后目錄項以及i-節點表的變化情況,可以為專業數據恢復技術人員提供技術參考,也可以作為大中專職業院校學生參加全國職業院校數據恢復技能大賽的參考資料〔4〕。