我使用过几种不同的工具来修复磁盘,想知道 CHKDSK 到底能修复什么?MFT?引导扇区?备份引导扇区?簇?有哪些常见问题不能它修复了吗?
答案1
CHKDSK(autochk.exe 和 chkdsk.exe,共享 dll)分几个阶段运行(下面针对 NTFS 卷,略作简化):
第 1 阶段 - “验证文件”。在此阶段,它会检查主文件表(MFT)。MFT 存储文件属性关于文件记录段 (FRS) 中每个文件和目录的信息,例如文件名、创建日期、时间戳等。CHKDSK 查看 FRS 的内部一致性,并构建两个位图(一个显示 FRS,另一个显示实际簇),并将其与 MFT 中存储的位图进行比较。
第 2 阶段 - “验证索引”。在此阶段,它会查看 NTFS 卷上的索引(目录)。它会检查每个目录的内部一致性,并确保 FRS 中的每个文件和目录都包含在目录中。如果某个文件不在目录中,则将其视为“孤立文件”,CHKDSK 会尝试将其放入 FRS 为该文件指定的文件夹中,或者将其放入“找到的”目录中。它还会验证目录中的每个文件/目录是否都有相应的 FRS 条目。如果目录引用了不存在的文件或目录,它会删除该条目。
第 3 阶段 - “验证安全描述符”。安全描述符(包含安全信息,如 ACL 和审计信息)存储在实际文件结构,在此阶段,CHKDSK 将检查其中的每一个,以确保它们的结构正确并且内部一致。
第 4 阶段 - “验证文件数据”。仅当使用 /R 命令(或从 GUI 中选中该框)时才会发生此阶段。在此阶段,CHKDSK 会尝试读取磁盘上的每个扇区。如果指定了 /R,它实际上已经在早期阶段针对元数据和文件数据扇区执行过一次此阶段。如果它发现坏扇区,它会将该扇区所在的簇添加到坏簇列表中,并尝试将数据移动到好扇区(如果不能,它会用 0xFF 填充新簇)。
第 5 阶段 - “验证可用空间”。这也仅在使用 /R 时发生。在此阶段,CHKDSK 尝试从可用扇区读取并将坏簇添加到坏簇列表中。
希望以上内容能解答您的问题。更多信息请参见此知识库, 这白皮书, 和这个指导。
还应注意,NTFS 具有内置的元数据恢复功能,形式为 NTFS 事务日志。这是一个独立于 CHKDSK 的过程。如果系统意外关闭或崩溃,Windows 重新启动时将使用 NTFS 日志文件中的信息执行 NTFS 恢复操作。此过程在上述白皮书的“NTFS 事务日志可恢复性”部分中有详细说明。
答案2
CHKDSK 基本上是 NTFS 的并行实现(NTFS.SYS),它关注的是“完整性检查”MFT,并在必要时进行修复。我不清楚是否有任何关于 CHKDSK 在 NTFS 或 FAT 卷上执行的所有检查和“修复”的全面发布规范。我猜唯一全面的规范是 CHKDSK 本身的源代码。您可能可以从 Microsoft 文档中抄袭一些内容,但我怀疑您找不到每个测试的技术描述,甚至找不到所有测试的列表。
关于引导扇区和备份引导扇区(如果适用于所检查的文件系统类型),我认为任何版本的 CHKDSK 都不会对引导扇区进行任何类型的“修复”。例如,如果您破坏了引导扇区并丢失了 MFT 的偏移量,CHKDSK 不会修复该问题。
我可以肯定地说,CHKDSK 无法解决的唯一“损坏”类型是文件本身数据范围内的损坏。CHKDSK 对非元数据信息无能为力。
答案3
有一份关于 CHKDSK 的旧 Microsoft 白皮书。