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

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

原始 KB 编号: 174619

摘要

NTFS 文件系统的核心包含一个名为 master 文件表的文件, (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 当前大小,请在 dir /a $mft NTFS 卷上键入 命令。

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

磁盘碎片整理程序对于所谓的系统文件显示绿色,在 NTFS 格式化卷上,这只是 MFT 的组合,pagefile.sys (如果此卷上存在 MFT) ,则为 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 空间产生任何影响。