我已经使用了几种不同的工具来修复磁盘,并且一直在想,是否有CHKDSK到底可以修复什么呢?MFT?启动扇区?后备引导区?集群?有什么共同的问题不能解决呢?
发布于 2009-07-20 16:38:16
CHKDSK (共享dll的autochk.exe和chkdsk.exe )分几个阶段运行(下面是NTFS卷,稍微简化一些):
第1阶段-“验证文件”。在这个阶段,它检查主文件表 (MFT)。MFT将关于每个文件和目录的文件属性存储在文件记录段中,如文件名、创建日期、时间戳等。CHKDSK查看FRS的内部一致性,并构建两个位图(一个显示FRS的位图,一个显示实际的集群),与存储在MFT中的位图相比较。
第二阶段-“验证指数”。在这个阶段,它查看NTFS卷上的索引(目录)。它检查每个目录的内部一致性,并确保FRS中的每个文件和目录都包含在一个目录中。如果一个文件不在目录中,它就被认为是“孤立的”,而CHKDSK要么尝试将其放入FRS为该文件指定的文件夹,要么将其放在“查找”目录中。它还验证目录中的每个文件/目录都有相应的FRS条目。如果目录引用的是不存在的文件或目录,则会删除该条目。
第三阶段-“验证安全描述符”。安全描述符(包含ACL和审计信息等安全信息)存储在实际的文件结构中,在此阶段,CHKDSK将检查其中的每一个,以确保它们是正确的结构,并且它们在内部是一致的。
第4阶段-“验证文件数据”。只有在使用/R命令(或从GUI中选中框)时,才会出现此阶段。在这个阶段,CHKDSK尝试读取磁盘上的每个扇区。如果指定了/R,它实际上已经对早期阶段的元数据和文件数据扇区执行了一次此阶段。如果发现一个坏扇区,它会将扇区添加到坏扇区列表中,并尝试将数据移动到一个好扇区(如果不能,则用0xFF填充新集群)。
第五阶段-“验证自由空间”。只有在使用/R时才会发生这种情况。在这个阶段,CHKDSK试图从自由部门中读取,并将坏集群添加到坏集群列表中。
希望上面的内容能回答你的问题。更多信息可以在这个KB、这个白纸和这个指南中获得。
还应该指出,NTFS具有以NTFS事务日志的形式内置的元数据恢复功能。这是一个独立于CHKDSK的过程。如果系统意外关闭或崩溃,当Windows启动备份时,它将使用NTFS日志文件中的信息执行NTFS恢复操作。这个过程在上面提到的"NTFS事务日志可恢复性“部分中有详细介绍。
发布于 2009-07-20 15:34:16
CHKDSK基本上是一个并行的NTFS实现(到NTFS.SYS),它关注自己对MFT的“理智检查”,并在必要时进行修复。我不知道CHKDSK对NTFS或FAT卷执行的所有检查和“修复”的全面发布规范。我猜唯一全面的规范是CHKDSK本身的源代码。您可能可以从Microsoft文档中收集一些东西,但我怀疑您是否能够找到每个测试的技术描述,甚至是所有测试的列表。
关于引导扇区和备份引导扇区(如果适用于被检查文件的类型),我不认为任何版本的CHKDSK都会对引导扇区进行任何类型的“修复”。例如,如果您粉碎了引导扇区,丢失了MFT的偏移量,则CHKDSK不会修复该问题。
我可以肯定地说,CHKDSK不能做的唯一类型的“损坏”就是文件本身的数据范围内的损坏。CHKDSK不处理任何非元数据信息。
发布于 2009-07-20 16:12:42
有一个关于CHKDSK的旧微软白皮书可用。
Windows 2000 Chkdsk管理
https://serverfault.com/questions/43029
复制相似问题