NTFS的索引结构分析 | 数据恢复迷

NTFS的一些新功能建立在一种叫作“综合索引”的基本功能之上。综合索引中包含了具有某一特征类型的多个分类项,并使用一种高效的存储机制以便于快速查找。在Windows 2000以前的NTFS版本中仅支持$I30的综合索引,索引中仅存储目录项。索引过程将目录项按名称分类并将这些项按照B+树的结构保存,如图4-466所示。

图4-466 NTFS索引结构

图4-466是一个包含3个节点,每个节点3个项,共9项的目录的MFT条目,其中索引根(Index Root)属性指向B+树的根。这个MFT条目并不能容纳所有9个目录项,NTFS必须把其中一部分项存放在别处,因此,NTFS分配了两个索引缓冲区来存放另外的项(索引根以及索引缓冲区一般能够存储三个以上文件项,这依赖于文件名的长度)。一个MFT条目占1KB的空间,而一个索引缓冲区占4KB的空间。

从图4-466中的箭头可以看出NTFS的存储项是按字母顺序进行的。假设运行一个程序试图打开目录中的e.doc文件,NTFS会首先去读索引根属性,其中包含了d.pic、h.ppt及i.ddt三个文件项,并将名称“e.doc”与第一个项的名称“d.pic”进行比较,NTFS得出结论:e.doc在字母序上排在d.pic之后。因此转而处理下一个项“h.ppt”,经过比较以后,由于e.doc的字母序在h.ppt之前,NTFS就会检索h.ppt项中索引缓冲区的虚拟簇号(VCN)。这个索引缓冲区中存储着字母序比h.ppt小但比d.pic大的项。VCN代表一个簇在一个文件或目录中的顺序,NTFS能够将虚拟簇号映射成逻辑簇号(LCN),而逻辑簇号表示着一个簇相对于一个卷的起始点的相对偏移量。而如果h.ppt项中并不存在这个索引缓冲区的虚拟簇号,则NTFS可以立即断定这个目录中不存在e.doc文件,并报告打开文件失败。

当获得索引缓冲区的虚拟簇号以后,NTFS就会继续查找。从图4-466中可以看出,索引缓冲区的第一个项正是要找的e.doc,于是NTFS就从e.doc项中读出它对应的文件记录的位置。索引项中还存储着如时间戳(创建时间、最后修改时间等)、文件大小、属性等其他信息。虽然NTFS在文件的文件记录中也存储了这些信息,但将这些信息复制到目录项中可以提高列目录或做一些简单的文件查询时的效率。

目录项是按照字母排序的,这也解释了NTFS系统在列目录的时候为什么总是按照字母顺序的问题。相反,FAT文件系统并不对目录项排序,所以在FAT文件系统中列目录时并没有顺序。另外,由于NTFS将目录项按照B+树的结构保存,使得在包含很多文件的目录中查找文件时效率非常高。一般来说,NTFS只需要扫描所有目录项中的一小部分即可。在这一点上,FAT文件系统只能使用线性查找,也就是说,为了查找一个文件,很大程度上需要查询这个目录中的几乎每一个文件项。

索引缓冲区是NTFS的B+目录管理中非常重要的一个结构,每个索引缓冲区在NTFS中一般是4KB的固定大小,其位置和大小由目录的文件记录中A0H属性的Run List定义,如图4-467所示。

图4-467 根目录的A0H属性

从图4-467中A0H属性的Run List可以看到,索引缓冲区的起始簇号是4014H,换算为十进制就是16 404号簇,大小是一个簇。只要跳转到16 404号簇就是索引缓冲区的开始了,如图4-468所示。

图4-468 索引缓冲区

在图4-468的索引缓冲区中,最前面是一个标准索引头,后面有四个索引项。

标准索引头的结构见表4-92。

表4-92 标准索引头的结构

字节偏移 字段长度(字节) 描述
0x00 4 头标志,总是“INDX”
0x04 2 更新序列号的偏移
0x06 2 更新序列号与更新数组以字为单位的大小(S)
0x08 8 日志文件序列号
0x10 8 本索引缓冲区在索引分配中的VCN
0x18 4 索引项的偏移
0x1C 4 索引项大小
0x20 4 索引项分配大小
0x24 1 如果不是叶节点,置1,表示还有子节点
0x25 3 用0填充
0x28 2 更新序列
0x2A 2S-2 更新序列数组

注意

标准索引头中0x18处“索引项的偏移”是相对当前位置计算的,而不是相对标准索引头的起始点计算的,所以,实际索引项的偏移该是在0x58处。

在标准索引头之后就是索引项,索引项的结构见表4-93。

表4-93 索引项的结构

这里以图4-468中的“索引项①”为例,做一下讲解。“索引项①”的内容如图4-469所示。

图4-469 索引项①

对“索引项①”的分析结果见表4-94。

表4-94 索引项①的分析结果

字节偏移 字段长度(字节) 分析结果
0x00 8 文件的MFT参考号为0x04
0x08 2 索引项大小为0x68字节
0x0A 2 文件名偏移为0x52
0x0C 2 索引标志,文件名索引
0x0E 2 填充(到8字节)
0x10 8 父目录的MFT文件参考号,为0x05,表示根目录
0x18 8 文件创建时间:2009-10-03,21:17:25
0x20 8 最后修改时间:2009-10-03,21:17:25
0x28 8 文件记录最后修改时间:2009-10-03,21:17:25
0x30 8 最后访问时间:2009-10-03,21:17:25
0x38 8 文件分配大小,0x9000=36 864字节=72扇区=9簇
0x40 8 文件实际大小,0x8CA0=36 000字节
0x48 8 文件标志,0x06表示系统、隐藏文件
0x50 1 文件名长度(F),8个字符
0x51 1 文件名命名空间,0x03表示Win32&DOS
0x52 16 文件名,$ATTRDEF
(0)

相关推荐

  • 数据恢复笔记

    Winhex数据恢复(NTFS文件系统) MFT属性中的属性头数据结构 MFT的簇流运行数据结构 手工提取文件数据 手工提取片段文件数据 常驻80h属性 DBR的数据结构 NTFS文件系统的元文件 主 ...

  • NTFS文件系统基本介绍 | 数据恢复迷

    NTFS文件系统是随着Windows NT操作系统的诞生而产生的,并随着Windows NT 4跨入主力文件系统的行列.它的优点是安全性和稳定性极其出色,在使用中不易产生文件碎片:同时它还提供了容错结 ...

  • NTFS文件系统结构总览 | 数据恢复迷

    当用户将硬盘的一个分区格式化为NTFS分区时,就建立了一个NTFS文件系统结构.NTFS文件系统与FAT文件系统一样,也是用簇为基本单位对磁盘空间和文件存储进行管理的.一个文件总是占有若干个簇,即使在 ...

  • NTFS的EFS加密分析 | 数据恢复迷

    NTFS文件系统能够支持EFS加密文件系统(Encrypted File System).EFS提供的文件加密技术可将加密的NTFS文件存储到磁盘上,并且特别考虑了其他操作系统上的现有工具引起的安全性 ...

  • NTFS文件系统引导扇区分析 | 数据恢复迷

    NTFS文件系统的引导扇区是$Boot的第一个扇区,它的结构与FAT文件系统的DBR类似,所以习惯上也称该扇区为DBR扇区.DBR扇区在操作系统的引导过程起着非常重要的作用,如果这个扇区遭到破坏,系统 ...

  • NTFS文件系统元文件$MFT分析 | 数据恢复迷

    NTFS文件系统的元文件 将一个分区格式化为NTFS后,格式化程序会往该分区中写入很多重要的系统信息,这些系统信息在NTFS文件系统中称为元文件.这些元文件用户是不能访问的,它们的文件名的第一个字符都 ...

  • 元文件$UsnJrnl分析 | 数据恢复迷

    元文件$UsnJrnl是变更日志文件,作用是记录文件发生的改变,文件一旦改变,其变化会记录在元文件$UsnJrnl中一个被命名为$J的数据属性中.$J数据属性具备稀疏属性,由变更日志项组成.$UsnJ ...

  • 元文件$Reparse分析 | 数据恢复迷

    $Reparse是重解析点文件,Windows 2003.Windows XP等系统可以将卷装载在目录中进行重新解析.$Reparse一般包含3个属性,如图4-465所示. 图4-465 $Repar ...

  • 元文件$Quota分析 | 数据恢复迷

    $Quota文件最初出现在Window NT中,但没有被使用,到了Windows 2000及其后续版本$Quota文件用于跟踪磁盘配额,以用户和卷来进行计算.该文件一般包含4个属性,如图4-464所示 ...

  • 元文件$ObjId分析 | 数据恢复迷

    卷中的每个文件都有一个唯一的ID号,$ObjId存放着该卷上使用的所有$Object_ID属性的一个索引.$ObjId一般有4个属性,如图4-463所示. 图4-463 $ObjId的文件记录 (1) ...