如何找出并纠正 NTFS 卷上的磁盘空间问题

文章翻译 文章翻译
文章编号: 303079 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

NTFS 文件系统支持许多卷和文件级别的功能,这些功能可能会导致丢失或错误地报告可用磁盘空间的现象。当 NTFS 卷突然毫无理由地变得非常满,而管理员却无法找到原因或无法确定导致问题的文件夹和文件时,这一现象就会比较明显。出现这一现象有时是因为恶意或未经授权的用户访问秘密存储了大型文件或大量小文件的 NTFS 卷,这会使其 NTFS 权限被删除或受到限制。这一现象也可能在发生系统故障或断电并导致卷损坏后出现。

本文介绍如何检查 NTFS 文件系统磁盘空间分配,以发现导致问题的文件和目录或检查是否存在卷损坏。本文针对于支持某些高级存储功能和疑难解答方法的 Windows 2000 及更高版本的操作系统;但是本文对于 Windows NT 用户也会有用。下面是 NTFS 卷磁盘空间分配报告错误的原因的简短列表:
  • 对于所存储的具有平均大小的文件,NTFS 卷的簇大小太大。
  • 文件属性或 NTFS 权限阻止通过 Windows Explorer 或 Windows 命令提示符显示或访问文件或文件夹。
  • 文件夹路径超过 255 个字符。
  • 目录或文件包含无效或保留的文件名。
  • NTFS 元文件(如主控文件表 MFT)已增长,无法重新分配。
  • 文件或文件夹包含交替数据流。
  • NTFS 文件系统损坏导致将可用空间报告为正在使用。
  • 其他 NTFS 功能也可能导致文件分配问题。

更多信息

请使用以下信息来优化、修复或更好理解 NTFS 卷上磁盘空间的使用方式。

簇大小太大

磁盘空间只能由包含内部 NTFS 元文件(如主控文件表 (MFT)、目录索引等)的文件和目录来占用。所有文件空间分配都按照簇的倍数来占用。簇是连续扇区的集合。簇大小在卷格式化时由分区大小确定。

有关簇的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
140365 Default Cluster Size for FAT and NTFS(FAT 和 NTFS 的默认簇大小)
当文件首次创建后,根据其初始文件大小,它会占用最少的单簇磁盘空间。当随后向文件添加数据时,NTFS 会以簇大小的倍数增加文件的空间分配。

若要确定当前簇大小和卷统计信息,请从命令提示符处运行只读的 chkdsk,如下所示
IE: Chkdsk D:
然后查看所得的输出。例如:
   4096543 KB total disk space. <--- Total formatted disk capacity. 
   2906360 KB in 19901 files. <--- Space used by user file data.
      6344 KB in 1301 indexes. <--- Space used by NTFS indexes.
         0 KB in bad sectors.  <--- Space lost to bad sectors.
     49379 KB in use by the system.  <--- Includes MFT and other NTFS metafiles.
     22544 KB occupied by the log file.  <--- NTFS Log file - (Can be adjusted using chkdsk /L:size)
   1134460 KB available on disk.  <--- Available FREE disk space

      4096 bytes in each allocation unit.  <--- Cluster Size. (4K)
   1024135 total allocation units on disk. <--- Total Clusters on disk.
    283615 allocation units available on disk. <--- Available free clusters.
				
备注:将以 (KB) 报告的每个值乘以 1024 以确定准确的字节数。例如:2906360 x 1024 = 2,976,112,640 字节。

通过此输出,您可以确定磁盘空间的使用方式以及默认的簇大小。若要查看它是否为优化的簇大小,请按照以下步骤确定被浪费的空间量:
  1. 双击桌面上的我的电脑,然后双击相关卷的驱动器盘符(例如 D)。

    这将打开相关卷并显示根目录中包含的文件夹和文件。
  2. 单击任何文件或文件夹,然后单击编辑菜单上的全选 选项。
  3. 当选择所有文件和文件夹后,右键单击任何文件或文件夹,然后单击属性选项。

    这将打开属性对话框,其中包含常规选项卡。它还会列表显示整个卷上的文件和目录总数,并提供两项文件大小统计数据:大小和占用空间。
如果您没有 将 NTFS 压缩用于卷中包含的任何文件或文件夹,则大小和占用空间之间的差值就是由于簇大小大于必需的大小而浪费的空间。您应该尽量使用优化的簇大小,使占用空间值尽可能接近大小值。如果占用空间和大小值之间的差值过大,则说明对于您在卷上存储的平均文件大小,默认簇大小太大,并且应该将其减小。实现这一目的的唯一方法是备份整个卷,然后使用格式化命令和 /a 开关将卷重新格式化,以指定适当的分配大小:
IE: format D: /a:2048
(本例采用 2-KB 的簇大小)。

备注:或者,也可以启用 NTFS 压缩来重新获取由于簇大小不正确而损失的空间;但是,这可能会使性能略微降低。

文件属性或 NTFS 权限

Windows 资源管理器和目录列表命令
DIR /A /S
都将只对您具有访问权限的文件和目录进行文件和目录统计数据的总计。在默认情况下始终会排除的文件包括所有隐藏文件和受保护的操作系统文件。这可能会使 Windows 资源管理器或 DIR 命令输出显示不准确的文件及文件夹总计和大小统计数据。若要在总体统计数据中包括这些类型的文件,请按照下列步骤更改“文件夹选项”:
  1. 双击桌面上的我的电脑,然后双击相关卷的驱动器盘符 (D)。这将打开相关卷,并显示根目录中包含的文件夹和文件。
  2. 工具菜单上,单击文件夹选项,然后单击查看选项卡。
  3. 选择显示隐藏的文件和文件夹选项,然后通过单击清除隐藏受保护的操作系统文件复选框。
  4. 确认警告消息,然后单击应用按钮。
这将允许 Windows Explorer 和 DIR /A /S 命令总计该用户具有访问权限的卷上包含的所有文件和目录。

若要确定无法访问哪些目录和文件,请按照下列步骤操作:
  1. 从命令提示符处,将 DIR /A /S 的输出传输到一个文本文件。

    例如:DIR D: /A /S >C:\D-DIR.TXT
  2. 运行 ntbackup.exe,然后选择工具菜单上选项下的备份日志选项卡上的详细 选项。

    这将启用详细备份日志。
  3. 备份选项卡上,备份受到影响的整个卷 (D),然后开始备份。
  4. 当备份完成后,打开备份报告,逐个目录地比较 NTBackup 日志输出和您在第 1 步保存的 D-DIR.TXT 输出。
由于备份可以访问所有文件,因此其报告可能会包含 Windows 资源管理器和 DIR 命令看不到或不计入的文件夹和文件。在查找大型文件或目录时,使用 NTBackup GUI 来浏览卷会更加方便一些,而这些大型文件或目录在没有实际备份卷的情况下将无法通过 Windows 资源管理器来进行访问。

当找到您无法访问的文件后,应该能够在从 Windows 资源管理器中查看文件或目录的属性时使用安全选项卡添加或更改权限。默认情况下,您将无法访问 System Volume Information 目录。若要将该目录包含在 DIR /A /S 命令中,将需要添加相应的权限。

备注: 您可能会遇到没有“安全”选项卡的目录或文件,或者发现无法将权限重新分配给受到影响的文件夹和文件。当试图访问这些对象时,可能会收到以下错误消息:
D:\directory_name\ is not accessible

Access is denied
如果遇到了这样的目录,请与位于以下 Microsoft Web 站点的 Product Support Services 联系,以获取更多的帮助:
http://support.microsoft.com/directory/question.asp

无效的文件名

包含无效或保留文件名的目录或文件也可能会从文件和目录统计数据中排除。对于 NTFS 文件系统,包含前导或尾随空格的目录或文件是完全合法的,但它们对于 Win32 子系统却不合法,因此 Windows 资源管理器或命令提示符都无法对其进行可靠的处理。

有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
120716如何删除 Windows NT 中具有保留名称的文件
通常无法重命名或删除这些文件或文件夹。如果您试图将其重命名或删除,则可能会收到以下错误消息:
Error renaming file or folder

Cannot rename file: Cannot read from the source file or disk.
- 或者 -
Error deleting file or folder

Cannot delete file: Cannot read from the source file or disk.
如果您遇到无法删除或重命名的目录或文件,请与位于以下 Microsoft Web 站点的 Product Support Services 联系:
http://support.microsoft.com/directory/question.asp

NTFS 主控文件表 (MFT) 扩展

当首次创建并格式化 NTFS 卷时,将创建 NTFS 元文件。其中一个元文件称作主控文件表 (Master File Table, MFT)。它在最初创建时非常小(约 16 KB),但将随着在卷上创建文件和目录而增大。当首次创建一个文件时,该文件会作为文件记录段 (FRS) 输入 MFT,FRS 的大小始终是 1024 字节 (1 KB)。在卷上添加文件时,MFT 会根据需要增大。然而,当删除文件时,关联的 FRS 将被标记为可供再次使用,但 FRS 和关联 MFT 分配的总数保持不变。这就说明了为什么在删除大量文件后没能重新获取 MFT 所占用的空间。

若要查看 MFT 的确切大小,可以使用内置的碎片整理实用程序对卷进行分析。所得的碎片整理报告会提供有关 MFT 中碎片的大小和数量的详细信息。

示例

Master File Table (MFT) fragmentation
	Total MFT size =        26,203 KB
	MFT record count =      21,444
	Percent MFT in use =    81 %
	Total MFT fragments =   4
				
不过,若要更为全面地了解整个 NTFS 文件系统所占用的空间量(系统开销),请执行 chkdsk,然后查看所得输出中的以下行:
In use by system
。目前,只有第三方碎片整理实用程序才能合并未使用的 MFT FRS 记录并回收未使用的 MFT 分配空间。

交替数据流

NTFS 允许文件和目录包含交替数据流。此功能使多个数据分配可以同单个文件或目录相关联。在文件和目录上使用交替数据流时,请注意以下限制。

当文件或目录包含交替数据流时:

  • Windows 资源管理器和 DIR 命令 将交替数据流中的数据作为文件大小或卷统计数据的一部分进行报告。它们只显示主数据流的总字节数。
  • chkdsk 的输出会准确地报告用户的数据文件(包括交替数据流)所占用的空间。
  • 磁盘配额会准确地跟踪报告作为用户数据文件一部分的所有数据流分配。
  • NTBackup 在备份日志报告中记录已备份的字节数。但它并不显示哪些文件包含交替数据流,也不显示包含交替流数据的文件的准确文件大小。

NTFS 文件系统损坏

在极为少见的情况下,NTFS 元文件 $MFT 或 $BITMAP 可能已损坏,并导致磁盘空间的损失。若要识别并修复此问题,可以对相关卷运行 chkdsk /F。如果 $BITMAP 需要调整,您会在接近 chkdsk 末尾的地方收到以下消息:
Correcting errors in the master file table's (MFT) BITMAP attribute.
CHKDSK discovered free space marked as allocated in the volume bitmap.
Windows has made corrections to the file system.

可能导致文件分配问题的其他 NTFS 功能

NTFS 还支持硬链接和重分析点,重分析点允许创建卷装入点和目录结点。当您尝试确定物理卷上被耗用的空间量时,这些附加的 NTFS 功能可能会导致问题。

硬链接是文件的目录项,它与实际文件数据在该卷上的位置无关。可以认为每个文件都至少有一个硬链接。在 NTFS 卷上,每个文件可以有多个硬链接,因此一个文件可能会出现在多个目录中(甚至在具有不同名称的相同目录中)。由于所有这些硬链接都引用相同的文件,因此程序可以打开任何硬链接并修改该文件。只有在删除文件的所有链接后,该文件才会从文件系统中删除。当您创建硬链接后,程序可以像使用其他任何文件名一样使用它。请记住,Windows 资源管理器和命令提示符会将所有链接的文件显示为具有相同的大小,即使它们都共享相同的数据,并且实际上并没有使用那么多的磁盘空间。

卷装入点和目录结点允许一个 NTFS 卷上的空文件夹指向另一个卷上的根文件夹或子文件夹。Windows 资源管理器和 DIR /s 命令跟随重分析点,计算目标卷上所有文件和目录的数量,并将其包括在主机卷的统计数据中。这可能会使您所认为的主机卷已用空间大于实际使用的空间。 有关结点的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
205524如何创建和操纵 NTFS 结点
总之,chkdsk 输出、NTBackup GUI 或备份日志以及查看磁盘配额都是确定卷上已用磁盘空间的有效方法。另一方面,Windows 资源管理器和 DIR 命令在用于此目的时具有一些限制和缺点。

属性

文章编号: 303079 - 最后修改: 2004年3月30日 - 修订: 1.4
这篇文章中的信息适用于:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
关键字:?
kberrmsg kbhowto kbinfo KB303079
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com