NTFS 如何为其主文件表 (MFT) 预留空间

本文介绍 NTFS 如何为其主文件表(MFT)保留空间。

原始 KB 数: 174619

总结

NTFS 文件系统的核心是名为主文件表(MFT)的文件。 NTFS 卷上每个文件的 MFT 中至少有一个条目,包括 MFT 本身。

由于对 NTFS 卷进行碎片整理的实用程序无法移动 MFT 条目,并且由于 MFT 的碎片过多会影响性能,因此 NTFS 会保留 MFT 的空间,以尽可能保持 MFT 的连续性。

在 Windows 中,碎片整理实用工具对 MFT 进行碎片整理。

碎片整理实用工具

MFT 上的碎片整理操作将 MFT 文件合并为 1,并阻止它存储在磁盘上没有顺序的多个位置。 在此类操作中,MFT 文件更按顺序排列。 但是,MFT 文件在碎片整理操作之前的大小正好相同。

如果用于删除大量文件的卷,MFT 可能太大。 已删除的文件会导致 MFT 中的内部漏洞。 这些漏洞是文件未使用的重要区域。 无法回收此空间。 这至少适用于实时 NTFS 卷。

详细信息

NTFS 使用 MFT 条目定义它们所对应的文件。 有关文件的所有信息(包括其大小、时间和日期戳、权限和数据内容)都存储在 MFT 条目或 MFT 外部的空间中,但 MFT 条目描述。

(目录条目(MFT 外部)还包含有关文件的一些冗余信息。但是,全面讨论 NTFS 上的所有结构超出了本文的范围。

随着文件添加到 NTFS 卷,将更多条目添加到 MFT 中,因此 MFT 会增大大小。 从 NTFS 卷中删除文件时,其 MFT 条目将标记为免费,可以重复使用,但 MFT 不会收缩。 因此,这些条目使用的空间不会从磁盘中回收。

由于 MFT 对 NTFS 的重要性以及如果此文件变得高度碎片,则可能会影响性能,NTFS 会特别努力使此文件保持连续。 NTFS 保留 12.5% 的卷以供 MFT 独占使用,除非剩余卷已用完。 因此,在首先分配所有其他空间之前,不会从此 MFT 区域分配文件和目录的空间。

注意

可以更改 NtfsMFTZoneReservation 注册表项以增加 Windows 中的卷。 有关 MFT 的详细信息,请参阅维护 Windows 2000 峰值性能(通过碎片整理)的磁盘碎片整理过程部分中的关键元素。

根据平均文件大小和其他变量,保留的 MFT 区域或磁盘上未保留的空间可能会在另一个磁盘填充到容量之前使用。

具有少量相对较大的文件的卷首先耗尽了未保留的空间,而具有大量相对较小的文件的卷首先会耗尽 MFT 区域空间。 在任一情况下,当一个区域或另一个区域已满时,MFT 的碎片就会开始发生。 如果未保留的空间已满,则用户文件和目录的空间开始从 MFT 区域分配,与 MFT 竞争进行分配。 如果 MFT 区域已满,则会从磁盘的其余部分分配新的 MFT 条目的空间,并再次与其他文件竞争。

新的注册表参数可以增加 NTFS 为其主文件表保留的卷的百分比。 NtfsMftZoneReservation 是一个REG_DWORD值,可以接受介于 1 和 4 之间的值,其中 1 对应于最小 MFT 区域大小,4 对应于最大值。 如果未指定参数或提供无效值,则 NTFS 对此参数使用默认值 1。 对应于每个设置的确切比率是未记录的,因为它们不是标准化的,将来的版本可能会更改。 若要了解哪种设置最适合你的环境,可能需要尝试不同的值。

若要确定 Windows 计算机上的 MFT 的当前大小,请在 NTFS 卷上键入 dir /a $mft 命令。

若要确定 Windows 计算机上的 MFT 的当前大小,请使用磁盘碎片整理程序分析 NTFS 驱动器,然后单击“ 查看报表”。 这会显示驱动器统计信息,包括当前的 MFT 大小和片段数。

磁盘碎片整理程序为 绿色 显示系统 文件和 NTFS 格式化卷上的内容,这只是 MFT 的组合,pagefile.sys(如果此卷上存在),以及所谓的“MFT 区域”或 MFT 扩展预留空间。 碎片整理报告仅显示有关页面文件和 MFT 的信息;它没有提及 MFT 区域,因为它不会影响磁盘利用率或容量。

MFT 区域不会从用于用户数据文件的可用(可用)驱动器空间中减去,只是上次使用的空间。 例如,当 MFT 需要增大大小时,首先从 MFT 区域获取它,从而减少 MFT 碎片并优化 MFT 性能。

默认 MFT 区域在装载卷时按Ntfs.sys计算和保留,并且基于卷大小。 可以通过下面记录的注册表项来增加 MFT 区域,但不能使默认 MFT 区域小于Ntfs.sys计算的内容。 增加 MFT 区域不会以任何方式减少用户可用于数据文件的磁盘空间。

注意

dir 命令返回的结果可能不是最新的。 dir 命令报告的大小可能会反映缓存的数据,该数据反映系统在有序关闭后启动系统时 MFT 的大小。

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表

若要添加此值,请执行以下步骤:

  1. 运行注册表编辑器(Regedt32.exe),并转到以下子项:

    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem

  2. 在“编辑”菜单中,单击“添加值”。

  3. 在对话框中键入以下信息:

    • 值名称: NtfsMftZoneReservation
    • 数据类型:REG_DWORD
    • 数据:(有效范围为 1-4)
  4. 退出注册表编辑器并重新启动计算机。

注意

这是一个运行时参数,不会影响卷的实际格式。 而是影响 NTFS 在给定系统上的所有卷上分配空间的方式。 因此,若要完全有效,参数必须从卷的格式和整个卷生命周期起生效。 如果向下或删除注册表参数,MFT 区域将相应地减少,但这不会影响已分配和使用 MFT 空间。