chkdsk( 二 )

chkdsk
文章插图
图形界面的磁碟检查工具在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 。(2)CHKDSK不能用于分配的驱动器和网路 。CHKDSK不能用于由SUBST命令形成的驱动器工作 , 也不能用于网路驱动器上的磁碟检查 。(3)物理磁碟错误CHKDSK命令只能找到档案系统中的逻辑错误 , 而不能查找物理磁碟错误 。要查找物理磁碟错误 , 请使用SCANDISK程式 。(4)坏磁碟扇区CHKDSK报告中将坏扇区标记上“bad” , SCANDISK和其它物理磁碟错误修正程式也将坏扇区标记为“bad” , 因此坏扇区不会造成危害 。(5)交叉连结的档案如果有两个档案或目录共用同一磁碟空间的记录 , CHKDSK会报告有交叉连结档案 。如果CHKDSK发现有交叉连结档案存在 , 会显示类似如下信息:is cross linked on allocation unitCHKDSK不会修补交叉连结档案 , 即使指定了/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 所需时间的最好办法是:在系统利用率较低的时段 , 以唯读模式实际进行一次测试运行 。但是 , 出于以下原因 , 必须谨慎使用此方法:在唯读模式下 , 如果在较早阶段中遇到错误 , CHKDSK 会在完成所有三个阶段之前退出 , 并很可能误报错误 。例如 , 如果 NTFS 恰好在 CHKDSK 检查磁碟时修改了磁碟上的区域 , 则 CHKDSK 可能会报告磁碟损坏 。要正确地进行验证 , 卷必须处于静止状态 , 而保证卷处于静止状态的唯一方法就是锁定卷 。CHKDSK 仅当您指定了 /F 开关(或 /R 开关 , 它会隐含指定 /F)时才会锁定卷 。在唯读模式下 , 要使 CHKDSK 完成所有运行阶段 , 可能需要多次运行 CHKDSK 。