NTFS是一個(gè)比FAT復(fù)雜的多的文件系統(tǒng),我們一起努力來(lái)把它完整的解讀出來(lái)
NTFS的引導(dǎo)扇區(qū)也是完成引導(dǎo)和定義分區(qū)參數(shù),和FAT分區(qū)不同,FAT分區(qū)的BOOT記錄正常,就顯示分區(qū)沒(méi)有錯(cuò)誤,即使文件不正確,而NTFS分區(qū)的BOOT不是分區(qū)的充分條件,它要求必須MFT中的系統(tǒng)記錄如$MFT等正常該分區(qū)才能正常訪問(wèn)。其BPB參數(shù)如下表所示。
字節(jié)偏移 長(zhǎng)度 常用值 意義
0x0B 字 0x0002 每扇區(qū)字節(jié)數(shù)
0x0D 字節(jié) 0x08 每簇扇區(qū)數(shù)
0x0E 字 0x0000 保留扇區(qū)
0x10 3字節(jié) 0x000000 總為0
0x13 字 0x0000 NTFS未使用,為0
0x15 字節(jié) 0xF8 介質(zhì)描述
0x16 字 0x0000 總為0
0x18 字 0x
0x
0x
0x20 雙字 0x00000000 NTFS未使用,為0
0x28 8字節(jié) 0x4AF
0x30 8字節(jié) 0x0400000000000000 $MFT的邏輯簇號(hào)
0x38 8字節(jié) 0x54FF070000000000 $MFTMirr的邏輯簇號(hào)
0x40 雙字 0xF6000000 每MFT記錄簇?cái)?shù)
0x44 雙字 0x01000000 每索引簇?cái)?shù)
0x48 8字節(jié) 0x
0x50 雙字 0x00000000 檢驗(yàn)和
MFT中的文件記錄大小一般是固定的,不管簇的大小是多少,均為1KB。文件記錄在MFT文件記錄數(shù)組中物理上是連續(xù)的,且從0開(kāi)始編號(hào),所以,NTFS是預(yù)定義文件系統(tǒng)。MFT僅供系統(tǒng)本身組織、架構(gòu)文件系統(tǒng)使用,這在NTFS中稱為元數(shù)據(jù)(metadata,是存儲(chǔ)在卷上支持文件系統(tǒng)格式管理的數(shù)據(jù)。它不能被應(yīng)用程序訪問(wèn),只能為系統(tǒng)提供服務(wù))。其中最基本的前16個(gè)記錄是操作系統(tǒng)使用的非常重要的元數(shù)據(jù)文件。這些元數(shù)據(jù)文件的名字都以“$”開(kāi)始,所以是隱藏文件,在Windows 2000/XP中不能使用dir命令(甚至加上/ah參數(shù))像普通文件一樣列出。在WINHEX中帶有NFI.EXE,用此工具可以顯示這些記錄與文件的對(duì)應(yīng)關(guān)系,下一次再詳細(xì)解釋。
這些元數(shù)據(jù)文件是系統(tǒng)驅(qū)動(dòng)程序管理卷所必需的,Windows 2000/XP給每個(gè)分區(qū)賦予一個(gè)盤符并不表示該分區(qū)包含有Windows 2000/XP可以識(shí)別的文件系統(tǒng)格式。如果主文件表?yè)p壞,那么該分區(qū)在Windows 2000/XP下是無(wú)法讀取的。為了使該分區(qū)能夠在Windows 2000/XP下能被識(shí)別,就必須首先建立Windows 2000/XP可以識(shí)別的文件系統(tǒng)格式即主文件表,這個(gè)過(guò)程可通過(guò)高級(jí)格式化該分區(qū)來(lái)完成。Windows以簇號(hào)來(lái)定位文件在磁盤上的存儲(chǔ)位置,在FAT格式的文件系統(tǒng)中,有關(guān)簇號(hào)的指針包含在FAT表中,在NTFS中,有關(guān)簇號(hào)的指針則包含在$MFT及$MFTMirr文件中。
NTFS使用邏輯簇號(hào)(Logical Cluster Number,LCN)和虛擬簇號(hào)(Virtual Cluster Number,VCN)來(lái)對(duì)簇進(jìn)行定位。LCN是對(duì)整個(gè)卷中所有的簇從頭到尾所進(jìn)行的簡(jiǎn)單編號(hào)。用卷因子乘以LCN,NTFS就能夠得到卷上的物理字節(jié)偏移量,從而得到物理磁盤地址。VCN則是對(duì)屬于特定文件的簇從頭到尾進(jìn)行編號(hào),以便于引用文件中的數(shù)據(jù)。VCN可以映射成LCN,而不必要求在物理上連續(xù)。
在NTFS卷上,跟隨在BPB后的數(shù)據(jù)字段形成一個(gè)擴(kuò)展BPB。這些字段中的數(shù)據(jù)使得 Ntldr能夠在啟動(dòng)過(guò)程中找到主文件表MFT(Master File Tabl 。在NTFS卷上,MFT并不象在FAT 16卷和FAT 32卷上一樣,被放在一個(gè)預(yù)定義的扇區(qū)中。由于這個(gè)原因,如果在MTF的正常位置中有壞扇區(qū)的話,就可以把MFT移到別的位置。但是,如果該數(shù)據(jù)被破壞,就找不到MFT的位置,Windows 2000假設(shè)該卷沒(méi)有被格式化。
因此,如果一個(gè)ntfs的卷提示未格式化,可能并未破壞MFT,依據(jù)BPB的各字段的意思是可以重建BPB的。
NTFS的缺省簇的大小
卷大小 每簇的扇區(qū) 缺省的簇大小
小于等于512MB 1 512字節(jié)
513MB~1024MB(1GB) 2 1024字節(jié)(1KB)
1025MB~2048MB(2GB) 4 2048字節(jié)(2KB)
大于等于2049MB 8 4KB
從上面可以看出,也就是說(shuō)不管驅(qū)動(dòng)器多大 NTFS 簇的大小不會(huì)超過(guò) 4KB
NTFS文檔:文檔屬性定義
每個(gè)文檔屬性都由以下部分組成:
一個(gè)由該屬性的實(shí)際值組成的被稱為“流”的重要的字節(jié)序列,元數(shù)據(jù)可訪問(wèn)該流。
文件中的每個(gè)文件屬性都可能會(huì)有一個(gè)名字:在這種情況下,在命令行方式下可以通過(guò)語(yǔ)法“文件名:屬性名”來(lái)訪問(wèn)該流(這也是文件名中不能使用“:”的原因)。Windows NT®
使用以下在元數(shù)據(jù)文件$AttrDef中預(yù)定義的文件屬性列表(一般會(huì)有一個(gè)未命名流,為缺省流,未命名流只能有一個(gè),而命名流可以有多個(gè),NTFS支持多流文件):
10 $STANDARD_INFORMATION (標(biāo)準(zhǔn)信息)
20 $ATTRIBUTE_LIST (屬性列表)