NTFS $MFT 文件可以有子记录吗?

DSI*_*SII 6 ntfs file ntfs-mft

我正在编写一些代码来解析 NTFS 卷中磁盘上的 MFT。这很简单,但一个特殊的角落案例引起了我的注意,我在互联网上的任何地方都找不到明确的答案。

对于 NTFS 中的普通文件,如果文件的属性多于单个记录的容量(例如,如果文件有很多硬链接,则有很多 $FILE_NAME 属性,或者很多$DATA 属性(如果它有许多备用数据流)。

参考编号为 0 的 $MFT 文件保存 MFT 本身的数据运行。通常它是一个没有孩子的单一记录。$MFT 文件是否有可能有子记录?如果可能的话,你怎么知道在哪里可以找到它们?这些子记录是否必须以非常低的参考号存储,以便您可以可靠地获取它们,而不必已经解析 $MFT 以知道它们在磁盘上的位置?

Seb*_*iuc 6

有一种特殊类型的属性称为$ATTRIBUTE_LIST。一个文件或目录最多可以有 65536 个属性,并且它们不可能适合单个 MFT 条目。它基本上包含除他自己之外的所有文件属性的列表。列表中的每个条目都包含属性类型和在哪里可以找到属性的 MFT 参考。这就是文件记录头中的基本文件引用字段的用途。

如果列表对于 MFT 条目来说太大,则该属性可能变得非常驻,并且将通过解释该属性的数据运行来找到该列表。

因为 的类型$ATTRIBUTE_LIST是 32,所以它通常紧跟在$STANDARD_INFORMATION属性之后,并且将包含具有更大类型(如$FILE_NAME$DATA)的属性。

当文件变得非常碎片化时,$DATA属性运行列表将无法放入单个 MFT 条目中。这也是$ATTRIBUTE_LIST用于将$DATA属性存储在多个条目中的情况。

$MFT条目很少有此问题,因为分配算法旨在防止出现此问题。但是如果一个$MFT卷变得非常碎片化,它可以有多个条目来存储它的$DATA.