我想知道每个MFT记录的实际(磁盘)大小。由于每个MFT记录的簇数在bootsector中设置,我猜每个簇的大小都相同。
但是,每个记录头都存储一个附加值:Allocated size
(在0x1C)。据我所知,这个值总是等于存储在bootsector中的值。
这两者是否可能不同(何时)?
如果没有,每条记录中的Allocated size
值都是一种浪费,对吗?
答案 0 :(得分:2)
实际上并不是那么多浪费。您应该尝试查看存储在文件记录中的属性数超过1 KB时会发生什么。 (通过添加其他文件名,流等)如果其他属性存储在卷的数据部分或另一个文件记录中,则不清楚(至少对我来说)不同版本的NTFS。
在以前的NTFS版本中,MFT文件记录的大小等于群集的大小(通常为4KB),这是浪费空间,因为有时所有属性都需要不到1 KB的空间。由于NT 5.0(我可能错了),经过一些研究,微软决定所有的MFT文件记录应该是1KB。因此,存储该数字的一个原因可能是向后兼容性。想象一下,你发现一个仍然使用4KB文件记录的旧硬盘驱动器,你想要将一些文件添加到该驱动器或复制一些文件。
存储该号码的另一个用途是,每次获得文件记录时都不需要读取引导扇区,以查看它的大小应该是什么。想象一下,如果您是因为向后兼容性而必须减轻4KB记录到1KB记录之间的传输的算法。如果你不知道会发生什么,你必须阅读引导扇区以找出预期的记录大小。
如果您无法访问引导扇区或者您尝试从已擦除引导扇区或群集错误的驱动器中恢复文件,该怎么办?如果卷位于多个扩展区并且您从一个扩展区读取MFT并且引导扇区位于您无权访问的另一个扩展区中,会发生什么?
通常,文件系统很长时间都是由不止一些人设计的。如果这些价值观是多余的,我认为他们肯定会注意到。