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