3

我想知道每个 MFT 记录的实际(磁盘)大小。由于每个 MFT 记录的集群数是在引导扇区中设置的,我猜每个集群的大小都相同。

但是,每个记录头都存储一个附加值:它的Allocated size(在 0x1C 处)。据我观察,该值始终等于存储在引导扇区中的值。

这两者是否有可能不同(以及何时)?如果没有,Allocated size每条记录中的价值有点浪费,对吧?

4

1 回答 1

2

这实际上并没有那么浪费。您应该尝试查看当文件记录中存储的属性数量超过 1 KB 时会发生什么。(通过添加其他文件名、流等)对于不同版本的 NTFS,是否将其他属性存储在卷的数据部分或另一个文件记录中,尚不清楚(至少对我而言)。

在以前的 NTFS 版本中,MFT 文件记录的大小等于集群的大小(通常为 4KB),这很浪费空间,因为有时所有属性都占用不到 1 KB 的空间。从 NT 5.0 开始(我可能错了),经过一番研究,微软决定所有的 MFT 文件记录应该是 1KB。因此,存储该数字的一个原因可能是向后兼容。想象一下,您发现了一个仍然使用 4KB 文件记录的旧硬盘驱动器,并且您想向该驱动器添加一些文件或复制一些文件。

存储该数字的另一个用途是,每次获得文件记录以查看其大小应该是多少时,您都不需要读取引导扇区。想象一下,如果您是算法,由于向后兼容性而必须减轻 4KB 记录到 1KB 记录之间的传输。如果您不知道会发生什么,则必须读取引导扇区以找出预期的记录大小。

如果您无权访问引导扇区,或者您试图从引导扇区被擦除或群集损坏的驱动器中恢复文件怎么办?如果卷位于多个扩展区并且您正在从一个扩展区读取 MFT 并且引导扇区位于您无权访问的另一个扩展区,会发生什么情况?

通常,文件系统是由多个人在很长一段时间内设计的。如果这些价值观是多余的,我认为他们肯定会注意到。

于 2013-09-26T10:13:54.117 回答