當用戶將硬盤的一個分區(qū)格式化為NTFS分區(qū)時,就建立了一個NTFS文件系統(tǒng)結(jié)構(gòu)。NTFS文件系統(tǒng)與FAT文件系統(tǒng)一樣,也是用簇為基本單位對磁盤空間和文件存儲進行管理的。一個文件總是占有若干個簇,即使在最后一個簇沒有完全放滿的情況下,也是占用了整個簇的空間,這也是造成磁盤空間浪費的主要原因。文件系統(tǒng)通過簇來管理磁盤,并不需要知道磁盤扇區(qū)的大小,這樣就使NTFS保持了與磁盤扇區(qū)大小的獨立性,從而使不同大小的磁盤選擇合適的簇。
NTFS分區(qū)也被稱為NTFS卷,卷上簇的大小,又稱為卷因子,其大小是用戶在創(chuàng)建NTFS卷時確定的。和FAT文件系統(tǒng)一樣,卷因子的大小和文件系統(tǒng)的性能有著非常直接的關系。當一個簇占用的空間太小時,會出現(xiàn)太多的磁盤碎片,這樣在空間和文件訪問時間上會造成浪費;而相反的當一個簇占用的空間太大時,直接造成了磁盤空間的浪費。因此,最大限度地優(yōu)化系統(tǒng)對文件的訪問速度和最大限度地減少磁盤空間的浪費是確定簇的大小的主要因素。簇的大小一定是扇區(qū)大小的整數(shù)倍,通常是2n(n為整數(shù))。表4-28是NTFS文件系統(tǒng)中不同卷大小和簇的一般關系。當然這并不是完全一定的,只是系統(tǒng)格式化磁盤時的默認情況,這個默認的簇的值一般被認為是最能優(yōu)化系統(tǒng)的值。
表4-28 NTFS卷大小和簇大小關系表
卷大?。∕B) | 每簇的扇區(qū) | 默認的簇大小 |
≤512 | 1 | 512個字節(jié) |
513~1024 | 2 | 1024個字節(jié)(1KB) |
1025~2048 | 4 | 2048個字節(jié)(2KB) |
≥2049 | 8 | 4KB |
當一個分區(qū)由FAT卷轉(zhuǎn)變成為一個NTFS卷時,卷因子的大小總是占用一個扇區(qū)。
NTFS文件系統(tǒng)使用了邏輯簇號(Logical Cluster Number,LCN)和虛擬簇號(Virtual Cluster Number,VCN)對卷進行管理。其中LCN是對卷的第一個簇到最后一個簇進行編號,只要知道LCN號和簇的大小以及NTFS卷在物理磁盤中的起始扇區(qū)(絕對扇區(qū))就可以對簇進行定位,而這些信息在NTFS卷的引導扇區(qū)中可以找到(BPB參數(shù)),在系統(tǒng)底層也是用這種方法對文件的簇進行定位的。找到簇在磁盤中的物理位置的計算公式是:
每簇扇區(qū)數(shù)×簇號+卷的隱含扇區(qū)數(shù)(卷之前的扇區(qū)總數(shù))=簇的起始絕對扇區(qū)號
而虛擬簇號(VCN)則是將特定文件的簇從頭到尾進行編號,這樣做的原因是方便系統(tǒng)對文件中的數(shù)據(jù)進行引用,VCN并不要求在物理上是連續(xù)的,要確定VCN的磁盤上的定位需先將其轉(zhuǎn)換為LCN。
和FAT文件系統(tǒng)一樣,NTFS的第一個扇區(qū)為引導扇區(qū),即DBR扇區(qū)。其中有NTFS分區(qū)的引導程序和一些BPB參數(shù),系統(tǒng)根據(jù)這些BPB參數(shù)來得到分區(qū)的重要信息。如果沒有這些信息,分區(qū)將不能正常使用。
在分區(qū)的第一個扇區(qū)(引導扇區(qū)DBR)后是15個扇區(qū)的NTLDR區(qū)域,這16個扇區(qū)共同構(gòu)成$BOOT文件。在NTLDR后(但不一定是物理上相連的)是主文件表(Master File Table,MFT)區(qū)域,主文件表由文件記錄構(gòu)成,每個文件記錄占2個扇區(qū),文件記錄簡稱為FR(File Record)。在FAT文件系統(tǒng)中是通過FAT表和文件目錄項存儲文件數(shù)據(jù)和記錄文件的文件名、擴展名、建立時間、訪問時間、修改時間、文件屬性、文件大小、文件在磁盤中所占用的簇等信息進行管理的,而在NTFS文件系統(tǒng)中這些信息被稱為屬性,包括文件的內(nèi)容在NTFS中也稱為屬性,各種屬性被放入文件記錄中進行管理。當一個屬性太大,文件記錄中存放不下時,就會分配多個文件記錄進行存放;而當一個文件非常小時,可能這個文件的所有屬性都包含在一個文件記錄中了,甚至包括這個文件的數(shù)據(jù),也會作為屬性存放在其文件記錄中,這樣做的好處是節(jié)約了磁盤空間并且提高了文件訪問效率。
NTFS文件系統(tǒng)的主文件表中還記錄了一些非常重要的系統(tǒng)數(shù)據(jù),這些數(shù)據(jù)被稱為元數(shù)據(jù)(metadata)文件,簡稱為“元文件”,其中包括了用于文件定位和恢復的數(shù)據(jù)結(jié)構(gòu)、引導程序數(shù)據(jù)及整個卷的分配位圖等信息。NTFS文件系統(tǒng)將這些數(shù)據(jù)都當作文件進行管理,這些文件用戶是不能訪問的,它們的文件名的第一個字符都是“$”,表示該文件是隱藏的。在NTFS文件系統(tǒng)中,這樣的文件主要有16個,包括MFT本身($Mft)、MFT鏡像($MftMirr)、日志文件($LogFile)、卷文件($Volume)、屬性定義表($AttrDef)、根目錄($Root)、位圖文件($Bitmap)、引導文件($Boot)、壞簇文件($BadClus)、安全文件($Secure)、大寫文件($UpCase)擴展元數(shù)據(jù)文件($Extended metadata directory)、重解析點文件($Extend\$Reparse)、變更日志文件($Extend\$UsnJrnl)、配額管理文件($Extend\ $Quota)、對象ID文件($Extend\$ObjId)等。這16個元數(shù)據(jù)文件總是占據(jù)著MFT的前16項記錄,在這16項以后就是用戶建立的文件和文件夾的記錄了。
每個文件記錄在主文件表中占據(jù)的磁盤空間一般為1KB,也就是兩個扇區(qū),NTFS文件系統(tǒng)分配給主文件表的區(qū)域大約占據(jù)了磁盤空間的12.5%,剩余的磁盤空間用來存放其他元文件和用戶的文件。
綜上所述,NTFS文件系統(tǒng)的結(jié)構(gòu)大致可以用圖4-400進行說明。
圖4-400 NTFS文件系統(tǒng)的大致結(jié)構(gòu)
補充說明一下:
①圖4-400中的結(jié)構(gòu)只是NTFS文件系統(tǒng)的示意圖,并不完全成比例;
②元文件在圖中只體現(xiàn)了一部分,沒有畫完整,并且除了$BOOT文件以外,其他元文件的位置不是固定的,例如$MFT文件也可以在$MFTMirr文件之后。
③在NTFS文件系統(tǒng)所在分區(qū)的最后一個扇區(qū)是DBR的備份,但該扇區(qū)并不屬于NTFS文件系統(tǒng)。