chkdsk的一个令人困惑的bug
(yanlb2000, 2005.03.04)
昨天,我无意间运行了一下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忽略这种情况,对此现象不输出错误信息就行了。微软对真正的安全问题是很重视,补丁是三天两头出,但对这种“不是问题的问题”,它就可以这么放任不管?
连这个问题都给你搞懂了,佩服。
顶,太专业了