在NTFS中,所有存储在卷上的数据都包含在文件中,包括用来定位和获取文件的数据结构,引导程序和记录这个卷的记录(NTFS元数据)的位图,这体现了NTFS的原则:磁盘上的任何事物都为文件。在文件中存储一切使得文件系统很容易定位和维护数据,而在NTFS中,卷中所有存放的数据均在一个叫做MFT的文件记录数组中,称为主文件表(Master File Table),MFT是由高级格式化产生的。而MFT则由文件记录(File Record)数组构成。File Record的大小一般是固定的,不管簇的大小是多少,均为1KB,这个概念相当于Linux中的inode(i节点)。File Record在MFT文件记录数组中物理上是连续的,且从0开始编号。MFT仅供系统本身组织、架构文件系统使用,这在NTFS中称为元数据(metadata)。其中最基本的前16个记录是操作系统使用的非常重要的元数据文件。这些NTFS主文件表的重要的元数据文件都是以$(美元符号)开始的名字,所以是隐藏文件,在Windows 2000中不能使用dir命令(甚至加上/ah参数)像普通文件一样列出这些元数据文件。实际上File System Driver(ntfs.sys)维护了一个系统变量NTFS Protect System Files用于隐藏这些元数据。但是微软公司也提供了一个OEM TOOL,叫做NFI.EXE,用此工具可以转储NTFS主文件表的重要的元数据文件(元数据:是存储在卷上支持文件系统格式管理的数据。它不能被应用程序来访问,它只能为系统提供服务)
我们第一步就是先找到MFT的位置,通过分区表,我们得到本分区的引导扇区所在的扇区号,就拿C盘分区来实践,通过上一节,我们得到C盘的引导扇区的扇区号是63,首先进到扇区号为63的扇区
然后根据下表对照
00 02 每个扇区512(200H)字节
08 每个簇占8扇区
00 00
00 00 00
00 00
F8 硬盘
00 00
3F 00 每磁头63扇区
FF 00 每柱面255磁头
3F 00 00 00 隐含扇区63
00 00 00 00
80 00 80 00
C0 FF BF 03 00 00 00 00 扇区总数62914496
00 00 0C 00 00 00 00 00 MFT开始簇号786432
10 00 00 00 00 00 00 00 MFTmirr开始簇号 16
F6 00 00 00 每个MFT占的簇数 246
01 00 00 00 每个索引占的簇数 1
B9 63 23 FC AA 23 FC B6 卷标
文件记录由两部分构成,一部分是文件记录头,另一部分是属性列表,最后结尾是四个“FF”。然后我们根