NTFS被设计成比FAT文件系统具有更好的性能、可靠性和通用性,它不仅可以完成标准的文件读写、搜索等功能,还能提供文件系统恢复、容错,以及数据访问控制等高级功能。
将一个分区格式化为NTFS格式会自动创建若干系统文件,以及一个主文件表(MFT,包含该分区上所有文件和目录的信息),并且会在分区的起始部分创建一个分区启动扇区(从第0号扇区开始,最多可有16个扇区)。如图:
一、分区启动扇区(partition boot sector)
当分区被格式化成NTFS格式时,程序会自动将分区最初的扇区作为启动扇区。注意,该部分是NTFS的核心,所有访问均依赖该扇区的描述,损坏会造成该分区的无法正常使用。其格式如下:
|
偏移量 |
域长(字节) |
描述 |
|---|---|---|
|
0x00 |
3 |
跳转指令 |
|
0x03 |
8 |
OEM ID |
|
0x0B |
25 |
BPB |
|
0x24 |
48 |
扩展BPB(用于在启动时定位MFT) |
|
0x54 |
426 |
Bootstrap Code |
|
0x01FE |
2 |
扇区结束标识 |
以下是BPB和扩展BPB域的格式:
|
偏移量 |
域长(字节) |
描述 |
|---|---|---|
|
0x0B |
2 |
每扇区字节数 |
|
0x0D |
1 |
每簇扇区数 |
|
0x0E |
2 |
保留扇区 |
|
0x10 |
3 |
0 |
|
0x13 |
2 |
未被NTFS使用 |
|
0x15 |
1 |
媒介描述符 |
|
0x16 |
2 |
0 |
|
0x18 |
2 |
每磁道扇区数 |
|
0x1A |
2 |
磁头数 |
|
0x1C |
2 |
隐藏扇区 |
|
0x20 |
4 |
未被NTFS使用 |
|
0x24 |
4 |
未被NTFS使用 |
|
0x28 |
8 |
该分区扇区数 |
|
0x30 |
8 |
$MFT文件的逻辑簇数 |
|
0x38 |
8 |
$MFTMirr文件的逻辑簇数 |
|
0x40 |
4 |
每文件记录段簇数 |
|
0x44 |
4 |
每索引块簇数 |
|
0x48 |
8 |
分区逻辑序列号 |
|
0x50 |
4 |
校验和 |
二、主文件表(master file table)
NTFS分区上的所有文件都是由在MFT中的一条记录来表示的。其中,前16条记录是NTFS保留用于存放特殊信息(系统文件),从第17条记录开始记录分区上所有文件和目录的信息。MTF记录的结构如下:
MFT为每条文件记录分配一定的空间,其中记录有文件的属性等信息。小型文件和小型目录(通常指小于1500字节的)可以被完全的放入到MFT记录中,从而可以加快访问速度;大型目录被组织成B-树的结构,存放在MFT外部。
MFT中存储的16条系统文件记录信息如下:
|
文件名 |
MFT记录号 |
描述 |
|---|---|---|
|
$Mft |
0 |
包含分区上所有文件和记录信息的目录 |
|
$MftMirr |
1 |
MFT上前4项记录的镜像 |
|
$LogFile |
2 |
包含所有操作的信息(用于恢复),最大可为4MB |
|
$Volume |
3 |
包含分区信息 |
|
$AttrDef |
4 |
包含属性的名称、标识符和描述等 |
|
$ |
5 |
根目录 |
|
$Bitmap |
6 |
记录被使用的簇 |
|
$Boot |
7 |
和BPB结合使用,加载启动代码 |
|
$BadClus |
8 |
分区中的坏簇 |
|
$Secure |
9 |
所有文件的安全描述符 |
|
$Upcase |
10 |
将小写字符转为Unicode大写字符 |
|
$Extend |
11 |
用于各种可选扩展 |
|
|
12–15 |
保留为将来使用 |
三、文件属性
NTFS将每个文件都看成是属性的集合,其中,所有可以在MFT中表示的称为resident信息,否则称为nonresident信息。目前,NTFS已经定义的标准文件属性包括:标准信息、属性列表(列出所有无法在MFT中表示的属性的位置)、文件名(最长可达255个Unicode字符)、安全描述符(文件的所有者及可以访问文件的用户)、数据(可有一个未命名的数据属性与多个已命名的数据属性)、标识符(分区唯一的文件标识,用于Distributed Link Tracking Service,不是所有文件都要有标识符)、日志工具流(用于EFS,将操作记录到日志文件)、Reparse Point(用于分卷加载点)、索引根(用于实现目录和其他索引)、索引分配(用于实现目录和其他索引)、位图(用于实现目录和其他索引)、分卷信息(仅在$Volume文件中被使用,包含分卷版本)、分卷名(仅在$Volume文件中被使用,包含卷标号)。
四、多数据流
NTFS支持多数据流,其中流名是该文件的一个新数据属性。每个数据流都可以通过一个句柄来标识,这样就可以将一个数据流视为一个独立的文件属性的集合。数据流有独立的文件锁和大小等,但具有通用的访问许可。这项属性使得数据可以被作为一个单独的单位进行操作,即一个文件可以被多个应用程序同时使用。
注意:当从NTFS将文件拷贝到FAT上时,数据流和其他不被FAT支持的属性将会被丢失。
五、压缩文件
在NTFS上使用NTFS压缩功能进行压缩的文件可以被任何基于Windows的应用程序使用,而不用首先对其显示解压,而在结束使用时又会自动将其压缩。所有NTFS上的文件都会有一个属性来标识其是否被压缩。
六、加密文件系统(EFS)
加密文件系统(EFS)来在NTFS分区上存放加密的文件,保护敏感文件不被非法访问。类似于压缩文件系统,EFS对用户来说是透明的,会自动加、解密文件和文件夹。相比第三方加密软件而言,EFS有如下优点:
1、对用户和应用程序透明。
2、具有强壮的密钥。
3、所以加、解密的过程都在内核中进行,从而密钥不会暴露在页面文件中。
4、EFS提供了一个数据还原的机制。