当用户将硬盘的一个分区格式化为NTFS分区时,就建立了一个NTFS文件系统结构。NTFS文件系统与FAT文件系统一样,也是用簇为基本单位对磁盘空间和文件存储进行管理的。一个文件总是占有若干个簇,即使在最后一个簇没有完全放满的情况下,也是占用了整个簇的空间,这也是造成磁盘空间浪费的主要原因。文件系统通过簇来管理磁盘,并不需要知道磁盘扇区的大小,这样就使NTFS保持了与磁盘扇区大小的独立性,从而使不同大小的磁盘选择合适的簇。
NTFS分区也被称为NTFS卷,卷上簇的大小,又称为卷因子,其大小是用户在创建NTFS卷时确定的。和FAT文件系统一样,卷因子的大小和文件系统的性能有着非常直接的关系。当一个簇占用的空间太小时,会出现太多的磁盘碎片,这样在空间和文件访问时间上会造成浪费;而相反的当一个簇占用的空间太大时,直接造成了磁盘空间的浪费。因此,最大限度地优化系统对文件的访问速度和最大限度地减少磁盘空间的浪费是确定簇的大小的主要因素。簇的大小一定是扇区大小的整数倍,通常是2n(n为整数)。表4-28是NTFS文件系统中不同卷大小和簇的一般关系。当然这并不是完全一定的,只是系统格式化磁盘时的默认情况,这个默认的簇的值一般被认为是最能优化系统的值。
表4-28 NTFS卷大小和簇大小关系表
卷大小(MB) | 每簇的扇区 | 默认的簇大小 |
---|---|---|
≤512 | 1 | 512个字节 |
513~1024 | 2 | 1024个字节(1KB) |
1025~2048 | 4 | 2048个字节(2KB) |
≥2049 | 8 | 4KB |
当一个分区由FAT卷转变成为一个NTFS卷时,卷因子的大小总是占用一个扇区。
NTFS文件系统使用了逻辑簇号(Logical Cluster Number,LCN)和虚拟簇号(Virtual Cluster Number,VCN)对卷进行管理。其中LCN是对卷的第一个簇到最后一个簇进行编号,只要知道LCN号和簇的大小以及NTFS卷在物理磁盘中的起始扇区(绝对扇区)就可以对簇进行定位,而这些信息在NTFS卷的引导扇区中可以找到(BPB参数),在系统底层也是用这种方法对文件的簇进行定位的。找到簇在磁盘中的物理位置的计算公式是:
每簇扇区数×簇号+卷的隐含扇区数(卷之前的扇区总数)=簇的起始绝对扇区号
而虚拟簇号(VCN)则是将特定文件的簇从头到尾进行编号,这样做的原因是方便系统对文件中的数据进行引用,VCN并不要求在物理上是连续的,要确定VCN的磁盘上的定位需先将其转换为LCN。
和FAT文件系统一样,NTFS的第一个扇区为引导扇区,即DBR扇区。其中有NTFS分区的引导程序和一些BPB参数,系统根据这些BPB参数来得到分区的重要信息。如果没有这些信息,分区将不能正常使用。
在分区的第一个扇区(引导扇区DBR)后是15个扇区的NTLDR区域,这16个扇区共同构成$BOOT文件。在NTLDR后(但不一定是物理上相连的)是主文件表(Master File Table,MFT)区域,主文件表由文件记录构成,每个文件记录占2个扇区,文件记录简称为FR(File Record)。在FAT文件系统中是通过FAT表和文件目录项存储文件数据和记录文件的文件名、扩展名、建立时间、访问时间、修改时间、文件属性、文件大小、文件在磁盘中所占用的簇等信息进行管理的,而在NTFS文件系统中这些信息被称为属性,包括文件的内容在NTFS中也称为属性,各种属性被放入文件记录中进行管理。当一个属性太大,文件记录中存放不下时,就会分配多个文件记录进行存放;而当一个文件非常小时,可能这个文件的所有属性都包含在一个文件记录中了,甚至包括这个文件的数据,也会作为属性存放在其文件记录中,这样做的好处是节约了磁盘空间并且提高了文件访问效率。
NTFS文件系统的主文件表中还记录了一些非常重要的系统数据,这些数据被称为元数据(metadata)文件,简称为“元文件”,其中包括了用于文件定位和恢复的数据结构、引导程序数据及整个卷的分配位图等信息。NTFS文件系统将这些数据都当作文件进行管理,这些文件用户是不能访问的,它们的文件名的第一个字符都是“$”,表示该文件是隐藏的。在NTFS文件系统中,这样的文件主要有16个,包括MFT本身($Mft)、MFT镜像($MftMirr)、日志文件($LogFile)、卷文件($Volume)、属性定义表($AttrDef)、根目录($Root)、位图文件($Bitmap)、引导文件($Boot)、坏簇文件($BadClus)、安全文件($Secure)、大写文件($UpCase)扩展元数据文件($Extended metadata directory)、重解析点文件($Extend/$Reparse)、变更日志文件($Extend/$UsnJrnl)、配额管理文件($Extend/ $Quota)、对象ID文件($Extend/$ObjId)等。这16个元数据文件总是占据着MFT的前16项记录,在这16项以后就是用户建立的文件和文件夹的记录了。
每个文件记录在主文件表中占据的磁盘空间一般为1KB,也就是两个扇区,NTFS文件系统分配给主文件表的区域大约占据了磁盘空间的12.5%,剩余的磁盘空间用来存放其他元文件和用户的文件。
综上所述,NTFS文件系统的结构大致可以用图4-400进行说明。
补充说明一下:
①图4-400中的结构只是NTFS文件系统的示意图,并不完全成比例;
②元文件在图中只体现了一部分,没有画完整,并且除了$BOOT文件以外,其他元文件的位置不是固定的,例如$MFT文件也可以在$MFTMirr文件之后。
③在NTFS文件系统所在分区的最后一个扇区是DBR的备份,但该扇区并不属于NTFS文件系统。