A-A+

硬盘维修-用Winhex手动修复分区表以提取数据

2019-10-17 21:11

一、初步应用——双分区恢复实例及分析
(一)、现场重现:
  提示,切勿随意使用自己的硬盘进行试验,切记试验前保存重要数据。对于移动硬盘,损坏往往发生于硬盘传输数据中断电。现在我将一个有问题的移动硬盘接到电脑上,在“计算机管理”-->“磁盘工具”中我们可以看到这个未被初始化的磁盘显示为黑色(打开磁盘工具时它会提示你要初始化,不理它,点“取消”) ,在“计算机”中也找不到这个磁盘。


对于新手,往往是这样几个表情吧其实俺也是这么过来滴~争取这篇文章之后让大家的表情都变成这样
(二)、手动修复:
(阅读有困难的朋友可以先读完第三节再回过头来看这一节,本节的另一个作用是让新手对Winhex界面有一个初步了解)
1、打开Winhex-->菜单栏-->选择“工具”-->打开磁盘(F9)-->选择要修复的硬盘,这里是HD2。


2、打开之后图中显示从0000H-->01ffH(16进制)之间的数据全部为0。


现在我从一个运转良好的硬盘分区表中将0000H-->01bdH之间的数据复制并粘贴到损坏硬盘的相应位置。
操作步骤为:在良好硬盘中拉选0000-->01bd之间的区块,被选中区块呈亮蓝色; 复制选块;


  接下来在损坏硬盘中拉选相应区域,将光标定位至0000;右键-->编辑-->粘贴板数据-->写入。将01fe,01ff填写为55AA,到这里一定保存。


点击黄色区域的图标并转移至63号扇区 菜单“视图”-->模板管理(Alt+F12)-->NTFS引导扇区。



打开如下图 ,并记录黄色方框内的两个数值(63和63777986)


63+63777986+1=63778050,跳转至63778050扇区 。

  稍微向下滚动一点,看到那个粉色框标识出的55AA了嘛?往前找到黄色框内的部分,显示为3F 00 00 00,将其进行反向排列,变为 00 00 00 3F于是3F(十六进制)=63(十进制)——我们称这个数为相对偏移量。
  接下来跳转至63778050+63=63778113扇区,我们又发现了一个EB开头的扇区


  再次选择菜单“视图”-->模板管理(Alt+F12)-->主引导记录NTFS引导扇区。打开如下图 ,同样记录一下黄色方框中的数值(63和92518271)。


跳转至0扇区。菜单“视图”-->模板管理(Alt+F12)-->主引导记录,打开如下图。

填上如图所示的几个数据


至于为什么是这些数据,下节会提到。填写完之后千万别忘了保存哦~好了,在设备管理器里禁用损坏硬盘再启用。再从磁盘管理里看看结果 ,嗯,一切复原看,数据都在。
  过程看上去有些复杂,其实熟练的话可以控制在5分钟之内,所以它并不难~下面就看看我做了些什么,以及那些数据是怎么来的,做什么用的。
(三)、我做了什么?其实只有3步
  上面所做的其实就是修复了硬盘的MBR(主引导分区记录),为什么MBR对于硬盘如此重要呢?看过我前面文章的朋友应该知道分区表就是硬盘的名单:作为一个名单当然不是姓名的简单堆砌,名单也是有分类的,比如哪些人是管理员,哪些人是学生等等~请先看一下刚才修复好的硬盘的MBR全图 (注意其中用亮蓝色、黄色、绿色将512字节的分区表分为了三个部分)


 
硬盘的MBR在启动时大约是起到下面的一个作用:


  可见作为一个MBR,必须要有以下的三个部分:446字节的启动描述;64字节的分区描述(包括分区格式、分区大小等参数);以及最后的55AA结束表示。于是,只要我们能按照一定格式和规律填写这些项目,我们就能自己制作分区表了。对于恢复分区表,我们要做的就是下面的流程:


  
  不难发现,这其中前面的446字节的引导文件和最后添加的“55AA”标识都是ctrl+c然后ctrl+v 的事情,因此修复分区表的关键在于那64个字节的参数是如何寻找及填写的——好在我们利用Winhex自身提供的模板,再加上一点简单的加法运算,就能非常轻松地获得这些参数。如下图,其实需要填写的参数不过8个,而且都非常有规律性:(该图很重要,它显示了那些参数是如何得来的)

  上文的(3)(4


)两步正是我在计算参数所在的位置,而一旦我定位准确,就调用对应的模板去查看参数,随后在(5)里填写参数(别忘了NTFS+1的问题)
  至于第一行活动分区:80表示可以从这个分区启动,00表示不从这个分区启动(这个参数决定电脑能否从该分区引导,和446字节不同,如果没有那个446字节,硬盘都无法识别了)。一般装有系统的主分区需要填写80,其他的00即可。而硬盘参数这一栏:Fat32的代码是0B,NTFS是07,扩展分区是0F~~这些边边角角都很简单,这里就不多说了~至此,分区表修复工作大功告成~~
(四)、小结
  恢复原理:硬盘上的文件是链式的,可以顺藤摸瓜。此外,硬盘损坏的往往是MBR,后面各分区的虚拟MBR都完好无损,可以通过计算后面各分区的参数,逆向推出MBR的参数,从而实现硬盘的修复。
  大致步骤:填写446字节引导文件-->填写64字节分区参数-->55AA结束标志-->别忘保存
  所需参数:活动分区与否(80);分区类型参数(0B, 07, 0F等);各扇区大小——共计8个参数,其他参数不知道如何填写就留空。
  所需时间:非常熟练的话,5分钟。
  风险:因为只是对MBR这512个字节进行操作,所以即使失败,大不了重来,对硬盘上其他数据没有任何损害。建议将这512字节另存为一个文件,以后遇到MBR损坏的事件只要把备份COPY回去就是了~

二、分区表修复进阶——多分区的计算
(一)、一主分区,三逻辑分区情况下的计算
前面提到过硬盘上的分区结构是链式的,又由于MBR之后的各分区表往往保存完好,就可以利用后面的各分区MBR来逆向推导MBR的参数~请看下面的分区链式图:


  在双分区的实例中,填写的参数可表示为:C盘占用扇区+D盘之前的扇区+D盘占用扇区。由于多个逻辑分区的总和算一个扩展分区(不知道什么是扩展分区和逻辑分区的可以看看我前面的那篇文章),于是多分区的参数无非是:C盘占用扇区+扩展分区前的扇区+(逻辑分区D+逻辑分区E+……),总体来讲还是3大块。
  由于分区软件的不同,分区前的保留扇区可能有所不同~比如下图的这块硬盘,采用了diskpart进行分区,分区前的保留扇区达到了2048个而不是常见的63个。
  
  记录C盘占用的扇区数为79871999。由于这是在NTFS模板中查看的信息,所以在做跳转时需要+1,即跳转到2048+79871999+1=79874048扇区。
  由于这是一个“虚拟MBR”,它仍然拥有部分MBR特征,所以我们可以调用“主分区引导模板”来查看这个分区的信息。可以看到这里的分区信息有两项,相对于上一个实例多了一个“05”分区表示标识,不过这个05标识我们先不用管它。直接看第一项的两个参数为2048、167772160。


  接下来跳转至79874048+2048+167772160=247648256扇区(由于这是在“主引导记录”模板里查看的,所以不需要+1),并调用“主引导扇区”模板查看E盘的信息。

  记录两个数值为2048、167772160,注意这个分区仍然有“05”标识。向下跳转到247648256+2048+167772160=415422464扇区。


  到这里,分区信息当中只有一项而没有“05”标识,于是可判定这就是整个扩展分区中的最后一个分区。记录其信息2048、209715200。
  如果觉得混乱,不妨列出下面这样一个表:


  由上面的数据不难算出扩展分区的总扇区数为:(2048+167772160)+(2048+167772160)+(2048+209715200)=545265664。C盘主分区的参数为:保留分区2048,C盘本身占用79872000,于是扩展分区之前的总分区数为2048+79872000=79874048。最后需要填写的参数:


  注意这个硬盘装有系统,于是第一分区表项填为80,分区格式代码为07(NTFS);第二分区不作为引导区,为00,由于是扩展分区,分区格式代码为0F(扩展分区)。其他参数上面皆已算出,直接填入即可。此外由于现在硬盘容量很大,原来的“开始头、扇区、柱面”这几个参数已经不足以表达如此大的数字,所以如果不知道这几个数字如何填写就放在那不去管它,默认为00。
  另一方面,本例不同于前例。前例由于制图需要,是挨个通过MBR或虚拟MBR寻找NTFS引导扇区的位置并调用NTFS模板查看分区信息;而本例中除了在第一分区调用了NTFS模板以寻找扩展分区起始位置以外,其他的分区只在虚拟MBR中调用了“主引导记录”模板。熟练之后可以多采用后面一种方式以节省时间。
(二)、 “05”标识是怎么回事?
  由于虚拟MBR一般不会被破坏,所以多分区计算中,我们不去管那个“05”标识也可以完成参数的计算。不过考虑到喜欢刨根问底的一部分朋友的需要,这里补充一个小节用于讲解MBR或虚拟MBR中分区参数的精细结构。
  首先要更正一下虚拟MBR的说法:为了能在硬盘上分出多于4个分区,我们引入了扩展分区的概念,N个扩展分区的分区表的信息组合起来成为MBR中的扩展分区项。这种特殊的分区表结构在本节中将不再被称为“虚拟MBR”,而采用EBR(Extended Boot Record也称作扩展MBR)进行代替。
  以上面320G硬盘的分区表为例,该硬盘中存在一个主分区和一个扩展分区,而这个扩展分区下面包含三个逻辑分区。而仅从MBR来看,其中仅包含了C盘的信息和整个扩展分区的信息,那么,电脑如何判断扩展分区里的每个逻辑分区有多大?每个逻辑分区各处于扩展分区的什么位置?很显然,仅凭整体的扩展分区信息不能回答上述问题,所以EBR担负着两个任务:一是描述该分区本身的大小、格式、保留空间等信息(这一点和MBR很类似);二是,在扩展分区内部“划清界限”,即描述自身和其他逻辑分区的位置关系。前者的代码采用对 应的分区格式代码(如0B, 07等,但是没有0F,0F是“整体扩展分区”的参数,不是逻辑盘的参数);后者采用“05”这个特殊标识用以“表明身份”。
  如果用图示来表示“05”标识的作用,基本上就是下面这个样子:


  可以推断,如果还有G盘的话,那么F盘的05标识项就是:前者表示D+E+F盘大小,后者表示G盘大小,而G盘就没有05标识了。至此,逻辑分区在扩展分区内的定位问题得到完美解决。
  最后补充一张图用以说明16个字节的分区参数含义(64字节表示4个分区,故每个分区占用16个字节)


(三)、小结
  在修复过程中建议利用表格使分区链表变得清晰。
  主引导记录 模板中的分区不需要加减,从NTFS模板移动至 主引导记录 中需要+1。
  05标识用于扩展分区内部的逻辑分区的定位。
  起始磁盘头等信息现在基本停用。占用扇区数最多为FF FF FF FF,每个扇区占用512个字节,计算下来每个分区最大容量为2047G。如果某日硬盘的分区容量大于这个值,那么分区表的计算方式将改写,比如可能把保留分区的4字节让一个给扇区数,那么单分区的最大容量将变为523776G,我想暂时是够用了……三. 总结及写在后面
  总体来讲整个恢复过程就是三大步:446字节引导文件、64字节硬盘分区参数、55AA结束标识,其中以64字节的硬盘分区参数最为关键。可以说全文最为精华的部分在于第二章和第三章中那两张扇区和参数的对应关系图,望大家在这两张图上多一些耐心。幸而这些参数通过一点加法运算和现成的模板是非常容易获得的,整个恢复步骤不会超过10分钟,而精确性和安全系数都是非常高的。
  希望本文能帮助新手对分区表有进一步的了解,同时也希望本文能帮助到有一定动手能力的朋友。同时还是要提醒大家,如果可能的话还是保存一份硬盘的MBR,这样但凡遇到主分区表问题的时候也能快速复原。此外,Winhex除了恢复硬盘的分区表之外,也可用于恢复U盘的分区表,只要U盘的分区格式是Fat32的,其恢复过程完全和上面一样。Winhex也可用于格式化之后的数据恢复以及误删文件的恢复,此外还有诸多更加强大的功能,限于篇幅,这里就不一一赘述了。

Copyright © 2019-2020 21disk.com 版权所有