NTFS文件系统详解(三)之NTFS元文件解析

NTFS文件系统详解(三)之NTFS元文件解析

2023年7月19日发(作者:)

NTFS⽂件系统详解(三)之NTFS元⽂件解析在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 Protect System Files⽤于隐藏这些元数据。但是微软公司也提供了⼀个OEM TOOL,叫做,⽤此⼯具可以转储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”。然后我们根据上⾯BPB中的偏移簇号偏移盘偏移地址找到系统MFT所在地址(789632 * 8 +63 = 6291519),查看⽂件记录格式如下是⼀个完整的⽂件记录: 在同⼀系统中,⽂件记录头的长度和具体偏移位置的数据含义是不变的,⽽属性列表是可变的,其不同的属性有着不同的含义。后⽂将对属性进⾏具体分析,先来看看⽂件记录头的信息。 在NTFS⽂件系统中所有与⽂件相关的数据结构均被认为是属性,包括⽂件的内容。⽂件记录是⼀个与⽂件相对应的⽂件属性数据库,它记录了⽂件的所有属性。每个⽂件记录中都有多个属性,他们相对独⽴,有各⾃的类型和名称。每个属性都由两部分组成,既属性头和属性体。属性头的前四个字节为属性的类型。从⽂件记录头可以看到第⼀个属性流的偏移地址,(C0007E00+0038=C0007E38)如下是以10H属性为例的属性结构

另外属性还有常驻与⾮常驻之分。当⼀个⽂件很⼩时,其所有属性体都可以存放在⽂件记录中,该属性就称为常驻属性。如果某个⽂件很⼤,1KB的⽂件记录⽆法记录所有属性时,则⽂件系统会在元⽂件之外的区域也称数据流存放该⽂件的其他⽂件记录属性,这些存放在⾮MFT元⽂件内的记录就称为⾮常驻属性。分析属性的属性头每个属性都有⼀个属性头,这个属性头包含了⼀些该属性的重要信息,如属性类型,属性⼤⼩,名字(并⾮都有)及是否为常驻属性等。常驻属性的属性头分析表: 如下是⾮常驻属性的属性头分析表:

前⾯说过了,属性的种类有很多,因此各属性体的含义也不同。下表是NTFS⽂件系统中的所有属性体的简介

接下来来看⼏个重要的属性:分析10H属性:10H类型属性它包含⽂件的⼀些基本信息,如⽂件的传统属性,⽂件的创建时间和最后修改时间和⽇期,⽂件的硬链接数等等。如下:是⼀个10H类型的属性。

其中偏移0×20处的⽂件属性解释如下:

分析20H属性20H类型属性既属性列表,当⼀个⽂件需要好⼏个⽂件记录时,才会⽤到20H属性。20H属性记录了⼀个⽂件的下⼀个⽂件记录的位置。如下:是20H属性的解释。

分析30H属性30H类型属,该属性⽤于存储⽂件名 ,它总是常驻属性。最少68字节,最⼤578字节,可容纳最⼤Unicode字符的⽂件名长度。

分析80H属性80H属性是⽂件数据属性,该属性容纳着⽂件的内容,⽂件的⼤⼩⼀般指的就是未命名数据流的⼤⼩。该属性没有最⼤最⼩限制,最⼩情况是该属性为常驻属性。常驻属性就不做多的解释了,上⾯我标记的是⼀个⾮常驻的80H属性。其中,Run List是最难理解,也是最重要的。当属性不能存放完数据,系统就会在NTFS数据区域开辟⼀个空间存放,这个区域是以簇为单位的。Run List就是记录这个数据区域的起始簇号和⼤⼩,⼀个Run List例⼦上所⽰。这个⽰例中,Run List的值为“32 CC 26 00 000C”,因为后⾯是00H,所以知道已经是结尾。如何解析这个Run List呢? 第⼀个字节是压缩字节,⾼位和低位相加,3 + 2 = 5,表⽰这个Data Run信息占⽤五个字节,其中⾼位表⽰起始簇号占⽤多少个字节,低位表⽰⼤⼩占⽤的字节数。在这⾥,起始簇号占⽤3个字节,值为0C 00 00,⼤⼩占⽤2个字节,值为26 CC。解析后,得到这个数据流起始簇号为C0000,⼤⼩为9932簇。

分析90H属性90H属性是索引根属性,该属性是实现NTFS的B+树索引的根节点,它总是常驻属性。该属性的结构如下图:索引根的结构如表:

索引头的结构如表: 索引项结构如表:

分析A0H属性

A0属性是索引分配属性,也是⼀个索引的基本结构,存储着组成索引的B+树⽬录索引⼦节点的定位信息。它总是常驻属性。如下:是⼀个A0H属性的实例。

根据上图A0H属性的“Run List”可以找到索引区域,偏移到索引区域所在的簇,如下图:

起始簇:18265簇⼤⼩:3起始扇区号 = 该分区的其实扇区 + 簇号 * 每个簇的扇区数 也就是64 + 18265 * 8 = 146124

对了,上⾯的偏移0×28还要加上0×18 = 0×40.标准索引头的解释如下: 索引项的解释如下:

在下⾯的表中罗列出NTFS5中所有的元⽂件:

每个MFT记录都对应着不同的⽂件,如果⼀个⽂件有很多属性或是分散成很多碎⽚,就很可能需要多个⽂件记录。这时,存放其⽂件记录位置的第⼀个记录就叫做“基⽂件记录”(base file record)。MFT中的第1个记录就是MFT⾃⾝。由于MFT⽂件本⾝的重要性,为了确保⽂件系统结构的可靠性,系统专门为它准备了⼀个镜像⽂件($MftMirr),也就是MFT中的第2个记录。第3个记录是⽇志⽂件($LogFile)。该⽂件是NTFS为实现可恢复性和安全性⽽设计的。当系统运⾏时,NTFS就会在⽇志⽂件中记录所有影响NTFS卷结构的操作,包括⽂件的创建和改变⽬录结构的命令,例如复制,从⽽在系统失败时能够恢复NTFS卷。第4个记录是卷⽂件($Volume),它包含了卷名、被格式化的卷的NTFS版本和⼀个标明该磁盘是否损坏的标志位(NTFS系统以此决定是否需要调⽤Chkdsk程序来进⾏修复)。第5个记录是属性定义表($AttrDef,attribute definition table),其中存放了卷所⽀持的所有⽂件属性,并指出它们是否可以被索引和恢复等。第6个记录是根⽬录(),其中保存了存放于该卷根⽬录下所有⽂件和⽬录的索引。在访问了⼀个⽂件后,NTFS就保留该⽂件的MFT引⽤,第⼆次就能够直接进⾏对该⽂件的访问。第7个记录是位图⽂件($Bitmap)。NTFS卷的分配状态都存放在位图⽂件中,其中每⼀位(bit)代表卷中的⼀簇,标识该簇是空闲的还是已被分配了的,由于该⽂件可以很容易的被扩⼤,所以NTFS的卷可以很⽅便的动态的扩⼤,⽽FAT格式的⽂件系统由于涉及到FAT表的变化,所以不能随意的对分区⼤⼩进⾏调整。第8个记录是引导⽂件($Boot),它是另⼀个重要的系统⽂件,存放着Windows 2000/XP的引导程序代码。该⽂件必须位于特定的磁盘位置才能够正确地引导系统。该⽂件是在Format程序运⾏时创建的,这正体现了NTFS把磁盘上的所有事物都看成是⽂件的原则。这也意味着虽然该⽂件享受NTFS系统的各种安全保护,但还是可以通过普通的⽂件I/O操作来修改。第9个记录是坏簇⽂件($BadClus),它记录了磁盘上该卷中所有的损坏的簇号,防⽌系统对其进⾏分配使⽤。第10个记录是安全⽂件($Secure),它存储了整个卷的安全描述符数据库。NTFS⽂件和⽬录都有各⾃的安全描述符,为了节省空间,NTFS将具有相同描述符的⽂件和⽬录存放在⼀个公共⽂件中。第11个记录为⼤写⽂件($UpCase,upper case file),该⽂件包含⼀个⼤⼩写字符转换表。第12个记录是扩展元数据⽬录($Extended metadata directory)。第13个记录是重解析点⽂件($Extend$Reparse)。第14个记录是变更⽇志⽂件($Extend$UsnJrnl)。第15个记录是配额管理⽂件($Extend$Quota)。第16个记录是对象ID⽂件($Extend$ObjId)。第17~23记录是是系统保留记录,⽤于将来扩展。MFT的前16个元数据⽂件是如此重要,为了防⽌数据的丢失,NTFS系统在该卷⽂件存储部分的正中央对它们进⾏了备份,参见下图。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689763681a284247.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信