NTFS底層結(jié)構(gòu)培訓(xùn)資料_第1頁
NTFS底層結(jié)構(gòu)培訓(xùn)資料_第2頁
NTFS底層結(jié)構(gòu)培訓(xùn)資料_第3頁
NTFS底層結(jié)構(gòu)培訓(xùn)資料_第4頁
NTFS底層結(jié)構(gòu)培訓(xùn)資料_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、.;一、NTFS系統(tǒng)結(jié)構(gòu)NTFS是Windows NT引入的新型文件系統(tǒng),如果您是一位熟悉FAT磁盤格式的專業(yè)人士,您可能會(huì)覺得NTFS系統(tǒng)的思想蹩腳而晦澀,如果您對(duì)FAT格式一無所知,那么恭喜您,您會(huì)更快的了解這種更有效率的磁盤格式。NTFS的結(jié)構(gòu)復(fù)雜,內(nèi)容繁多,筆者僅對(duì)NTFS卷上的底層結(jié)構(gòu)做分析,并提供卷上數(shù)據(jù)刪除的特征狀態(tài)供大家參考。 現(xiàn)在,我們首先來建立了解NTFS需要的基本概念。1.0基本結(jié)構(gòu)及基本概念在NTFS中,文件以簇的形式分配。最小的單位為扇區(qū),N個(gè)扇區(qū)為一簇。其中,N的值可以通過BPB(引導(dǎo)扇區(qū))讀出(以下會(huì)詳細(xì)介紹)。1.0.1卷與簇表1 卷與簇的關(guān)系卷大?。ǚ謪^(qū)大小)

2、每簇的扇區(qū)缺省的簇大小小于等于512MB1512字節(jié)513MB1024MB(1GB)21024字節(jié)(1KB)1025MB2048MB(2GB)42048字節(jié)(2KB)大于等于2049MB84KB 4表1 卷與簇的關(guān)系從上面可以看出,也就是說不管驅(qū)動(dòng)器多大NTFS簇的大小不會(huì)超過4KB。1.0.2NTFS的基本數(shù)據(jù)結(jié)構(gòu)NTFS的數(shù)據(jù)大體上可分為4個(gè)部分(1)Partition boot sector(引導(dǎo)扇區(qū),又稱BPB),此部分為所有磁盤格式都共有,占用一個(gè)扇區(qū),但是具體的內(nèi)容當(dāng)然各不相同(見表3)。(2)Master File Table(主文件列表,MFT),它是對(duì)卷上所有文件的記錄,每一

3、個(gè)文件對(duì)應(yīng)一個(gè)記錄項(xiàng),理論上占用該卷12的空間。(3)System files(系統(tǒng)文件),NTFS系統(tǒng)一共有16個(gè)系統(tǒng)文件,和8個(gè)保留文件。(4)File area(數(shù)據(jù)區(qū)),留給用戶的空間。Partition boot sector引導(dǎo)扇區(qū)Master File Table主文件列表System files系統(tǒng)文件File area用戶文件區(qū)(數(shù)據(jù)區(qū)) 表2 NTFS的磁盤分配情況1.0.3 NTFS中關(guān)于目錄的說明NTFS中目錄也是以文件的形式存在的。因此,每一個(gè)目錄也可以看作一個(gè)文件。如果您熟悉FAT,那么此時(shí)您可能會(huì)覺得很別扭,因?yàn)樵贔AT中,文件是以目錄文件的樹型結(jié)構(gòu)聯(lián)系起來的。但

4、是,您必須相信的是,NTFS將會(huì)提供比搜索樹更快的讀寫方式。1.1 引導(dǎo)扇區(qū)字節(jié)偏移長(zhǎng)度(字節(jié))常用值意義 0X0030XEB5290JMP指令 0X034NTFS文件系統(tǒng) ID 0X0B20X0002每扇區(qū)字節(jié)數(shù) 0X0D10X08每簇扇區(qū)數(shù) 0X0E20X0000保留扇區(qū) 0X1030X000000總為0 0X1320X0000NTFS未使用,為0 0X1510XF8介質(zhì)描述 0X1610X0000總為0 0X1820X3F00每磁道扇區(qū)數(shù) 0X1A20XFF00磁頭數(shù) 0X1C40X3F000000隱含扇區(qū) 0X2040X00000000NTFS未使用,為0 0X2440X8000800

5、0NTFS未使用,為0 0X2880X4AF57F0000000000扇區(qū)總數(shù) 0X3080X0400000000000000$MFT的邏輯簇號(hào) 0X3880X54FF070000000000$MFTMirr的邏輯簇號(hào) 0X4040XF6000000每MFT記錄簇?cái)?shù) 0X4440X0100000每索引簇?cái)?shù) 0X4880X14A51B74C91B741C卷標(biāo) 0X5040X00000000校驗(yàn)和 0X54430略引導(dǎo)代碼 0X1FE20X55AA簽名 表3 NTFS引導(dǎo)扇區(qū)說明1.2 MFT(主文件表)MFT是一個(gè)對(duì)應(yīng)的數(shù)據(jù)庫,由一系列的文件記錄組成。卷中每一個(gè)文件都有一個(gè)文件記錄(對(duì)于大型文件

6、還可能有多個(gè)記錄與之相對(duì)應(yīng))。主文件表本身也有它自己的文件記錄。如果您還不勝了解,那么我們來打個(gè)比喻。假設(shè)一個(gè)班有30個(gè)人,老師那里有一本花名冊(cè),記錄了每個(gè)人的名字,年齡,每天出勤的情況和科目成績(jī)等等。把每個(gè)人看做每一個(gè)文件,那么那本花名冊(cè)就是這里的MFT。當(dāng)然,事實(shí)往往是復(fù)雜而多變的,MFT中包含文件的哪些信息?這些信息又是如何關(guān)聯(lián)的?這些問題,我們會(huì)一個(gè)個(gè)解決?,F(xiàn)在首先對(duì)MFT做幾點(diǎn)必要的說明:(1)實(shí)際上,MFT自身也是一個(gè)文件,因此,主文件列表的第一個(gè)記錄就是它自身。所以,剛才的例子其實(shí)不太貼切,因?yàn)槭聦?shí)上,花名冊(cè)也是人,那么好吧,我們假設(shè)這本花名冊(cè)在老師的腦子里。這樣,您可以知道,既

7、然老師也是人,那么其實(shí)老師也是一個(gè)文件。(2)MFT的每個(gè)記錄都有一個(gè)編號(hào),這里我們稱它為ID號(hào)。這個(gè)ID從0開始。我們知道MFT自身是NTFS系統(tǒng)的第一個(gè)文件,所以文件$MFT的ID號(hào)為0。(3)$MFT和其他23個(gè)文件一起(共24個(gè)),組成所謂的“Metafiles”(元文件,也是之前提到的System files,系統(tǒng)文件)。這24個(gè)文件中,前16(ID為0-15)個(gè)文件是固定的,剩下的8個(gè)文件為保留文件。我們可以假設(shè),這16個(gè)系統(tǒng)文件為此班的任課老師,因?yàn)殡m然他們也是人,但是屬性跟普通的同學(xué)不一樣,他們管理著整個(gè)卷的活動(dòng)方式,正如老師們管理著整個(gè)班級(jí)一樣。(4)用戶的文件(也包括目錄)

8、的MFT中的ID號(hào)從24開始排。(5)用戶每添加一個(gè)文件ID號(hào)加1,當(dāng)某文件被刪除時(shí),與之對(duì)應(yīng)的MFT記錄將被空出來,如果此時(shí)再次添加文件,系統(tǒng)會(huì)優(yōu)先填充ID小的空位。正如,大家上課的時(shí)候都會(huì)搶前排的位子坐,但是坐定之后就不能換位子了。(6)無論簇的大小,文件記錄大小都是1K,老師腦中的花名冊(cè)對(duì)每個(gè)人都是公平的。(7)理論上$MFT在卷中的分配空間(占12)。(8)邏輯上,$MFT在卷中會(huì)占用一塊連續(xù)的空間,但實(shí)際情況$MFT可能會(huì)被分散在磁盤的幾個(gè)不同的區(qū)域。甚至,可能在元文件的部分就被拆分開。據(jù)筆者分析,這些情況的發(fā)生可能由于卷上的文件不斷增加,最先開辟的$MFT文件已經(jīng)用完,系統(tǒng)會(huì)再次開

9、辟空間存放文件記錄。另一種情況是,卷是由FAT或者其他格式轉(zhuǎn)化而來,當(dāng)卷空間不足的時(shí)候,也可能將MFT分散存儲(chǔ)。1.2.1 MFT中的元文件(固定)以下是元文件的列表。其中ID為0-15的文件為系統(tǒng)文件,用戶文件從第24個(gè)MFT記錄開始排。序號(hào)(ID)元文件功能 0$MFT主文件列表本身 1$MFTMirr主文件表的部分鏡像 2$LogFile日志文件 3$Volume卷文件 4$AttrDef屬性定義列表5$Root根目錄 6$Bitmap位圖文件 7$Boot引導(dǎo)文件 8$BadClus壞簇文件 9$Secure安全文件 10$UpCase大寫文件 11-15$Extend 擴(kuò)展文件(一共

10、5個(gè)文件) 16-23保留 表4 NTFS元文件1.2.2 NTFS中MFT的備份在NTFS中,因其前16個(gè)文件的重要性,對(duì)它們的MFT記錄在文件區(qū)有一個(gè)備份。如圖:圖1 MFT的備份1.2.3 NTFS中的$BITMAP(位圖)文件在元文件中,除了$MFT文件還有一個(gè)位圖文件十分重要。文件$Bitmap標(biāo)識(shí)的是該卷中簇的占用情況。它用一位代表一簇。為0代表此簇空閑,為1代表此簇已使用。這樣可以更合理的分配磁盤空間。當(dāng)文件被刪除,它所占用的簇對(duì)應(yīng)的為會(huì)被清空(置0)。NTFS通過這個(gè)文件管理卷的使用情況。 二、文件記錄(MFT記錄)詳解相信對(duì)NTFS您已經(jīng)有一個(gè)大致的了解,但是對(duì)老師腦中的花名

11、冊(cè)是不是充滿了好奇和期待呢?簡(jiǎn)單的說,花名冊(cè)清楚描述了班里每一個(gè)人的狀況。描述的每一個(gè)項(xiàng)目在這里被叫做屬性。NTFS將文件作為屬性、屬性值的集合來處理。每個(gè)屬性由單個(gè)的流(stream)組成,即簡(jiǎn)單的字符排列。嚴(yán)格的說,NTFS并不對(duì)文件進(jìn)行操作,而只對(duì)屬性流進(jìn)行讀寫。 可以想想的是,花名冊(cè)的大小有限(因?yàn)榛麅?cè)是用來查詢的),而文件的屬性可能很大(對(duì)于那些調(diào)皮的學(xué)生,老師總要花費(fèi)更多的心血),因此,當(dāng)文件屬性太大的時(shí)候,NTFS系統(tǒng)會(huì)將該屬性值存放到卷中某個(gè)位置,而花名冊(cè)中的屬性只會(huì)記錄該屬性索引到外部的地址,以及索引區(qū)的大小。這種“裝不下”的屬性又被稱為文件的屬性又分為“非常駐屬性”。與之

12、相反,能夠保存在“花名冊(cè)”中的屬性又叫做“常駐屬性”。2.1文件的存儲(chǔ)我想我已經(jīng)清楚的向您展示了MFT的全貌,再來回顧一下,文件$MFT本身是一個(gè)文件(老師也是人),但是它亦是卷上每個(gè)文件的記錄集合(花名冊(cè)),每個(gè)文件擁有1K的空間(老師是公平的),用來記錄文件屬性,包括常駐屬性和非常駐屬性。那么您現(xiàn)在是不是有老大一個(gè)問號(hào),我一直在強(qiáng)調(diào)文件的記錄,那么文件的真實(shí)數(shù)據(jù)是如何存放的呢?想要知道這一點(diǎn),就要請(qǐng)您耐心的看完下面對(duì)MFT屬性的介紹。它將向您展示,這本花名冊(cè)的精妙之處。2.2 文件的MFT屬性介紹MFT的內(nèi)容由不同的屬性組合而成。以下是一個(gè)真實(shí)的MFT記錄?,F(xiàn)在,我們來剖析一下它的屬性內(nèi)容

13、。表5是這MFT記錄的屬性列表。對(duì)于每一個(gè)MFT記錄來說,都會(huì)包含幾種屬性,但不可能包含所有的屬性。老師當(dāng)然根據(jù)學(xué)生不同的特點(diǎn)設(shè)計(jì)花名冊(cè)的屬性。屬性號(hào)屬性名屬性描述 0X10$STANDRD_INFORMATION(標(biāo)準(zhǔn)屬性)包括基本文件屬性,如只讀、存檔;時(shí)間標(biāo)記,如文件的創(chuàng)建時(shí)間和最近一次修改的時(shí)間;有多少目錄指向本文件 0X20$ATTRIBUTE_LIST(屬性列表)當(dāng)一個(gè)文件需要使用多個(gè)MFT文件記錄時(shí),用來表示該文件的屬性列表 0X30$FILE_NAME(文件名屬性)這是以Unicode字符表示的,由于MS-DOS不能正確識(shí)別Win32子系統(tǒng)創(chuàng)建的文件名,當(dāng)Win32子系統(tǒng)創(chuàng)建一

14、個(gè)文件名時(shí),MTFS會(huì)自動(dòng)生成一個(gè)備用的MS-DOS文件名,所以一個(gè)文件可以有多種文件名屬性。 0X40$VOLUME_VERSION(卷版本)卷版本號(hào) 0X50$SECURITY_DEscriptOR(安全描述符)這是為了向后兼容而被保留的,主要用于保護(hù)文件以防止未授權(quán)訪問。 0X60$VOLUME_NAME(卷名)卷名稱或卷標(biāo)識(shí) 0X70$VOLUME_INFORMATION(卷信息)卷信息 0X80$DATA(數(shù)據(jù)屬性)這是文件的內(nèi)容 0X90$INDEX_ROOT(索引根屬性)索引根 0XA0$INDEX_ALLOCATION(索引分配屬性)索引分配 0XB0$BITMAP(位圖屬性)

15、位圖 0XC0$SYMBOLIC_LINK(符號(hào)鏈接)符號(hào)鏈接 0XD0$EA_INFORMATION(EA信息)擴(kuò)充屬性信息:主要為與OS/2兼容 0XE0$EA擴(kuò)充屬性:主要為與OS/2兼容 0X100$OBJECT_ID對(duì)象ID:一個(gè)具有64個(gè)字節(jié)的標(biāo)識(shí)符,其中最低的16個(gè)字節(jié)對(duì)卷來說是唯一的 表5 NTFS卷上常用屬性說明以下是一個(gè)實(shí)際的MFT記錄,我們通過對(duì)它的分析向您展示MFT記錄的屬性。46 49 4c 45 30 00 03 00 17 cd 13 1a 00 00 00 00 頭屬性01 00 01 00 38 00 01 00 b0 01 00 00 00 04 00 00

16、00 00 00 00 00 00 00 00 06 00 00 00 00 00 00 00bb 02 00 00 00 00 00 00 10 00 00 00 60 00 00 00 標(biāo)準(zhǔn)頭00 00 18 00 00 00 00 00 48 00 00 00 18 00 00 00 屬性e0 e3 e1 a0 66 e9 c3 01 e0 e3 e1 a0 66 e9 c3 01e0 e3 e1 a0 66 e9 c3 01 e0 e3 e1 a0 66 e9 c3 0106 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00

17、 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 30 00 00 00 68 00 00 00 文件名00 00 18 00 00 00 03 00 4a 00 00 00 18 00 01 00 屬性05 00 00 00 00 00 05 00 e0 e3 e1 a0 66 e9 c3 01e0 e3 e1 a0 66 e9 c3 01 e0 e3 e1 a0 66 e9 c3 01e0 e3 e1 a0 66 e9 c3 01 00 40 00 00 00 00 00 0000 40 00 00 00 00 00 0

18、0 06 00 00 00 00 00 00 0004 03 24 00 4d 00 46 00 54 00 00 00 00 00 00 0080 00 00 00 68 00 00 00 01 00 40 00 00 00 01 00 數(shù)據(jù)流00 00 00 00 00 00 00 00 f1 1f 00 00 00 00 00 00 屬性40 00 00 00 00 00 00 00 00 20 ff 01 00 00 00 0000 1c ff 01 00 00 00 00 00 1c ff 01 00 00 00 0021 48 06 24 31 01 f3 aa 02 31 01

19、fd 7a 05 31 01f3 38 02 31 01 c3 4b 05 00 a2 6b 81 d0 50 3d e1b0 00 00 00 48 00 00 00 01 00 10 00 00 00 05 00 位圖00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 屬性40 00 00 00 00 00 00 00 00 10 00 00 00 00 00 0000 10 00 00 00 00 00 00 00 10 00 00 00 00 00 0031 01 40 4b 0f 00 00 00 ff ff ff ff 00 00 00

20、00 結(jié)束標(biāo)志 MFT記錄中的每一個(gè)屬性都用不同的顏色標(biāo)識(shí)出來。第一個(gè)屬性被稱為屬性頭,此屬性是每一個(gè)MFT的都有的(見表6)。接下來分別是標(biāo)準(zhǔn)頭屬性、文件名屬性(見表7)、數(shù)據(jù)流屬性(見表9)和位圖屬性。這些屬性(不包括屬性頭)的的共性在于,它們的前8個(gè)字節(jié)(我稱它為小頭屬性)的前4個(gè)字節(jié)為此屬性的號(hào)(屬性號(hào)與屬性名稱的對(duì)應(yīng)見下表4),后4個(gè)字節(jié),代表的是此屬性的長(zhǎng)度(字節(jié)數(shù))。最后,MFT的結(jié)束標(biāo)志為ff ff ff ff。以下是幾個(gè)重要的MFT屬性介紹(1)MFT文件記錄屬性頭結(jié)構(gòu)偏移長(zhǎng)度描述 0X004固定值“FILE” 0X042更新序列號(hào)偏移,與操作系統(tǒng)有關(guān) 0X062固定列表大小

21、 0X088日志文件序列號(hào) 0X102序列號(hào)(用于記錄文件被反復(fù)使用的次數(shù)) 0X122硬連接數(shù),跟目錄中的項(xiàng)目關(guān)聯(lián),非常重要的參數(shù) 0X142第一個(gè)屬性的偏移 0X162標(biāo)志字節(jié) 0X184文件記錄實(shí)時(shí)大?。ㄗ止?jié)) 0X1C4文件記錄分配大小(字節(jié)) 0C208基礎(chǔ)記錄 (0: itself) 0X282下一個(gè)自由ID號(hào) 0X2A2邊界 0X2C4WINDOWS XP中使用,本MFT記錄號(hào) 0X304MFT的使用標(biāo)記 表6 文件屬性頭說明(2)文件名屬性偏移大小值描述 0X0040X30屬性類型 0X0440X68總長(zhǎng)度 0X0810X00非常駐標(biāo)志(0X00:常駐屬性;0X01:非常駐屬性

22、) 0X0910X00屬性名的名稱長(zhǎng)度 0X0A20X18屬性名的名稱偏移 0X0C20X00標(biāo)志 0X0E20X03標(biāo)識(shí) 0X1040X4A屬性長(zhǎng)度(L) 0X1420X18屬性內(nèi)容起始偏移 0X1610X01索引標(biāo)志 0X1710X00填充 0X1880500000000000500父目錄記錄號(hào)(前6個(gè)字節(jié))+序列號(hào)(與目錄相關(guān)) 0X208e0e3e1a066e9c301文件創(chuàng)建時(shí)間 0X288同上文件修改時(shí)間 0X308同上最后一次MFT更新的時(shí)間 0X388同上最后一次訪問時(shí)間 0X4080040000000000000文件分配大小 0X4880040000000000000文件實(shí)際

23、大小 0X50406000000標(biāo)志,如目錄、壓縮、隱藏等 0X54400000000用于EAS和重解析點(diǎn) 0X58104以字符計(jì)的文件名長(zhǎng)度,每字節(jié)占用字節(jié)數(shù)由下一字節(jié)命名空間確定,一個(gè)字節(jié)長(zhǎng)度,所以文件名最大為255字節(jié)長(zhǎng)(L) 0X59103文件名命名空間,見表8 0X602L24004d004600以Unicode方式標(biāo)識(shí)的文件名 表7 文件名屬性說明 標(biāo)志意義描述 0POSIX這是最大的命名空間。它大小寫敏感,并允許使用除NULL(0)和左斜框(/)以外的所有Unicode字符作為文件名,文件名最大長(zhǎng)度為255個(gè)字符。有一些字符,如冒號(hào)(:),在NTFS下有效,但WINDOWS不讓使

24、用。 1WIN32WIN32和POSIX命名空間的一個(gè)子集,不區(qū)分大小寫,可以使用除“*/:?|”以外的所有Unicode字符。另外,文件不能以句點(diǎn)和空格結(jié)束。 2DOSDOS是WIN32命名空間的一個(gè)子集,要求比空格的ASC|碼要大,且不能使用* + / , : ; ? | 等字符,另外其格式是1-8個(gè)字符的文件名,然后是句點(diǎn)分隔,然后是1-3個(gè)字符的擴(kuò)展名。 3Win32 & DOS該命名空間要求文件名對(duì)Win32和DOS命名空間都有效,這樣,文件名就可以在文件記錄中只保存一個(gè)文件名 表8 常見命名空間(3)數(shù)據(jù)流屬性偏移大小值意義 0X0040X80屬性類型(0X80,數(shù)據(jù)流屬性) 0X

25、0440X48屬性長(zhǎng)度(包括本頭部的總大小) 0X0810X01非常駐標(biāo)志(0X00:常駐屬性;0X01:非常駐屬性) 0X0910X00名稱長(zhǎng)度,$AttrDef中定義,所以名稱長(zhǎng)度為0 0X0A20X0040名稱偏移 0X0C20X00標(biāo)志,0X0001為壓縮標(biāo)志,0X4000為加密標(biāo)志,0X8000為系數(shù)文件標(biāo)志 0X0E20X0001標(biāo)識(shí) 0X1080X00其實(shí)VCN 0X1880X1FF1結(jié)束VCN 0X2020X40數(shù)據(jù)運(yùn)行的偏移 0X2220X00壓縮引擎 0X2440X00填充 0X2880X1FF2000為屬性值分配大小(按分配的簇的字節(jié)數(shù)計(jì)算) 0X3080X1FF1C00

26、屬性值實(shí)際大小 0X3880X1FF1C00屬性壓縮大小 0X402148062431數(shù)據(jù)運(yùn)行 表9 數(shù)據(jù)流屬性說明(4) 位圖屬性位圖屬性在NTFS的屬性中是一個(gè)很靈活的屬性。當(dāng)它位于不同的文件下有不同的含義。比如:例子中的MFT是文件$MFT自身的記錄。這里的位圖屬性有特殊的含義。它在此處為非常駐屬性,標(biāo)志MFT文件的使用情況(類似$BITMAP的作用)。例子中31 01 40 4b 0f為數(shù)據(jù)運(yùn)行,起始簇為0 x0f4b40,占用一個(gè)簇。該簇中以每一位代表一個(gè)MFT記錄的使用情況(占用為1,未使用為0)。實(shí)際操作中,可以根據(jù)文件的ID號(hào)查找與該文件的MFT對(duì)應(yīng)的位。具體方法為,首先在$M

27、FT的記錄中讀取0 xB0屬性運(yùn)行,根據(jù)運(yùn)行找到$MFT:bitmap位置。對(duì)于文件file,根據(jù)MFT記錄的順序記錄文件file位于第幾個(gè),假設(shè)記錄號(hào)為ID,ID/8=A, ID%8=B。表明該文件的MFT記錄的位圖位從$MFT:bitmap的首字節(jié)偏移A個(gè)字節(jié),之后的第B個(gè)位。2.3關(guān)于文件屬性的說明現(xiàn)在說明幾點(diǎn)在數(shù)據(jù)恢復(fù)中很重要的幾個(gè)屬性標(biāo)志(已用顏色標(biāo)出) 第一處標(biāo)志代表的是文件的狀態(tài):1表示普通文件;0表示文件被刪除;3表示普通目錄;2表示目錄被刪除。當(dāng)然,對(duì)于系統(tǒng)的文件可能有除此以外的標(biāo)志符。 第二處為文件記錄的實(shí)際大小。雖然每一個(gè)MFT記錄都分配1K的空間,但實(shí)際使用的字節(jié)數(shù)并相

28、同。因此,這里記錄的是實(shí)際使用的字節(jié)數(shù)。 第三處為MFT的使用標(biāo)記,它在MFT記錄的兩個(gè)扇區(qū)中與每扇區(qū)的最末4個(gè)字節(jié)相對(duì)應(yīng),如若不然,系統(tǒng)將示此記錄為非法記錄。 第四處為數(shù)據(jù)運(yùn)行,是在數(shù)據(jù)流屬性為非常駐的狀況下索引到數(shù)據(jù)流的關(guān)鍵。其具體計(jì)算方式如下:這是例子中的80H屬性,其中藍(lán)色部分為該80H屬性(數(shù)據(jù)屬性)的運(yùn)行:80 00 00 00 68 00 00 00 01 04 40 00 00 00 08 0000 00 00 00 00 00 00 00 4b 00 00 00 00 00 00 0048 00 00 00 00 00 00 00 00 c0 04 00 00 00 00 0

29、088 bc 04 00 00 00 00 00 88 bc 04 00 00 00 00 0024 00 53 00 44 00 53 00 21 48 06 24 31 01 f3 aa02 31 01 0d 7a fd 31 01 f3 38 02 31 01 c3 4b 0500 a2 6b 81 d0 50 3d e1該運(yùn)行分為子運(yùn)行1:21 48 06 24子運(yùn)行2:31 01 f3 aa 02子運(yùn)行3:31 01 0d 7a fd子運(yùn)行4:31 01 f3 38 02子運(yùn)行5:31 01 c3 4b 05以子運(yùn)行1:“21 48 06 24”為例,“2”表示后面4個(gè)字節(jié)中后面2個(gè)

30、字節(jié)是子運(yùn)行的起始簇號(hào),即子運(yùn)行的起始簇號(hào)為“24 06”,“1”表示前面的1個(gè)字節(jié)表示子運(yùn)行的大小,即該子運(yùn)行的大小為“48”。所以該文件數(shù)據(jù)實(shí)際是從起始扇區(qū)號(hào)為0 x2406的地方,占用0 x48個(gè)簇。接下來是子運(yùn)行2,運(yùn)行2的簇號(hào)的起始位置為0 x2406 + 0 x02aaf3 = 0 x2cef9。占用0 x01個(gè)簇。接下來是子運(yùn)行3,按照前面的理論,子運(yùn)行3的起始簇號(hào)應(yīng)該是0 x2cef9+0 xfd0a0d。但是0 xfd0a0d的第一個(gè)字節(jié)為1(fd的首字節(jié)),證明此數(shù)為負(fù)數(shù),所以不能簡(jiǎn)單的做加法,而應(yīng)該取該數(shù)的補(bǔ)數(shù)來計(jì)算。既,0 xfd7a0d取反加1,得到0 x2F5F2,

31、所以運(yùn)行3的起始扇區(qū)號(hào)為0 x2cef9 - 0 x285f3 = 0 x4096。占用0 x01個(gè)簇。依此類推直到子運(yùn)行之后為“00”時(shí)結(jié)束。在程序中,一個(gè)Run代表整個(gè)運(yùn)行,每一個(gè)子運(yùn)行以鏈表的方式鏈接在一起。 此處由一個(gè)字節(jié)標(biāo)識(shí)文件名的長(zhǎng)度,故NTFS磁盤格式下的文件名長(zhǎng)度不能超過256個(gè)字節(jié),但是文件名的存儲(chǔ)格式是以Unicode的形式存儲(chǔ)的,所以,文件名在磁盤中占用的真實(shí)字節(jié)數(shù)是該值的兩倍。除此以外,關(guān)于數(shù)據(jù)屬性的還有幾個(gè)方面需要說明(1)關(guān)于文件名屬性。在MFT中,可能有多個(gè)文件名屬性。這可能是因?yàn)槲募拿臻g不同。例如:一個(gè)DOS命名空間下是83的短文件名格式。而WINDOWS

32、下是Unicode的命名空間。(2)當(dāng)數(shù)據(jù)運(yùn)行中的簇號(hào)的首字節(jié)為“1”時(shí),表明應(yīng)用前次的簇?cái)?shù)減去該簇號(hào)數(shù),得到結(jié)果(此點(diǎn)在運(yùn)行的例子中有詳盡的說明)。(3)NTFS使用邏輯簇號(hào)(LCN,Logical Cluster Number)和虛擬簇號(hào)(VCN,Virtual Cluster Number)來對(duì)簇進(jìn)行定位。LCN是對(duì)整個(gè)卷中的所有的簇從頭到尾進(jìn)行簡(jiǎn)單編號(hào)。VCN是對(duì)屬于特定文件的簇從頭到尾進(jìn)行編號(hào),是邏輯編號(hào)。(4)文件$Bitmap標(biāo)識(shí)的是硬盤空間里簇的占用情況。它用一位代表一簇。但是對(duì)于MFT記錄的空間,因?yàn)橛脖P是預(yù)先保留下來的,所以,它在文件$Bitmap已經(jīng)將分配給MFT記錄的所

33、有簇都標(biāo)識(shí)為已占用(這個(gè)大小一般是硬盤整個(gè)空間的12),所以,它就不能充分表示有多少個(gè)記錄項(xiàng)被使用。$MFT:bitmap作為文件屬性恰好可以彌補(bǔ)這一缺點(diǎn)。事實(shí)上,NTFS的bitmap屬性就是為了更方便更精確的計(jì)算磁盤的使用空間。 三 關(guān)于目錄的文件看到這個(gè)題目,您會(huì)不會(huì)和詫異?前面我苦口婆心的告訴您,在NTFS系統(tǒng)說,目錄也是文件,目錄以文件的形式存在,那么為什么這里又要專門用一節(jié)來討論目錄呢?3.1 目錄文件的屬性我還是舉前面那個(gè)例子,對(duì)于一個(gè)班來說,雖然大家都是平等的,但是班級(jí)里面有小組長(zhǎng),小組長(zhǎng)和組員一樣,都是人,但是,所行使的職能不同。因此,目錄雖然是文件,但是目錄包含的屬性不同。

34、一般來說,目錄包括頭屬性、標(biāo)準(zhǔn)屬性(0X10)、文件名屬性(0X30)、索引根屬性(0X90),大多數(shù)時(shí)候還會(huì)包含索引分配屬性(0XA0)。對(duì)于真實(shí)的文檔來說,它的內(nèi)容是它其中的文字。那么對(duì)于目錄來說,它的內(nèi)容應(yīng)該是什么呢?相信您可以猜到,當(dāng)然是目錄中包含的保存在該目錄下的所有文件的信息啦 (如果您了解FAT的格式,您對(duì)這一點(diǎn)將會(huì)深信不疑) 。事實(shí)當(dāng)然應(yīng)該如此,不然目錄與文件如何聯(lián)系呢?目錄的數(shù)據(jù)區(qū)(與文件的數(shù)據(jù)區(qū)相似)中,保存在該目錄下的每一個(gè)文件都有一個(gè)項(xiàng)目。這個(gè)項(xiàng)目我們把它稱作索引項(xiàng),因?yàn)槟夸浲ㄟ^它索引到文件。因此,與文件的數(shù)據(jù)屬性一樣,目錄的“數(shù)據(jù)屬性”有一個(gè)新的名字叫做“索引根屬性”

35、(0X90屬性)。索引根屬性包括兩個(gè)方面的內(nèi)容。一個(gè)是該屬性的頭,這里我把他叫做索引頭。還有一個(gè)部分是索引部分。索引部分又包括“索引項(xiàng)”和“索引項(xiàng)尾”。以下是一個(gè)目錄典型的MFT。屬性頭 10屬性頭 10屬性 30屬性頭 30屬性 90屬性頭(索引頭) 90屬性 (索引項(xiàng)) 索引項(xiàng)1索引項(xiàng)200 00 00 00 00 00 00 00 10 00 00 00 02 00 00 00 (索引尾) FF FF FF FF 82 79 47 11 表10 小目錄典型MFT記錄好了現(xiàn)在你可以閱讀下表,詳細(xì)了解0X90屬性中的索引頭和索引部分。偏移大小意義 0X004屬性號(hào) 0X044屬性長(zhǎng)度 0X0

36、81常駐標(biāo)志 0X091名稱長(zhǎng)度 0X0A2名稱偏移 0X0C2標(biāo)志(常駐屬性不能壓縮) 0X0E2屬性ID 0X104屬性長(zhǎng)度(不含頭) 0X142屬性偏移 0X161索引標(biāo)志 0X171填充 0X188屬性名 0X204索引屬性類型 0X244排序規(guī)則 0X284索引項(xiàng)分配大小 0X2C1每索引記錄的簇?cái)?shù) 0X2D3填充 0X304每索引的偏移 0X344索引項(xiàng)的總大小 0X384索引項(xiàng)的分配 0X3C1標(biāo)志,(0X01大索引) 0X3C3填充 表11 索引根屬性中索引頭部分結(jié)構(gòu)偏移大小意義 0X008文件的MFT記錄號(hào) 0X082索引項(xiàng)大小 0X0A2名稱偏移 0X0C4索引標(biāo)志填充 0

37、X108父目錄的MFT文件參考號(hào) 0X188文件創(chuàng)建時(shí)間 0X208文件修改時(shí)間 0X288文件最后修改時(shí)間 0X308文件最后訪問時(shí)間 0X388文件分配大小 0X408文件實(shí)際大小 0X488文件標(biāo)志 0X501文件名長(zhǎng)度(F) 0X511文件名命名空間 0X522F文件名(填充到8字節(jié)) 0X52+2FP 0X52 +P+2F8子節(jié)點(diǎn)索引緩存的VCL 表12 索引項(xiàng)結(jié)構(gòu)索引根屬性就是由索引頭和這一個(gè)個(gè)的索引項(xiàng)組成。每個(gè)索引項(xiàng)對(duì)應(yīng)一個(gè)文件。當(dāng)文件被刪除,索引項(xiàng)也會(huì)隨之消失。那么您還記不記得,索引根屬性是在MFT記錄里的。當(dāng)索引項(xiàng)越來越多,1K的空間當(dāng)然無法存儲(chǔ)該屬性的。那么這個(gè)時(shí)候,NTF

38、S系統(tǒng)是如何處理的呢?也許,您會(huì)想到,它可能和數(shù)據(jù)流的方法一樣。通過數(shù)據(jù)運(yùn)行索引到外部的數(shù)據(jù)區(qū)。如果您想到這一層,那么恭喜您,您已經(jīng)開始熟悉NTFS系統(tǒng)。NTFS的確是這么做的。但是,與數(shù)據(jù)屬性(0X80)有一點(diǎn)小小的區(qū)別。它并非簡(jiǎn)單的在0X90屬性中添加一個(gè)運(yùn)行。這是因?yàn)槟夸浛赡芎艽?,而通過目錄查找文件需要一個(gè)有效的算法。NTFS中,系統(tǒng)利用B+樹的方法查找文件(這是一個(gè)較為復(fù)雜的問題,后面有詳細(xì)介紹)。于是,當(dāng)索引項(xiàng)太大,不能全部存儲(chǔ)在MFT記錄中時(shí),就會(huì)有兩個(gè)附加的屬性出現(xiàn):索引分配屬性(0XA0),用于描述B+樹目錄的子節(jié)點(diǎn);索引位圖屬性(0XB0),用于描述索引分配屬性使用的虛擬簇號(hào)

39、。我需要保存在MFT外部的索引稱作“外部索引”。0XA0屬性的結(jié)構(gòu)與0X80屬性完全一致。因此您可以參見表9。我們把這種有0XA0屬性的目錄稱作大目錄。大目錄的MFT記錄可能如下(在此只提出重要的屬性,真實(shí)的MFT記錄可能還包含別的屬性)屬性頭 0X10屬性頭 0X10屬性 0X30屬性頭 0X30屬性 0X90屬性頭(索引頭) 0X90屬性 (可能為空,也可能含有子項(xiàng)目。為1級(jí)節(jié)點(diǎn))注意:90H屬性的最后8位是它的子節(jié)點(diǎn)VCN,可以根據(jù)該簇號(hào)和運(yùn)行定位它的子節(jié)點(diǎn)。 0XA0屬性頭0XA0屬性 0XB0屬性頭 0XB0屬性 FF FF FF FF 82 79 47 11 表12 大目錄典型MF

40、T記錄 0XA0屬性的運(yùn)行記錄了外部索引分配的空間。目錄的外部索引是以一個(gè)索引塊為單位分配的(與簇的概念類似)。一般來說,一個(gè)索引塊占4K的空間。索引塊以“INDEX”開頭,其頭部的固定結(jié)構(gòu)如下:偏移大小意義 0X004INDEX 0X042更新序列號(hào)的偏移 0X062更新序列號(hào)與更新數(shù)組(以字節(jié)為單位) 0X088日志文件序列號(hào) 0X108本索引緩存在索引分配中的VCN 0X184索引項(xiàng)的偏移(以字節(jié)為單位,相對(duì)0 x18偏移到索引項(xiàng)) 0X1C4總的索引項(xiàng)的大小(相對(duì)0X18偏移到結(jié)尾) 0X204索引項(xiàng)分配大小 0X241如果不是葉節(jié)點(diǎn),置1,表示還有子節(jié)點(diǎn) 0X253用0填充 0X28

41、2更新序列(重要:與每扇區(qū)最后2個(gè)字節(jié)的值一致) 0X2A2S-1更新序列數(shù)組 表13 索引區(qū)頭部結(jié)構(gòu)索引塊頭部之后,連接的是索引目錄項(xiàng),其結(jié)構(gòu)與前面介紹的索引項(xiàng)目是一致的。這里不重復(fù)介紹。3.2 文件的查找方式文件的索引延展到外部是分層次的。其層級(jí)結(jié)構(gòu)圖如下。理論上說,3級(jí)目錄可以容納幾千個(gè)文件。已經(jīng)足夠滿足現(xiàn)在的需求。簡(jiǎn)單的介紹一下目錄的生成方式。目錄一定是從小目錄到大目錄(因?yàn)槲募枰粋€(gè)個(gè)的拷貝)。小目錄的結(jié)構(gòu)很簡(jiǎn)單,前面也已經(jīng)做了詳細(xì)的分析。此時(shí)再不斷增加文件,目錄會(huì)有以下幾個(gè)步驟的變化。1、一級(jí)大目錄(僅有一個(gè)索引塊)索引塊既是葉節(jié)點(diǎn)。它的VCL為0。一個(gè)索引塊只能存放20-30個(gè)文件。索引塊中的索引項(xiàng),以文件名按照字母大小排列。2、二級(jí)大目錄(有多個(gè)索引塊)當(dāng)文件繼續(xù)增加,一個(gè)索引塊不能滿足要求,此時(shí)再增加一個(gè)索引塊,VCL為1,并在0X90屬性中增加一個(gè)索引項(xiàng)目,為了描述,我把這個(gè)項(xiàng)目叫做基點(diǎn)。仍然對(duì)所有的項(xiàng)目按

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論