chkdsk的全称是checkdisk,就是磁盘检查的意思。这个东西是当你的
系统崩溃或者
非法关机的时候由系统来调用检查磁盘的,也可以由手工通过
命令行调用来检查某一个
磁盘分区。该工具基于被检测的分区所用的
文件系统,创建和显示磁盘的状态报告。Chkdsk 还会列出并纠正磁盘上的错误。如果不带任何参数,chkdsk 将显示当前
驱动器中的磁盘状态。
简介
Chkdsk.exe 是 CHKDSK 程序的
命令行界面,该程序用于验证文件系统的逻辑
完整性。如果 CHKDSK 在文件系统数据中发现存在逻辑
不一致性,CHKDSK 将执行可修复该文件系统数据的操作(前提是这些数据未处于只读模式)。
语法
chkdsk [volume:][[Path] FileName] [/f] [/v] [/r] [/x] [/c] [/l[:
size]]
参数
volume:
[Path} FileName]
指定需要 chkdsk 检查
碎片整理的文件或
文件集的位置和名称。使用
通配符(* 和 ?)可以指定多个文件。
/f
修复磁盘上的错误。必须锁定磁盘。如果 chkdsk 无法锁定
驱动器,则会显示一条消息,询问您是否希望在下次重新启动计算机时检查该驱动器。
/v
当检查磁盘时,显示所有目录中每个文件的名称。
/r
/x
仅在 NTFS 上使用。如果必要,首先强制卸载卷。该驱动器的所有打开句柄都无效。/x 还包含了/f 的功能。
/i
仅随 NTFS 使用。对索引项进行强度较小的检查,降低运行 chkdsk 的所用时间量。
/c
仅随 NTFS 使用。跳过文件夹结构中的周期检查,减少运行 chkdsk 所需的时间量。
/l[:size]
仅随 NTFS 使用。将
日志文件的大小更改为由用户输入的大小。如果省略该参数,则 /l 会显示当前日志文件的大小。
/?
注释
运行
chkdsk工具在系统的
System32目录中,它需要在Windows系统的
命令提示符窗口中运行,并且要在固定磁盘上运行 chkdsk 命令,您必须是该 Administrators 组的成员。
如果希望 chkdsk 修复磁盘错误,则此前不能打开该驱动器上的文件。如果有文件打开,会显示下述错误消息:
Chkdsk cannot run because the volume is in use by another processWould you like to schedule this volume to be checked the next time the system restarts?(Y/N)
如果选择下次重新启动计算机时检查该
驱动器,则重新启动计算机后 chkdsk 会自动检查该驱动器并
修复错误。如果该驱动器分区为
启动分区,则 chkdsk 在检查完该驱动器后会自动重新启动计算机。
在
Windows XP中手动调用Chkdsk工具:
在运行中输入Chkdsk X: (后接参数,可参见上述参数解释),回车
比如输入chkdsk e: /f /r
回车运行就表示修复e盘上的错误,并找到
坏扇区恢复可读取的信息
在Windows XP中文版环境下chkdsk工具是以中文语言运行的
上述运行方式是命令行方式,还能通过
图形界面程序运行,但显示内容简略。
打开
我的电脑,右键单击需要检测的磁盘-属性-工具
选项卡-开始检查
检查选项:
自动修复文件系统的错误(A):修复磁盘上的错误。必须锁定磁盘,如果磁盘被占用,则会显示是否在下次开机时检查的选项。相当于命令行中 /f 命令扫描并试图恢复
坏扇区(N):找到坏扇区并恢复可读取的信息。必须锁定磁盘。相当于命令行中 /r 命令
报告磁盘错误
chkdsk 命令会检查磁盘空间和
文件分配表 (FAT)以及 NTFS 文件系统的使用情况。Chkdsk 在状态报告中提供特定于每个文件系统的信息。状态报告显示文件系统中找到的错误。在
活动分区上运行 chkdsk 时,如果未含 /f 命令行选项,则它可能会因为无法锁定该
驱动器而报告
虚假信息。应该不定期使用 chkdsk 检查每个磁盘上的错误。
修复磁盘错误
只有指定 /f
命令行选项,chkdsk 命令才修复磁盘错误。Chkdsk 必须可以锁定
驱动器以纠正错误。由于修复通常会更改磁盘的
文件分配表,有时还会丢失数据,所以 chkdsk 会首先发送如下所示的确认消息:
10 lost allocation units found in 3 chains.
Convert lost chains to files?
如果按 Y,Windows 会在
根目录中将所有丢失链保存在一个名为 Filennnn.chk 的文件中。chkdsk 结束后,可以查看这些文件是否包含了所需的数据。如果按 N,Windows 会修复磁盘,但对于丢失的
分配单元,它不保存其内容。
如果不使用 /f 命令行选项,则在有文件需要修复时,chkdsk 会发送消息,但它不修复任何错误。
如果在大磁盘(例如,70 GB)或有大量文件(数百万)的磁盘上使用 chkdsk /f,这可能要花很长时间(比如说,数天)才能完成。因为 chkdsk 直到工作完成它才会交出
控制权,所以计算机在这段时间内将不可用。
检查 FAT 磁盘
Windows 以下列格式显示 FAT 磁盘的 chkdsk 状态报告:
检查 NTFS 磁盘
Windows 以下列格式显示 NTFS 磁盘的 chkdsk 状态报告:
存在打开文件的情况下使用 chkdsk
如果该
驱动器上有打开的文件,则指定 /f 命令行选项后,chkdsk 会发送错误消息。如果未指定 /f 命令行选项并且存在打开的文件,则 chkdsk 会报告磁盘上丢失的
分配单元。如果打开的文件没有记录在
文件分配表时,可能会发生这种情况。如果 chkdsk 报告大量分配单元丢失,可以考虑修复该磁盘。
使用 /r 命令行选项可查找文件系统中的物理磁盘错误。有关使用 recover 修复物理性损坏文件的信息,请参阅“”。
在磁盘第一次准备
运行时,chkdsk 报告的坏扇区标记为损坏。它们不会造成危险。
退出码
下表列出了 chkdsk 完成任务后报告的退出码。
退出码 说明
0 没有发现错误。
1 错误已找到并修复。
2 已执行清理磁盘(例如碎片收集),或者因为没有指定 /f 而未执行清理磁盘。
3 由于未指定 /f 选项,无法检查磁盘,错误不能修复或错误未修复。
故障恢复控制台提供了带有不同参数的 chkdsk 命令。
范例
如果要检查
驱动器 D 中的磁盘,并且希望 Windows
修复错误,请键入:
chkdsk d:/f
如果遇到错误,chkdsk 会暂停并显示消息。Chkdsk 完成任务时会显示列有磁盘状态的报告。除非 chkdsk 已完成任务,否则无法打开指定驱动器上的任何文件。
在 FAT 磁盘上,要检查
当前目录中所有文件的不相邻块,请键入:
chkdsk *.*
Chkdsk 显示状态报告,然后列出符合具有不相邻块条件的文件。
XOX
使用指南
使用CHKDSK命令的注意事项
(1)系统存在打开的文件时
当有文件打开时请不要使用CHKDSK。因为CHKDSK是假定
磁盘文件处于关闭状态而设计的。当有文件打开时,相应的MS-
DOS将会修改
文件分配表和目录结构。这种改变并不一定立即进行,文件分配表和目录结构的改变发生在不同时刻。因此如果磁盘上文件打开时运行CHKDSK,就会把
目录结构和文件分配表的不一致解释为出错,从而导致数据丢失或
文件系统的破坏。因此,在运行其它程序,如
Microsoft Windows时,千万不要运行CHKDSK。
CHKDSK不能用于由SUBST命令形成的驱动器工作,也不能用于
网络驱动器上的磁盘检查。
CHKDSK命令只能找到文件系统中的
逻辑错误,而不能查找物理磁盘错误。要查找物理磁盘错误,请使用
SCANDISK程序。
CHKDSK报告中将
坏扇区标记上“bad”,SCANDISK和其它
物理磁盘错误修正程序也将坏扇区标记为“bad”,因此坏扇区不会造成危害。
如果有两个文件或目录共用同一
磁盘空间的记录,CHKDSK会报告有
交叉链接文件。如果CHKDSK发现有交叉链接文件存在,会显示类似如下信息:
is cross linked on allocation unit
CHKDSK不会修补交叉链接文件,即使指定了/F项。要修复交叉链接文件,需要运行SCANDISK程序,或者进行手工修复,然后复制到指定的文件中并删除原文件。
新增开关 /C 和 /I 的说明
本文介绍了两个新的开关:/C 开关和 /I 开关,它们包含在 Windows XP 中的 CHKDSK 程序中。这些开关可用于更好地管理由于运行 CHKDSK 或 AUTOCHK 而造成的停机时间。
/C 和 /I 开关仅对使用 NTFS 文件系统格式化的驱动器有效。这两个新的开关都指示 CHKDSK
例程跳过某些 CHKDSK 原本要执行以验证 NTFS 数据结构完整性的操作。
如果
联机运行 CHKDSK,则实际执行验证的代码位于
实用程序 DLL(例如 Untfs
.dll 和 Ufat.dll)中。CHKDSK 调用的验证例程与通过 Windows
资源管理器或
磁盘管理图形用户界面验证卷时所运行的例程相同。
但是,如果将 CHKDSK 计划为在计算机重新启动时运行,则包含验证代码的二进制模块为 Autochk.exe,它是一个 Windows 固有程序。由于 Autochk.exe 在计算机启动序列中靠前的位置运行,Autochk.exe 不具有
虚拟内存或其他 Win32 服务的优点。
Autochk.exe 与 Chkdsk.exe 实用程序 DLL 生成相同种类的
文本输出。Autochk.exe 在
启动过程中显示这些文本输出,并在
应用程序事件日志中记录事件。所记录的事件信息中包含事件日志的
数据缓冲区所能容纳的
最大数量的文本输出。
由于 Autochk.exe 和 Chkdsk.exe 实用程序 DLL 中的验证代码都基于相同的
源代码,因此本文的其余部分将使用术语“CHKDSK”来统称 Autochk.exe 和 Chkdsk.exe。与此类似,由于本文仅讨论那些与 NTFS 卷有关的 CHKDSK 更改,因此,任何“CHKDSK 如何如何”的语句的意思都是“CHKDSK 在 NTFS 卷上
运行时如何如何”。
请注意,如果您使用 /C 和 /I 开关,则即使运行了 CHKDSK,卷仍可能是损坏的。因此,建议您仅在必须将停机时间降至最短的情况下才使用这些开关。这些开关适用于以下场合:必须在特别大的卷上运行 CHKDSK,并且需要灵活地管理所造成的停机时间。
要了解何时适于使用 /C 和 /I 开关,您需要对某些内部的 NTFS
数据结构、
可能发生的损坏的种类、CHKDSK 在验证卷时采取的操作以及回避 CHKDSK 的常规验证步骤可能有哪些后果等有一些基本的了解。
/C 和 /I 开关的价值在卷上检测到磁盘损坏时,有三个基本的应对选择。
第一个选择是什么都不做。在需要全天 24 小时联机的使命关键服务器上,这通常是必要的选择。缺点是相对较轻的损坏会逐渐发展为重大的损坏。因此,仅当使服务器保持联机比确保损坏卷上所
存储数据的
完整性更为重要时,才应考虑此选择。在运行 CHKDSK 之前,损坏卷上的所有
数据都应当被看作是“危险”的。
第二个选择是运行完整的 CHKDSK 操作,以修复所有文件系统数据并通过自动进程还原所有可以恢复的用户数据。但是,运行完整的 CHKDSK 操作可能会在不适当的时机使得使命关键服务器停机数小时。 第三个选择是通过使用 /C 和 /I 开关中的一个或两个,修复可能会发展为更严重问题的损坏类型(这比完整 CHKDSK 所需的时间少得多),运行简化的 CHKDSK 操作。
但是,请注意,运行简化的 CHKDSK 并不能修复可能存在的所有损坏。您仍需要在将来某个时间运行完整的 CHKDSK,以确保所有可恢复的数据都已实际得到恢复。
另请注意,NTFS 在发生磁盘损坏后并不能保证用户数据的完整性,即使您立即运行了完整的 CHKDSK 操作。CHKDSK 可能无法恢复某些文件,而 CHKDSK 所恢复的某些文件可能内部仍是损坏的。因此,通过执行定期备份或使用某些其他的可靠的
数据恢复方法来保护使命关键的数据,仍然是极其重要的。
了解 CHKDSK 所采取的操作
CHKDSK 的活动分为三个主要阶段(在这三个阶段中,CHKDSK 将检查卷上的所有
元数据),另外还有一个可选的第四阶段。
元数据是“有关数据的数据”。元数据是文件系统的“
系统开销”,它跟踪有关所有在卷上存储的文件的信息。元数据包括有关以下方面的信息:给定文件的数据由哪些
分配单元组成、哪些分配单元是可用的以及哪些分配单元包含坏扇区等。另一方面,
文件包含的数据称为“用户数据”。NTFS 通过使用
事务日志来保护它的元数据。用户数据没有以这种方式进行保护。
阶段 1:检查文件在第一个阶段,CHKDSK 会显示一条消息,通知您 CHKDSK 正在验证文件,同时还显示已完成的验证任务的
百分比(范围为从 0% 到 100%)。在此阶段中,CHKDSK 将检查卷的主文件表 (
MFT) 中的各个文件记录段。
MFT 中的特定文件记录段唯一地标识 NTFS 卷上的各个文件和目录。CHKDSK 在此阶段显示的“已
完成百分比”是 CHKDSK 已验证的 MFT 的百分比。在此阶段中,CHKDSK 将检查各个文件记录段的
内部一致性,并生成两个位图,一个表示正在使用的文件记录段,另一个表示卷上正在使用的簇。
在此阶段结束时,CHKDSK 将会识别 MFT 内部和整个卷上的已用空间和可用空间。NTFS 在其自身的位图中跟踪这些信息,该位图存储在磁盘上。CHKDSK 将它的结果与 NTFS 保持的位图进行比较。如果存在差异,将在 CHKDSK 输出中记录这些差异。例如,如果发现正在使用的文件记录段损坏,则在 CHKDSK 位图中,与该文件记录段相关联的
磁盘簇将被标记为“可用”,但在 NTFS 位图中,它将被标记为“使用中”。
阶段 2:检查索引在第二个阶段,CHKDSK 会显示一条消息,通知您 CHKDSK 正在验证索引,同时还显示已完成的验证任务的百分比(范围为从 0% 到 100%)。在此阶段中,CHKDSK 将检查卷上的各个索引。
索引实际上就是 NTFS 目录。在此阶段中,CHKDSK 显示的“已完成百分比”是已检查的卷目录总数的百分比。在此阶段中,CHKDSK 将检查卷上的各个目录,检查内部一致性,并验证 MFT 中的文件记录段所代表的每个文件和目录都至少由一个目录引用。CHKDSK 确认目录中引用的每个文件或
子目录都实际作为有效的文件记录段存在于 MFT 中,并且还检查是否存在循环目录引用。最后,CHKDSK 将确认在文件的
目录项中,这些文件的
时间戳和
文件大小信息都是最新的。
在此阶段结束时,CHKDSK 将确保没有“孤立”的文件,并且所有目录项都用于合法的文件。孤立文件是指存在该文件的合法文件记录段,但该文件却没有列在任何目录中。如果相应的目录仍存在,则孤立文件通常可以恢复到正确的目录中。如果正确的目录已不存在,CHKDSK 将在
根目录中创建一个目录,并将文件放入该目录中。如果 CHKDSK 发现不再使用的文件记录段的目录项,或者虽然仍在使用但并不与目录中列出的文件相对应的文件记录段的目录项,CHKDSK 将直接删除该文件记录段的目录项。
阶段 3:检查安全描述符在第三个阶段,CHKDSK 会显示一条消息,通知您 CHKDSK 正在验证安全描述符,同时还显示已完成的验证任务的百分比(范围为从 0% 到 100%)。在此阶段中,CHKDSK 将检查与卷上的文件或目录相关联的每个
安全描述符。
安全描述符包含有关下列方面的信息:文件或目录的所有权、文件或目录的 NTFS 权限以及文件或目录的审核。在此阶段中,CHKDSK 显示的“已完成百分比”是卷上已检查的文件和目录的百分比。CHKDSK 将验证各个安全描述符的结构是否正常,并验证该结构的内部一致性。CHKDSK 并不验证列出的用户或组实际上是否存在,也不验证所赋予的权限是否适当。阶段 4:检查扇区如果 /R 开关生效,CHKDSK 将运行第四个阶段,以便在卷的可用空间中查找坏扇区。CHKDSK 将尝试读取卷上的每个扇区,以确认该扇区是否可用。即使不使用 /R 开关,CHKDSK 也总是读取与元数据相关联的扇区。如果指定了 /R 开关,将在 CHKDSK 的较早阶段读取与用户数据关联的扇区。
当 CHKDSK 找到不可读的扇区时,NTFS 会将包含该扇区的簇加入它的
坏簇列表中。如果坏扇区正在使用,CHKDSK 将分配一个新的簇,以完成该坏簇的工作。如果您使用的是容错磁盘,NTFS 将恢复坏簇的数据,并将这些数据写入新分配的簇中。否则,新的簇中将填充某种模式的 0xFF 字节。
如果 NTFS 在正常运行过程中遇到不可读的扇区,NTFS 将
以与运行 CHKDSK 时相同的方式重新映射这些扇区。因此,通常无须使用 /R 开关。但是,如果怀疑磁盘可能有坏扇区,则使用 /R 开关就是一个扫描整个卷的简便办法。
了解 CHKDSK 的时间要求
前面对 CHKDSK 的各个运行阶段的说明只是粗略概述了 CHKDSK 为验证 NTFS 卷的完整性而执行的最重要任务。CHKDSK 还在各个阶段中执行许多额外的特定检查,并在各个阶段之间执行几种快速检查。但是,即使是这样的粗略概述也能够提供一些基础知识,以便我们开始讨论影响 CHKDSK 运行所需时间的可变因素,以及讨论 Windows XP 中可以使用的新增 /C 和 /I 开关的影响。
可变因素 1:“索引”阶段在运行 CHKDSK 的第一和第三阶段(检查文件和检查安全描述符),“已完成百分比”
指示器的进度相对比较平滑。虽然未使用的文件记录段需要的
处理时间的确较少,而大型安全描述符的确需要较多的处理时间,但是总体说来“已完成百分比”相当准确地反映了该阶段所需的
实际时间。
不过,这一百分比/时间关系却未必适用于第二阶段,也就是 CHKDSK 检查索引(NTFS 目录)的那个阶段。处理目录所需的时间与该目录中包含的文件和子目录的数量密切相关,但是在该阶段中,“已完成百分比”仅与 CHKDSK 必须检查的目录数量有关。并没有针对某些特定操作(例如,处理包含数量巨大的文件和子目录的目录)所需的时间进行调整。除非卷上的目录都包含大致相同数量的文件,否则该阶段中显示的“已完成百分比”将不会可靠地反映第二阶段所需的实际时间。
更坏的情况是您可能陷入意外的 CHKDSK 过程,这时 CHKDSK 的第二阶段通常是需时最长的阶段。
可变因素 2:卷的情况许多与卷的状态有关的因素都会影响 CHKDSK 运行所需的时间。用于预测在给定卷上运行 CHKDSK 所需时间的公式必须考虑文件和目录的数目、卷的总体碎片化程度(特别是 MTF 的碎片化程度)、文件名的格式(长名称、8.3 格式名称或混合型名称)以及 CHKDSK 必须修复的实际损坏量等可变因素。
可变因素 3:硬件问题硬件问题也会影响 CHKDSK 运行所需的时间。可变因素包括可用内存的数量、
CPU 速度、磁盘速度等。
可变因素 4:CHKDSK 设置如果不使用 /R 开关,则给定硬件平台上与时间最密切的因素是该卷上的文件和目录的数量,而不是卷的绝对大小。
例如,如果不使用 /R 开关,则对于仅包含一个或两个大型
数据库文件的 50 GB 卷,CHKDSK 的运行可能只需要几秒钟。如果使用 /R 开关,CHKDSK 将必须读取并验证卷上的每个扇区,对于大型卷而言,这会显著增加运行所需的时间。另一方面,如果一个相对较小的卷包含几十万甚至几百万个小文件,则运行 CHKDSK 可能需要数小时,无论您是否指定 /R 开关。
预测 CHKDSK 的时间要求
如上所述,运行 CHKDSK 所需的时间从几秒到几天不等,这要由您的具体情况决定。预测对给定卷运行 CHKDSK 所需时间的最好办法是:在系统
利用率较低的时段,以只读模式实际进行一次
测试运行。
但是,出于以下原因,必须谨慎使用此方法: