2014-12-13, 我的电脑实在是太老了,跟了我6年了,经过了各种折腾,最近总是启动不了,要我把硬盘线好好插牢才能启动。然后今天启动的时候电脑进入检查硬盘的界面,我嫌弃它太慢,果断强制重启,结果悲剧发生了。
电脑中有两块硬盘,我们叫它h0和h1吧,操作系统安装在h0上,引导分区也是在h0上。进去之后h0的c、d、e三个盘是正常的。但是h1的f、k、l、m点击显示“文件或目录损坏且无法读取”。在我的电脑中也不显示总大小和剩余空间。
解决工具:
1. 大百度
2. Diskgenius
3. Winhex + diskgenius
解决过程:
1. 本着完事问百度的精神,查看了半天百度。也没有解决。如果类似:
http://jingyan.baidu.com/article/e9fb46e191f6157521f76606.html
的解决办法能够解决你的困惑那就不用往下看了。
2. Diskgenius是我一直都在使用的硬盘神器,一直我以为它能解决一切问题。结果这次真的……跪了。我使用diskgenius打开硬盘h1,可以正常打开,里面的文件也全部没有问题,但是在“我的电脑”点击就是显示“文件或目录损坏且无法读取”。看来不是分区表的问题。
3. 使用chkdsk来修复,显示的错误信息是“无法获取卷的版本信息”,失败。使用dskgenius显示ntfs和卷guid均为0,难怪chkdsk不认识。
下面进入正题。
由于以上方法都不能解决问题,那么我只剩下去了解ntfs的机制这一条路可以走了。
通过以下资料我对ntfs有了大概的了解。
Ntfs文件系统解析,资料比较粗糙,我需要更加详细的资料。
http://www.360doc.com/content/10/1229/16/4573246_82348341.shtml
www.ntfs.com
ntfs资料比较全面,但是缺少了mft的相关详细资料。
http://www.intohard.com/jishujiaocheng/shujuhuifu_js/shu-ju-hui-fu-zhi-winhex-xiu-fu-wen-jian-huo-mu-lu-sun-huai-qie-wu-fa-du-qu.html
一个高手使用winhex修复硬盘的资料,给了我很多启发。
http://bbs.intohard.com/thread-108306-1-1.html
mft数据项的详细结构,正是我要的。
步骤:
1. 既然分区表没有问题,那么肯定是各个分区内有问题。通过以上我查到ntfs版本信息和guid等信息保存在$Volume文件中,那我就去找$Volume文件。然后想办法修改版本信息和guid信息。
我使用winhex打开了h1,然后打开f盘,结果发现里面没有$Volume文件,真的没有。
那么我使用winhex打开正常的c盘看一下$Volume中的内容,结果发现$Volume中什么都没有。
2. 详细查看资料发现事实上$Volume的文件的内容是存放在$mft中的第4个项中的,因为内容很少可以存放在$mft中。
使用winhex打开$mft,看到第一个项开始4个字节是FILE,表示正常,但是第二个、第三个、第4个都是BAAD,表示此项已经损坏。第二个是$msfmirr,是$mft前16个元数据文件的备份文件。第三个是log文件,第4个是$Volume文件。
3. 我们知道mftmirr保存了这几个文件的备份,所以我们去看备份是否完整,如果完整,那么就拷贝过来。
我们通过diskgenius能够查看到$mftmirr簇号,每个簇包含的字节数,相乘,然后使用winhex定位到字节。就看到了$mft前16个项的备份。
结果不幸是坏的。
4. 这就难办了,我们不知道这几个项目原来的数据是什么,这怎么办?
不管别的,我们先把$Volume弄好再说,但是$Volume原来的数据我们也不知道。
解决办法是将C盘完整的$Volume拷贝过来.
然后查看$mftmrr,重新构造难度比较大,于是通过细心观察,发现$mftmrr中的数据整体上是对的,只是整个数据向左偏移了两个字节。另外一个也是一样。想来应该是在写入数据的时候被我强行关机,一部分数据没有写进去。
将两个项的正常的数据拷贝,然后将头改成FILE,加上3000两个字节(16进制的)。再把数据粘贴。
最后执行chkdsk f: /f命令。然后硬盘就出来了。