第13、14、15、16字节40 09 29 00:本分区的总扇区数。也就是扩展分区的总扇区数。转为十进制应该是2689344。想一想,用这个数加上前面的1435392,不正好是整个硬盘的总扇区数4124736吗?
这样,如果分区表被破坏,我们只要把这些数值都计算出来并填上,分区表不就恢复了?那么,这里我们为什么不分析第2、3、4字节(本分区的起始磁头号、扇区号、柱面号)和第6、7、8字节(本分区的结束磁头号、扇区号、柱面号)呢?这是因为C/H/S(柱面/磁头/扇区)是老式硬盘的寻址方式,这种寻址方式来管理硬盘效率很低;而现在几乎所有的硬盘都支持LBA(全称是Logic Block Address,即扇区的逻辑块地址)寻址方式,这种管理方式简单高效。在LBA方式下,系统把所有的物理扇区都统一编号,按照从零到某个最大值排列,这样只用一个序数就确定了一个唯一的物理扇区。
小知识:具体一个硬盘有多少个LBA(扇区)不需要我们去记忆,因为用各种工具软件(如MHDD WINHEX等)都可以检测到。我们只要知道个大概就行了:如10G的硬盘大概有2000万个扇区;20G的硬盘大概有4000万个扇区;40G的硬盘大概有8000万个扇区……那么,2G的硬盘大概有400万个扇区。
那么,你可能要问了:如果要恢复分区表,这个起始磁头号、扇区号、柱面号还有结束磁头号、扇区号、柱面号应该怎么填呢?简单得很,在后面恢复分区表的时候我会告诉你,直接填,都不用计算。
还有兴趣来分析一下D盘的EBR吗?
其实D盘的EBR和E盘的EBR我们不分析也罢,因为无非也是分区表,跟MBR的结构是一样的,但却很容易把我们绕晕,又因为EBR一般不容易被破坏,所以我不建议分析EBR。
但如果你一定要分析,那就分析吧。
单击“访问”下拉按钮——“分区二”——“分区表”,直接就到1435392扇区,即D盘的分区表EBR。
第一个分区表项(D盘):
第1个字节00:表示非活动分区
第5个字节06:表示FAT16分区
第9、10、11、12字节3F 00 00 00:本分区之前已用了的扇区数,也就是EBR的数目,63个。
第13、14、15、16字节C1 E6 15 00:本分区的总扇区数,也就是D盘的扇区数,先反过来排列就是00 15 E6 C1,转为十进制就是1435329。
第二个分区表项(D盘后面的):
第1个字节00:表示非活动分区
第5个字节05:表示扩展分区
第9、10、11、12字节00 E7 15 00:本分区之前已用了的扇区数,也就是D盘的EBR加D盘总共的大小, 63+1435329=1435392
第13、14、15、16字节40 22 13 00:本分区的总扇区数,1253952,也就是E盘的大小再加上一个EBR的数目。
单击“访问”下拉按钮——“分区三”——“分区表”,直接就到2870784扇区,即E
盘的分区表EBR。因为E盘后面没有分区了,所以没有第二个分区表项。这里我们就不再研究了,有兴趣的话可以自己多备一块硬盘作从盘,然后自己分分区研究研究。
通过以上的研究我们总结一下,MBR在定义分区的时候,将多余的容量定义为扩展分区,指定该扩展分区的起止位置,根据起始位置指向硬盘的某一个扇区,作为下一个分区表项,接着在该扇区继续定义分区,如果只有一个分区,就定义该分区,然后结束;如果不止一个分区,就定义一个基本分区和一个扩展分区,扩展分区再指向下一个分区描述扇区,在该分区上按照上述原则继续定义分区,直至分区定义结束。这些用来描述分区的扇区形成一个“分区链”,通过这个分区链,就可以描述所有的分区。系统在启动时按照分区链的连接顺序查找分区,直至找出所有分区。这个链显然是个开链结构,如果形成一个环,系统本身并不会去判断它,它只是按照这个链忠实的查找分区,而不进行任何额外的检测与处理。所谓硬盘逻辑锁,就是让分区链形成一个环,这样系统在启动时就在分区表内循环,表现为系统无法引导,就是从软盘启动,也不能进入硬盘。明白了其结构原理,解决这个问题就简单了,目前有很多种方法解决这个问题,后面我们还会讲到。系统就是利用这种方法使一个
硬盘分区后看起来象多个硬盘。系统能够找到C盘以外的其他逻辑盘的唯一办法就是,沿着EBR所描述的分区链查找分区。
其实,通常情况下EBR是不会被破坏的,或者破坏的几率极低极低,通常情况下,都是只有MBR被破坏,那么这种情况下,我们只要把MBR的分区表64个字节复原,其他的分区顺着分区表所提供的链自然而然就出来了。那么,如何才能将分区表复原呢?这就要通过计算结合Winhex强大的功能来实现了。
下面我们就来模仿分区表被病毒破坏的情况,将MBR全部填零。我们首先将MBR所在的扇区选中。鼠标指向第一个字节,单击右键,选择“选块开始”
然后鼠标指向MBR的最后一个字节,单击右键,选择“选块结尾”
然后我们在选区内部单击鼠标右键,选择“编辑”
这样就有出来一个菜单
然后我们选“填充选块”,这样就出来一个填充选块对话框
在“用十六进制填充”的输入框中输入“00”,再点“确定”
这样MBR所在扇区全部被我们填充为“00”
如果想取消选区,那就用鼠标拖动随便选中一块区域,那么原来的选区就会取消。注意,如果扇区数据被修改了而没有存盘就会变为别的颜色。
修改了扇区,这时候还没有存盘生效,如果你想存盘生效的话,就选择“文件”菜单“保存扇区”命令。
这时候就会出现一个提示,如果你不想存盘了就点取消,如果想存盘,就点确定,再点是。
好,这样就存盘了,扇区被修改的数据又变为黑色。
这样我们就把分区表给删除了,这时候必须重新启动才能生效,如果你打开我的电脑,会发现三个分区(F 、G、 H)还在那里,并且里面的数据还能正常使用。
现在,我们关闭所有程序将电脑重新启动……
经过不长时间的等待,电脑启动起来了,我们打开我的电脑看看,发现F 、G 、H三个分区不见了。
再打开Winhex发现MBR全部为零了,下面我们就着手开始手工恢复分区表
首先恢复引导代码,这最简单了,只要用Winhex到别的系统盘把引导代码复制过来就行了。我现在的机器上不是挂着两个硬盘吗?一个迈拓2G,一个西数40G,西数40G是我的系统盘,那就从这个盘上复制就行了。
单击“磁盘编辑器”按钮
出现“编辑磁盘”对话框
选择“HD0 WDC WD400EB---00CPF0”,点“确定”
这样我们就把系统盘的分区表给打开了,注意,现在我们是打开了两个窗口,当前的窗口是“硬盘0”,在标题栏上有显示。另外,打开窗口菜单也能看出来,当前窗口被打上一个勾,如果想切换回原来的窗口,就点击“硬盘1”。
首先选中系统盘的引导代码
然后在选区中单击鼠标右键,选“编辑”
又出来一个菜单,然后我们选“复制选块”——“正常”
然后我们切换回硬盘1窗口,在零扇区的第一个字节处单击鼠标右键,选“编辑”
然后选“剪贴板数据”——“写入……”
出现一个窗口提示,点“确定”
这样,我们就把一个正常系统盘上的引导代码复制过来了。
下面,我们就开始恢复分区表(共64个字节,分为4个分区表项,每个分区表项占用16个字节,一般只使用前两个分区表项),我们首先来恢复第一个分区标项(也就是用来描述C盘的)。
首先,在第1个字节处(0扇区倒数第五行,倒数第二个字节)填上分区引导标志,因为C盘是活动分区,所以填上80。
接着是第2、3、4字节(本分区起始磁头号、扇区号、柱面号),填上:01 01 00。
第5字节是分区类型符,因为原先C盘是Fat32格式,所以填上:0B。那么,如果你不知道C盘是什么格式怎么办呢?你会说问问客户呀,那么如果他也不知道呢?别着急,后面在说恢复DBR的时候我会教你怎么分辨分区的格式。
第6、7、8字节是本分区的结束磁头号、扇区号、柱面号,这怎么知道呢?别着急,现在的磁盘都是按照LBA方式寻址,并不按照C/H/S(及柱面、磁头、扇区)方式寻址,所以这个地方你填些什么一般关系不大,但是我要告诉你有一个通用的填法,那就是:FE FF FF。
第9、10、11、12字节,本分区之前已用了的扇区数,也就是MBR所占用的扇区数,那不是63吗?对,但是要将63转为十六进制数,再反过来倒着填写上。还记得怎么用计算器吗?将63转为十六进制数是3F,不够四个字节前面加零,也就是00 00 00 3F,再将此数从右向左依次序反过来就是3F 00 00 00。
第13、14、15、16字节是本分区的总扇区数,也就是C盘的大小,这就要通过稍微一点点计算来
得到了。因为C盘是从第63个扇区开始,而C盘后面紧接着的是EBR,所以用EBR所在的第一个扇区数减去63就是C盘的大小。那么如何才能找到EBR所在的第一个扇区呢?我们前面说过,EBR的结构和MBR是一样的,所以,EBR的结束标志也一定是55AA,那么,只要我们找到这个结束标志,再看看这个扇区是不是EBR不就行了?
单击“
搜索”——“查找十六进制数值……”,然后出来一个对话框
在文本框中输入“55AA”,搜索框中选“全部”,然后选中“条件”,把偏移量设置为“512=510”。
再单击“确定”。画面如下:
首先找到第一个“55AA”,我们看到,个扇区在第63个扇区上,并不是我们要找的EBR,再按F3继续查找
又找到好几个扇区,都不是,那么下面这个扇区是不是?
前面我们说过,EBR的结构和MBR的结构是一样的,所以在倒数第五行倒数第二个字节应该是00 01,并且前446个字节应该是0,显然这也不是EBR,继续按F3查找……终于找到了真正的EBR,在1435392扇区。
小技巧:现在的硬盘都比较大,要逐个扇区的查找55AA确实太慢了,那么有没有办法快点呢?有,那就是先问问客户C盘大概有多大,大多数客户还是知道的,比如他说C盘大概有10个G,那么你就不要从头开始找了,因为那实在太慢了。10个G大概是2000万个扇区,那么你可以用转到扇区命令直接到1900万扇区,从那个地方再开始找不就省事多了。
用1435392减去63,得到1435329,再转为16进制,就是15E6C1,将他倒转过来就是C1E61500,这就是C盘的大小。这样,第一个分区表项填写完毕,我们保存一下,再接着填写第二个分区表项。
第二个分区表第1个字节:因为是非活动分区,所以写00
第2、3、4字节,填写01 01 00(通用的)
第5字节:因为是扩展分区,所以填写0F
第6、7、8字节:填写FE FF FF(通用)
第9、10、11、12字节是本分区之前已用了的扇区数,应该就是C盘大小加63,也就是1435392,前面刚计算出来的,转为十六进制数再反过来就是00 E7 15 00
第13、14、15、16字节是本分区的总扇区数,也就是扩展分区的总扇区数,也就是用整个硬盘的大小减去C盘的大小再减去63,即4124736-1435329-63=2689344,转为十六进制就是290940,反过来就是40092900。
这样,第二个分区表项就填写完了。
不要忘了把最后的结束标志55AA填上,这样,MBR就全恢复完了,最后,保存,再重新启动……
启动完毕,迫不及待的打开我的电脑,发现三个分区全部又回来了,并且里面的数据完好无损。
再右击“我的电脑”,选“管理”
出现一个对话框,选“
磁盘管理”,在右边可以看到磁盘一的三个分区(Fat32、Fat16、Ntfs)全部都回来了,至此,手工恢复分区表顺利完成。
手工恢复数据恢复成功率比较高,而且比较有趣味和
挑战性,能找回许多傻瓜似的软件所找不回来的文件,但是要求工程师一定要有耐性,而且一定要保持清醒,清楚自己正在操作什么,操作完了会有什么后果,能不能退回到上一步状态。特别是对一些破坏性操作,一定要考虑周到,只要条件允许,就一定要在操作之前进行备份,否则会造成“血”的教训,切记!!!
下面我们会说到手工恢复DBR、FAT(此教程被收录在付费教程中),这些比手工恢复分区表还要复杂,更需要大量的计算。再说完了使用Winhex手工恢复数据之后,我们会说到一些数据恢复软件,结合数据恢复软件会使数据恢复成功率大大提高,但有一些软件在扫描过程中会对原盘破坏数据,在使用中一定要谨慎!!!而且同一个软件,一个新手用和一个老手用数据恢复成功率绝对是不一样的,这些软件我们会免费赠送,绝对不会让你
学习了资料却找不到软件的。