你好,游客 登录 搜索网站地图
背景:
阅读新闻

如何恢复硬盘分区表

[日期:2007-03-24] 来源:http://hi.baidu.com/%CF%F4%CB%F7%D0%C0%D3%EA/blog/  作者:http://hi.baidu.com/%CF%F4%CB%F7%D0%C0%D3%EA/blog/ [字体: ]
   
如何恢复硬盘分区表
2007年03月11日 21:27

笔者原有一个30GB移动硬盘,使用磁盘管理工具时,误操作将硬盘逻辑驱动器(移动硬盘的第二分区)删除。重新插上移动硬盘,系统提示创建新的磁盘分区。因不忍眼看精心收集的资料就这样消失,那怕有一线生机也要将丢失的数据找回来,试试吧。
  首先了解一下硬盘的基本情况:此移动硬盘是笔记本硬盘,硬盘分为四个区,即C(系统盘)、D、E、F,均为FAT32 格式,其中被误删除的是D盘。由于是系统自带的磁盘管理中的删除逻辑驱动器功能将磁盘删去的,之后还未重新创建,因此数据肯定没有被擦除,可能只是删去了此硬盘分区的一些信息。如果我们能重新恢复这些信息,系统就可以识别出原磁盘分区以及其中的文件。
  我们平时最常见的分区方式是先建立一个主分区,然后将剩余的空间全部建立扩展分区,再在扩展分区上建立逻辑盘。
  但是,逻辑盘并没有存在于主引导扇区的分区表里,那么硬盘是如何识别逻辑盘符的呢?其实在逻辑盘的扇区上都会建立一个虚拟MBR(主引导记录),扩展分区指向第一个逻辑盘的MBR,第一个逻辑盘的MBR指向第二个逻辑盘的MBR,以此类推。其中硬盘分区表64字节中每16个字节具体含义如表1:
  下面我们将使用DiskGen和KVFIX(江民硬盘修复工具)手工修复硬盘分区表:
  小提示:DiskGen可以显示硬盘分区的基本信息并能进行分区表的备份和修改。KVFIX能查看硬盘的扇区同时还能进行扇区参数的编辑。需要注意的是在操作之前一定要做好备份,而且最好是把备份文件拷贝到其他磁盘上,一旦我们操作有误还可以进行恢复。
  通过DiskGen,我们可以获得一些有用信息,如图1:根据显示的信息我们很容易就能得出被删D盘的起始和终止位置,实际上硬盘的分区就是通过起始位置和终止位置来定的。我们可以由起始和终止的位置算出总的扇区数,也可以由总的扇区数逆推出终止扇区数,同时可以通过查看具体的扇区来检验是否正确。因为就像前面提到的扇区里的字节是有特点的,比方说结束标志55AA。只要我们多观察、多留意就能找到正确的位置并算出具体参数,表2中原D盘值是根据前后的分区表推出的。
      接下来使用KVFIX查看扇区,可以和我们前面讲的字节含义相对应,经过比较对照我们就能构造出原分区表的参数。
  小提示:KVFIX的功能键全都显示在程序的界面。比如:F1直接查看硬盘主引导记录,F6检测硬盘分区并显示分区的扇区数,可以帮助我们快速找到硬盘分区表所在的扇区。不过一般情况下都是将硬盘首扇区记作1,而这里则将硬盘首扇区记作0,表示绝对位置。
  硬盘的主引导记录位于柱面0、磁头0、扇区1,共计512字节。通过查看主引导记录我们会发现:前面的446个字节是主引导信息,紧接着的便是硬盘分区表(表3)。通过用KVFIX查看扇区,我们得出了以下数据,为方便分析,笔者将它做成了示意图(图2),有了示意图,恢复分区表就很容易了。

注意:1.分区表中的值都是用相对值来表示的,但选取的参考系又各不相同。
  比如,用来定义本分区的16个字节中9~12字节表示开始扇区的相对扇区都是63,是因为相对扇区是以本分区的首扇区作为参考的;而用来描述下一个分区开始扇区的值却是以本分区结束扇区作为参考的。如果要构造新的分区表,就必须弄清楚分区表中的参数是以什么作为参考系的,描述的又是哪一部分的值,这是相当重要的。
  2.由于在机器里的数据都是低位在前,高位在后,所以像54 DA 91 00符合我们计算方法的应该是00 91 DA 54。
  3.工具软件中显示的硬盘总扇区数与所有分区的扇区数之和并不相等,因为硬盘中剩有7MB~8MB的空间是用来存储硬盘结构信息的。
  现在我们对硬盘的分区表已经是了如指掌了,接下来的恢复就变得相当容易了,下面我们分两个步骤来完成。首先,做好整个硬盘分区表的备份工作,计算出原D盘分区表的位置;其次就是构造出正确的原D盘分区表,然后填入原位置即可完成。
  由上面的信息我们不难得出原D盘的虚拟MBR的扇区位置是9558675,使用工具KVFIX(F3)定位到该扇区,会发现旧原始分区表已经不正确,但分区结束标志55AA仍在,这也说明我们找到的扇区是正确的。
  接下来我们的工作就是构造完整的分区表,正如我们所知道的分区表描述了两部分内容。所以我们先定义原D盘分区,再描述剩余的空间,定义下一个分区。下面我们开始定义D分区:
  第1个字节应该为“00”,表示非活动分区。
  第2~4字节表示分区开始的磁头号为01、扇区号为01、柱面号为595,对应的十六进制值为“018153”。细心一点我们会发现这个值与C盘分区表中描述扩展分区表的开始值很相似,只是磁头号由00变成了01。由此,可以得出在描述下一分区时是包含隐藏的63个扇区的,而在定义本分区的时候,却是从63个隐藏扇区后面开始计算的。理论上对于不超过8.4GB的硬盘是采用偏移2H和偏移6H的方法计算扇区和柱面的,扇区占6位(bit),柱面占10位(bit)。用二进制来表示时,其中低六位用作扇区数的二进制表示,高两位用作柱面数10位中的高两位。“018153”中01表示磁头号为01,“81 53”对应的二进制为10000001 01010011,前八位中的低六位000001表示扇区号为01,剩余的高二位和后八位10 01010011表示柱面号为595。对于超过8.4GB的硬盘则采用Int13H技术的线性寻址方式来表示,通过偏移CH~偏移FH共4个字节32线性扇区地址来表示分区所占用的扇区总数,可以表示232个扇区,即2TB=2048GB,在此不再详述。
  第5字节为“0B”表示分区的系统类型是FAT32。
  第6~8字节表示分区开始的磁头号为254、扇区号为63、柱面号为1510,对应的十六进制值为“FEFFFF”。原D盘在7GB左右,在D盘结束时的扇区总数(绝对值)已超过8.4GB,可知其后的表示值采用线性的方式,通过观察后面分区表就可得出此处值必是FEFFFF。
  第9~12字节为3F000000表示相对本分区首扇区的开始扇区值为63。
  第13~16字节表示本分区总的扇区数(不包括隐藏的63个扇区),从图中很容易得出其值为14715477(E08A55),分区表中十六进制应为558AE000。
  那么,定义D盘的分区表值就可以得出了:
  0001 8153 0BFE FFFF 3F00 0000 558A E000
  同样的方法我们构造出描述下一分区的分区表参数:
  0000 C1FF 05FE FFFF 948A E000 948A E000
  这里有一点需要说明的是:前一个948A E000是表示以D盘的首扇区为参考表示下一逻辑分区(E盘)开始的首扇区。而后一个948A E000(14715540)则表示E盘分区的总扇区数(包括隐藏扇区)。
  最后,使用磁盘编辑工具KIVFIX,按F3键直接定位到我们上面找到的9558676扇区处,然后使用F5键进行参数修改。将偏移的01BE-01DD的32个字节修正为我们构造的参数。重启之后,使用DiskGen进行参数检查,发现无误;进入系统又见到以前精心收集的资料了。
  看了本文,如果以后再遇到分区表丢失或者误删除分区表之类的,只要弄清楚问题所在,就可以自己动手恢复了。经过这次手动恢复硬盘分区表,我对硬盘的基本结构也有了更进一步的了解,对以后继续学习数据恢复方面的知识也更有信心了。




请用手机微信扫一扫关注海中官方微信平台:


收藏 推荐 打印 | 录入:zhourz | 阅读:
相关新闻