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