CHKDSK的一个令人困惑的bug_清风明月斋

来源:百度文库 编辑:神马文学网 时间:2024/04/29 09:07:02
昨天,我无意间运行了一下chkdsk,结果竟然报告有错误,需要使用chkdsk /F来进行修复。系统是Windows XP Pro SP2简体中文版的,操作系统所在的这个E:盘是ntfs文件系统。我印象中ntfs是不太有磁盘错误(硬盘物理损坏另当别论)这种情况的,因为ntfs本身就具备强大的日志和自动修复功能。
有了问题了当然要修复。于是运行chkdsk /F,chkdsk报告说无法锁定当前驱动器,需要在下次启动时候运行chkdsk。这是意料之中的,因为当前这个分区是系统所做的分区。那就重启动吧。
重启动,chkdsk自动运行,过程好像挺顺利,很诀结束并再次重启,进入图形界面。
出于习惯,我再次运行chkdsk,看看现在有没有问题了。令我有点惊讶的事情发生了,chkdsk还是报告说有问题,需要用/F参数来修复。具体的输出信息与上次一样:
E:\>chkdsk
文件系统的类型是 NTFS。
卷标是 hda3_WinXP。
警告! 没有指定 F 参数
用只读模式运行 CHKDSK。
CHKDSK 正在校验文件(3 的阶段 1)...
文件校验完成。00。
CHKDSK 正在校验索引(3 的阶段 2)...
索引校验完成。00。
CHKDSK 正在恢复丢失的文件。
CHKDSK 正在校验安全描述符(3 的阶段 3)...
安全描述符校验完成。
CHKDSK 发现主控文件表(MFT)位图中有标记为
已分配的可用空间。
正在修复卷位图的错误。
Windows 发现文件系统有问题。
运行 CHKDSK (使用选项 /F) 来更正这些问题。
总共有 12586895 KB 磁盘空间。
61555 个文件中有 9631188 KB。
6810 个索引 20528 KB。
不正确扇区 0 KB。
系统正在使用 153423 KB。
日志文件占用了 64992 KB。
磁盘上 2781756 KB 可用。
每个分配单元中有 4096 字节。
磁盘上共有 3146723 个分配单元。
磁盘上有 695439 个可用的分配单元。
我当时就觉得不妙,难道硬盘有物理故障了?这可是用了约2个月的新硬盘呀。再修复一次试试看。
于是继续用chkdsk /F,重启动自动chkdsk。再次重启进入界面。然后再用chkdsk看看,问题依旧呀。
我就这样重新启动了4、5次,但是都没有解决问题。chkdsk总是报告说有问题,需要用/F修复,然而真用了/F但还是没有修复问题。
报告的错误,除了上面那种,有时是这样的:
E:\>chkdsk
文件系统的类型是 NTFS。
卷标是 hda3_WinXP。
警告! 没有指定 F 参数
用只读模式运行 CHKDSK。
CHKDSK 正在校验文件(3 的阶段 1)...
文件校验完成。00。
CHKDSK 正在校验索引(3 的阶段 2)...
索引校验完成。00。
CHKDSK 正在校验安全描述符(3 的阶段 3)...
安全描述符校验完成。
正在修复卷位图的错误。
Windows 发现文件系统有问题。
运行 CHKDSK (使用选项 /F) 来更正这些问题。
总共有 12586895 KB 磁盘空间。
61556 个文件中有 9631192 KB。
6810 个索引 20528 KB。
不正确扇区 0 KB。
系统正在使用 153423 KB。
日志文件占用了 64992 KB。
磁盘上 2781752 KB 可用。
每个分配单元中有 4096 字节。
我觉得问题复杂了。还是上网查查吧。
google: chkdsk ntfs "正在修复卷位图的错误"
结果只有一个网页,在一个bbs中有人也发现这个问题,总解决不了。换个思路,用英文查,毕竟英文资料比中文的多呀。
google: chkdsk ntfs bitmap error
希望我的这个“翻译”能比较准确地命中。结果是一大堆呀,一个个打开来看看,原来,老外遇到这种情况是很多的。在很多论坛、bbs中,都是寻求这个问题的解答的,但连续看了很多网页,都没有完善地解决这个问题。
看来这是个疑难杂症?
不过,通过这些英文网页,我知道在英文版中,chkdsk对这个问题的输出中有这样的关键字句:Correcting errors in the Volume Bitmap。
好的,缩小范围,再来查一下。
google: chkdsk ntfs "Correcting errors in the Volume Bitmap"
这次很顺利,马上在一个老外的博客网页上,发现了这篇文章:
http://mike.steinbaugh.com/journal/2002/08/28/ntfs-file-system-glitch.html
读完这篇文章,终于知道了这个问题的具体情况。大意是这样的。
这个博客的主人也遇到了这个问题,难以解决。于是他寻求微软的技术支持。微软答复说,ntfs上的chkdsk的确有这个问题。
当用chkdsk检查ntfs卷时,也会检查主控文件表(MFT)中的安全描述子(security descriptor)数据库,如果发现有的安全描述子不被任何文件所引用,chkdsk就会输出这个错误信息。
进一步的解释。当我们对ntfs卷上的文件、目录设置访问权限时,系统会在该卷的MFT中创建一个唯一的安全描述子,用以描述这些权限设置,并且对这个文件或目录创建一个引用(类似于指针),指向这个安全描述子。这样就完成了对这个目录或文件的权限设置。
然而,如果以后不再使用这些安全描述子(注:我理解为,撤销了这些额外的权限设置),那么这些安全描述子并不会被删除,而是继续保留。因为,有可能它们还会被使用,就像所有的Cache策略一样。
然后问题就出现了,chkdsk检测出这些安全描述子不被任何文件所引用,但还占据在MFT中,所以认为是“主控文件表(MFT)位图中有标记为已分配的可用空间”。
可以说,这是chkdsk将一个比较正常的现象当作故障来报告了,而且它也没办法修复,其实也不必修复。
了解了这些,我们也可以知道,这就不必要去“解决”了,因为本质上也没有什么问题。
当然,从软件完善的角度来说,chkdsk这样的输出肯定是不妥当的,小题大做,引起用户的“恐慌”。看看网上那么多对这个问题求助的帖子,就知道了。
看那个老外的博客上的文章,他贴出这个帖子(当时已经解决)是2002年8月28日,当时微软就是这么回复他的。但直到现在,2005年了,都WinXP SP2了,微软依然不进行任何修正。这好像也太不应该了吧。
其实要修正这个问题,真的很简单,只要让chkdsk忽略这种情况,对此现象不输出错误信息就行了。微软对真正的安全问题是很重视,补丁是三天两头出,但对这种“不是问题的问题”,它就可以这么放任不管?
=====================================
卷位图是文件系统的术语,这代表你的硬盘的文件系统出了问题或者是硬盘有坏道。
=====================================
NTFS 主文件表 (MFT) 扩展
创建和格式化 NTFS 卷时,将创建 NTFS 图元文件。其中的一个图元文件称为主文件表 (MFT)。它在创建时非常小(大约 16 KB),但将随着在卷上创建文件和文件夹而增大。创建文件时,该文件会作为文件记录段 (FRS) 输入 MFT。FRS 的大小始终是 1024 字节 (1 KB)。在将文件添加到卷中时,MFT 将增大。但是,当删除文件时,相关的 FRS 将被标记为可供再次使用,但 FRS 和相关 MFT 分配总数保持不变。这就是在您删除大量文件后仍不能重新获得由 MFT 使用的空间的原因。
NTFS 文件系统损坏
在极为罕见的情况下,NTFS 图元文件 $MFT 或 $BITMAP 可能已损坏,进而导致磁盘空间丢失。可通过对卷运行 chkdsk /f 命令来鉴定并修复此问题。如果必须调整 $BITMAP,您会在 chkdsk 将近结束时收到以下消息:
正在修复主文件表 (MFT) 位图属性的错误。CHKDSK 发现卷位图中有标记为已分配的可用空间。Windows 已更正文件系统。