蘇神保 劉丹
摘 要:在Linux操作系統(tǒng)中,磁盤的分區(qū)結(jié)構(gòu)與Windows系統(tǒng)一樣,都采用 MBR或者GPT磁盤分區(qū),但在文件系統(tǒng)的結(jié)構(gòu)上卻有很大的差別,Windows系統(tǒng)常見的文件系統(tǒng)有FAT32、NTFS、exFAT等,而Linux系統(tǒng)的則為Ext2/3/4。本文以Linux操作系統(tǒng)中常見文件系統(tǒng)Ext3為例,詳細介紹該文件系統(tǒng)的結(jié)構(gòu)并舉例說明其手工提取文件的方法。
關(guān)鍵詞:Winhex;Ext3;Block;i-節(jié)點
1 Ext3文件系統(tǒng)基本介紹
Ext3文件系統(tǒng)所在區(qū)域先是被劃分為一個個的塊(Block),每個塊的大小都是一樣的,但是對于不同的Ext3文件系統(tǒng),塊的大小也可能存在差別。典型的塊大小有1 024字節(jié)、2 048字節(jié)或者4 096字節(jié),在Winhex中分別為2扇區(qū)、4扇區(qū)或者8扇區(qū)。該數(shù)值將在創(chuàng)建文件系統(tǒng)時被決定,可以由文件系統(tǒng)的創(chuàng)建程序根據(jù)硬盤分區(qū)的大小來自動選擇一個較為合理的值。
塊是文件系統(tǒng)中數(shù)據(jù)的分配單元,每個塊均有唯一的編號,第一個塊的編號為0,此后依序排列,0號塊起始于文件系統(tǒng)的開始扇區(qū)。
Ext3文件系統(tǒng)的全部空間被劃分為若干個塊組,每個塊組內(nèi)的結(jié)構(gòu)都大致相同,Ext3文件系統(tǒng)的整體結(jié)構(gòu)及第一個塊組的單元結(jié)構(gòu)如圖1所示。
由圖1可以看出,Ext3文件系統(tǒng)的第一個塊組的結(jié)構(gòu)功能分析可闡釋如下。
(1)Ext3文件系統(tǒng)的前兩個扇區(qū)用來存放引導(dǎo)程序,稱為引導(dǎo)扇區(qū)。如果沒有引導(dǎo)程序則保留不用,一般為空扇區(qū),沒有任何數(shù)據(jù)。
(2)Ext3文件系統(tǒng)的第3個扇區(qū)、也就是2號扇區(qū)是超級塊,超級塊占用2個扇區(qū),用于存儲文件系統(tǒng)的配置參數(shù)(如塊大小、總塊數(shù)和i-節(jié)點數(shù))和動態(tài)信息(如當(dāng)前空閑塊數(shù)和i-節(jié)點數(shù))。
(3)塊組描述符表用于存儲塊組描述符,占用一個或者多個塊,設(shè)計時取決于文件系統(tǒng)的大小。每個塊組描述符主要描述塊位圖、i-節(jié)點位圖和i-節(jié)點表的地址等信息。
為了系統(tǒng)的健壯性,Linux最初在每個塊組內(nèi)部對超級塊和塊組描述符表做了備份,但是當(dāng)文件系統(tǒng)很大時,這將耗費很多空間,尤其是塊組描述符表占用的塊較多時。為此后來采用了一種稀疏的方式來存儲這些備份,也就是只有在塊組號是3、5、7的冪的塊組(如0、1、3、5、7、9、25、27、49等)內(nèi)才對超級塊和塊組描述符進行備份。
(4)i-節(jié)點用于描述文件的元數(shù)據(jù),每個i-節(jié)點對應(yīng)文件系統(tǒng)中唯一的節(jié)點號。
2 Ext3文件系統(tǒng)的超級塊分析
一般地,當(dāng)塊大小為8個扇區(qū)時,超級塊起始于0號塊,其位于0號塊的2~3號扇區(qū),0~1號扇區(qū)是引導(dǎo)程序或者保留扇區(qū),4~7號扇區(qū)則是空閑的。另外,在塊組號是3、5、7的冪的塊組中,超級塊也有相應(yīng)的備份,通過在Winhex中向下搜索超級塊標(biāo)志53EF可以跳轉(zhuǎn)至有超級塊備份的相應(yīng)塊組中去。Ext3文件系統(tǒng)的超級塊是一個至關(guān)重要的扇區(qū),其中記錄的參數(shù)非常多。這里給出了某一Ext3文件系統(tǒng)的0號塊組的超級塊如圖2所示。而該超級塊中主要參數(shù)及含義詳見表1。
在上述Ext3文件系統(tǒng)中,超級塊的參數(shù)描述了文件系統(tǒng)的總塊數(shù)是13 107 200,每塊組包含的塊數(shù)是32 768,塊大小、即每塊包含的扇區(qū)數(shù)為22×1 024=4 096B=8S,而每塊組包含的扇區(qū)數(shù)為32 768×8=262 144 S,總塊組數(shù)為13 107 200/32 768=400,分別編號為0~399。
3 Ext3文件系統(tǒng)的塊組描述符分析
Ext3文件系統(tǒng)的每個塊組描述符占用32字節(jié),有超級塊備份的塊組都包含有塊組描述符備份,這是用來描述該塊組中的塊位圖的起始塊號、i-節(jié)點位圖的起始塊號以及i-節(jié)點表的起始塊號等信息,一個Ext3文件系統(tǒng)有多少個塊組,都需要在塊組描述符中體現(xiàn)出來。而本文中研發(fā)得到的某一Ext3文件系統(tǒng)0號塊組的塊組描述符實例則如圖3所示。此處以0號塊組描述符為例,其hex數(shù)值代表的含義詳見表2。
由表2可知,在該塊組中,塊位圖開始于1 025號塊,i-節(jié)點表位圖開始于1 026號塊,i-節(jié)點表開始于1 027號塊,塊組中已用塊數(shù)32 768-31 228=1 540,已用i-節(jié)點數(shù)為8 176-8 124=52個。塊位圖描述該塊組中塊的使用情況,i-節(jié)點位圖描述該塊組中i-節(jié)點的使用情況。因篇幅有限,文中不再一一贅述。
4 Ext3文件系統(tǒng)的i-節(jié)點分析
Ext3文件系統(tǒng)的i-節(jié)點用來存儲與文件相關(guān)的除文件名以外的所有信息,每個塊組中都有一個自己的i-節(jié)點表,i-節(jié)點表由很多的i-節(jié)點組成,每個文件或者目錄使用一個i-節(jié)點。i-節(jié)點表起始于i-節(jié)點位圖所在塊的下一個塊,超級塊中記錄著文件系統(tǒng)的i-節(jié)點總數(shù)和每塊組包含的i-節(jié)點數(shù),i-節(jié)點的大小在超級塊中指定,一般為128字節(jié)或者256字節(jié)。每個i-節(jié)點都有一個編號,第1個i-節(jié)點的編號為1,1~10號i-節(jié)點被系統(tǒng)保留,所以在超級塊中會描述第一個非保留的i-節(jié)點,這個值一般為11,前10個保留的i-節(jié)點在i-節(jié)點位圖中被表示為已分配,其中1號i-節(jié)點一般用于描述壞塊,2號i-節(jié)點被分配給根目錄使用,8號i-節(jié)點通常用于描述日志,如果已知一個i-節(jié)點號,就可以計算出該i-節(jié)點所在的塊組,計算方法為:(i-節(jié)點號-1)DIV每塊組i-節(jié)點數(shù)
在此基礎(chǔ)上,還將計算得出在該塊組中的i-節(jié)點號,計算公式為:(i-節(jié)點號-1)MOD每塊組i-節(jié)點數(shù)+1
至此,可得一文件的i-節(jié)點表如圖4所示。
由圖4中的偏移地址0X28可知,在i-節(jié)點中用塊指針描述文件內(nèi)容的存放地址。每個i-節(jié)點中有15個塊指針,包含12個直接塊指針,1個間接塊指針,1個二級間接塊指針和1個三級間接塊指針。12個直接塊指針指向文件內(nèi)容的前12個數(shù)據(jù)塊地址,如果文件大于12個塊,則第13個塊指針是一個間接塊指針,由其指向的塊存放的是直接塊指針而不是文件內(nèi)容,以此類推。當(dāng)文件較小時一般只需用到直接塊指針,當(dāng)文件較大時才會用到間接塊指針。由上述實例可知,該文件從0X28至0X57已經(jīng)使用了12個直接指針塊,0X58為間接塊指針。如需手工提取文件,需要從i-節(jié)點0X04位置讀取文件大小后換算提取。
5 Ext3文件系統(tǒng)目錄項分析
目錄項用來存放文件及目錄的i-節(jié)點號、目錄項的長度、文件名等信息,并實際存儲在分配給目錄的塊中。研究得到的一Ext3文件系統(tǒng)的根目錄如圖5所示。
在圖5中標(biāo)注出了文件1.docx的目錄項,由表3可知,該文件的i-節(jié)點號為0C000000即為12,目錄項的長度為1 000、即為16,文件名的長度占用6個字節(jié),文件類型為文件,文件名為1.docx。同理可知,2.docx的i-節(jié)點號為0D000000、即為13,目錄項的長度也是1 000、即為16,文件名的長度占用6個字節(jié),文件類型為文件,文件名為2.docx。
6 Ext3文件系統(tǒng)的手工提取文件實例分析
某Ext3文件系統(tǒng)因計算機突然斷電導(dǎo)致無法讀取文件,現(xiàn)需恢復(fù)該文件系統(tǒng)的18.docx號文件,這一過程中將會涉及的操作步驟可做完整表述如下。
由2號扇區(qū)超級塊信息可知,塊大小為4 096字節(jié)、即8個扇區(qū),i-節(jié)點大小為256字節(jié),每塊組包含的塊數(shù)為32 768。跳轉(zhuǎn)至8號扇區(qū)、即塊組描述符,找到0號塊組描述符的i-節(jié)點表的起始塊號,跳轉(zhuǎn)過去就可到達0號塊組的i-節(jié)點表位置。因1號i-節(jié)點一般用于描述壞塊,2號i-節(jié)點用于描述根目錄的起始塊號,讀取2號i-節(jié)點的直接塊指針為1538號塊、即12304號扇區(qū)就可跳轉(zhuǎn)至根目錄,依據(jù)根目錄結(jié)構(gòu)可知18.docx文件的i-節(jié)點號為1D000000、即為29,因每塊組包含的i-節(jié)點數(shù)為8 176,故29號i-節(jié)點位于0號塊組,由塊組描述符再次跳轉(zhuǎn)至0號塊組的i-節(jié)點表,從上至下數(shù)至29號i-節(jié)點、即為18.docx文件的i-節(jié)點。具體如圖6所示。
由i-節(jié)點定義可知,該文件的i-節(jié)點包含有3個直接塊指針(在圖6中用方框標(biāo)出),分別為6 587 479、6 587 480、6 587 481號塊,文件大小為12 077字節(jié),跳轉(zhuǎn)至6 587 479號塊,手工提取文件即可。
7 結(jié)束語
全文借助Winhex底層十六進制數(shù)據(jù)編輯恢復(fù)軟件,以Linux下Ext3文件系統(tǒng)為例,詳細分析了該文件系統(tǒng)的數(shù)據(jù)存儲結(jié)構(gòu)原理,探討了超級塊、塊組描述符、i-節(jié)點表、目錄項等要素的含義,可以為專業(yè)數(shù)據(jù)恢復(fù)技術(shù)人員提供參考。
參考文獻
[1] 劉偉. 數(shù)據(jù)恢復(fù)技術(shù)深度揭秘[M]. 北京:電子工業(yè)出版社,2010.
[2] 徐國天. 基于EXT3文件系統(tǒng)的數(shù)據(jù)庫文件恢復(fù)與檢驗軟件的開發(fā)[J]. 信息網(wǎng)絡(luò)安全,2011(10):44-46,70.
[3] 李巍. Ext-擴展文件系統(tǒng)的研究[J]. 信息系統(tǒng)工程,2010(8):134-135.
[4] 涂健,孫輝. Linux2.6內(nèi)核下Ext3文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu)及性能分析[J]. 南昌水專學(xué)報,2004,23(2):8-10,33.
[5] 黃步根. 數(shù)據(jù)恢復(fù)與計算機取證[J]. 計算機安全,2006(6):79-80.
[6] 夏煜,郎榮玲,戴冠中. Linux操作系統(tǒng)的文件系統(tǒng)建立過程的研究[J]. 計算機工程與應(yīng)用,2001(15):90-92.