2023年11月24日发(作者:)

WinHex手工恢复硬盘分区表

最近,PC机不能正常引导,将硬盘挂载到其它PC机上,显示硬盘未分区,结果如下图所

原硬盘分为4个分区,但现在显示未分区,推测是硬盘的分区表丢失,计划用WinHex

具手工恢复硬盘分区表,通过用WinHex查看分区表,果真丢失了分区表,于是利用该工

具进行了恢复,成功修复硬盘。

恢复期间,参考了网上的众多资料,这些资料虽然提供了很多帮助,但感觉理论性太强,

没有充分利用工具本身的优势,因此作一总结,以为新手提供帮助。为了更好的理解恢复

方案,在文中增加了小知识点,如果对理论不感兴趣,可略过这些小知识点,直接参考恢

复步骤即可。在此也一并感谢在网上分享资料的各位大侠。

一、查看MBRMaster Boot Record

WINHEXMBR

从图中可见,

1、第1扇区的55AA前的64个字节全为0,表明分区表信息丢失。

2、在最上边的栏中的可以看到分区信息,包括分区名称、类型、大小、该分区的首扇区等

信息,这些将帮助我们迅速地恢复硬盘分区。

小知识1MBRMaster Boot RecorderDPTDisk Partition Table

MBR位于磁盘的第一个扇区,CHS地址是0柱面,0磁头,1扇区,共占用63个扇区,实

际上只使用1扇区;其布局如下:

扇区内偏移

0x00000x01BD 446 字节引导代码

0x01BE0x01FD 416字节主分区表项,共描述4个分区

表项,每个分区表项可以描述一个主分区或

一个扩展分区

0x01FE0x01FF 2字节MBR签名(0xAA55(两个字节分别

55AA

DPT中定义的分区包括主分区和扩展分区,主分区+扩展分区总共不能超过4个。所谓主分

区是指DPT中包含能够被系统的磁盘分区,一个硬盘主分区至少有1个,最多4个,它是

可以设置为活动的,即可以引导操作系统。一个硬盘只能有一个活动分区。扩展分区并不

能被系统直接使用,它的作用是突破DPT中只能定义四个分区限制的,可以没有,最多1

个。对于windows系统,一般分为一个主分区,一个扩展分区。(本文介绍的方法也是针

对这种情况,对硬盘分区表进行恢复)

其做法:定义完主分区之后,将多余的容量定义为扩展分区,指定该分区的起始位置,根

据起始位置指向硬盘的某一扇区,称作扩展MBREBR,在其中定义下一个分区表。如果

只有一个分区,就定义该分区,然后结束;如果不只一个分区,就定义一个基本分区和一

个扩展分区,扩展分区再指向下一个分区表,在下一个分区表中定义分区,直至结束。在

扩展分区中定义的分区就是逻辑分区。

扩展分区的容量=各个逻辑分区的容量之和+隐藏扇区(即EBR所占用扇区)

另外EBR的结构跟MBR的结构是一样的,也是占用63个扇区。

4

图中的C盘为主分区,D盘、E盘、F盘都为逻辑分区。

二、分区表恢复方案

由于目前普遍采用LBA寻址方式,每个分区表项的16字节信息中最重要的是159

10111213141516四组信息。至于234字节,对于C盘,一般为

010100,其它盘为00C1FF(即0磁头、1扇区、1111111111柱面(由于柱面数一般

会大于1024,因此表示柱面数的10位全为1678字节一般填写FEFFFF

可。

1字节代表引导标志,引导盘为80,其它则为00

5字节代表分区类型,可自图中所示分区类型获得,本硬盘中,四个分区类型分别为:

FAT32FTA32NTFSFAT32

9101112字节代表本分区之前已用了的扇区数,需要通过计算获得

13141516字节代表本分区的总扇区数,需要通过计算获得。

通过查找EBR中的分区信息,及WinHex系统提供的信息,计算MBR中的分区信息,完成

分区表的恢复。

三、手工恢复硬盘分区表过程

1、收集各EBR中的分区信息

由于EBR的结构与MBR结构一样,即以55AA作为结束标志,因此可以搜索55AA。为加

快搜索速度,设置offset mod 512=510,即对512的整数倍的510511字节进行搜索。

如果是直接从MBR处开始搜索,要注意判断是否是EBR,该扇区前面、后面的几个扇区的

字节一般全为00.

小技巧:由于WinHex工具本身提供的信息较全,可直接点击Partition2后,进行反向搜

索。很快搜索到第一个EBR。如下图所示:

1扩展分区分区示意图

在第一个扩展分区,其分区信息表如下:

00 01C1FF 0B FEFFFF 3F000000 AD2CE204

00 00C1FF 05 FEFFFF EC2CE204 EC2CE204

再点击Partition3进行反向搜索,得到第2EBR,如下图所示:

2扩展分区分区示意图

第二个扩展分区的分区信息如下:

00 010100 0B FEFFFF 3F000000 AD2CE204

00 00C1FF 05 FEFFFF D859C409 731A6C06

再点击,Partition4,进行反向搜索,得到第3EBR,如下图所示:

3扩展分区分区示意图

第三个扩展分区的分区信息如下:

00 01C1FF 0B FEFFFF 3F000000 341A6C06

2、计算C盘及扩展分区的信息

对于C盘,其之前已用的扇区数,就是MBR所占用的扇区,共63个扇区,转换成16进制

3F。接下来重点计算本分区的总扇区数。实际上,C盘后紧跟第1EBR,其是自63

区开始,结束于第1EBR之前的第1个扇区。通过第1扩展分区分区示意图的左下角可

看到EBR位于4096570扇区,则C盘结束的扇区是40965749.因此C盘所占用扇区为

4096574963+140965687。转换成16进制为:2711637,则13141516字节分别

为:37167102.

对于第1扩展分区,其分区之前所用的扇区数,即是C盘总的扇区数及MBR之和,即

40965687+6340965750,转换成16进制,则为:2711676,则9101112字节分别

为:76167102.现在需要计算第一扩展分区的总扇区。

第一扩展分区的总扇区可采用两种方法计算。一种是各个逻辑分区的容量之和+隐藏扇区

(即EBR所占用扇区);另外一种是(硬盘总扇区-未分区的扇区)-MBR所点扇区-C

盘所占扇区。

下面分别采用这两种方法进行计算:

方法一:各个逻辑分区的容量之和+隐藏扇区(即EBR所占用扇区)

自各EBR得到信息,第一个逻辑分区为04E22CAD扇区,第二个逻辑分区为04E22CAD

第三个逻辑分区为066C1A34,另外,每个EBR占用3F扇区,共3个,则其和为:

1030744B,则13141516字节分别为:4B743010.

方法二:(硬盘总扇区-未分区的扇区)-MBR所点扇区-C盘所占扇区 (硬盘总扇区-

未分区的扇区)代表了参与分区的总的扇区,本硬盘中,存在未分区的空间2.5MB,自

312576705个扇区开始,也就意味着有312576705个扇区进行了分区(自0开始计算扇

区)MBR所占扇区为63个,C盘所占扇区为40965687,则第一扩展分区的总扇区为:

3125767056340965687271610955,转换成16进制为:1030744B,与方法一结果相

同。

至些,完成分区表各重要参数的计算。 C盘及第一个扩展分区的分区信息如下:

80 010100 0B FEFFFF 3F000000 37167102

00 00C1FF 0F FEFFFF 76167102 4B743010

3、编辑分区表内容

根据刚计算的C盘及扩展分区的信息,编辑分区表。如下图所示:

编辑完成之后存盘退出。

4、恢复结果

重新启动计算机,即可以看到原先的硬盘信息。如下图所示:

查看磁盘1的各盘的信息正常,至此完成硬盘分区表的恢复。

四、进一步探究

方案是针对分区表丢失的情况,如果分区表被修改成只有一个分区会是何种情况?决定将

其只分成一个区进行测试。在磁盘管理器中如下图所示:

利用WinHex打开分区表,其显示如下:

再搜索看原先的EBR是否存在。如果存在,直接利用刚介绍的方法恢复即可。直接到原先

存放EBR40965750扇区查看,依然存在相关的分区信息。此处意味着,仅是MBR中的

分区信息变化了,因此仍然可以利用原先的EBR信息恢复MBR中的分区信息。

在搜索EBR时,已经不能利用三、手工恢复硬盘分区表过程中介绍的小技巧进行搜索,

需要进行全文搜索,因此一定要仔细确定是否是真正的EBR。其它过程如分区表信息丢失

类似。

从前后图中也可见,在不存在分区表的情况下,WINHEX会去搜索EBR的信息,并把相关

情况显示在上边的分区信息;如果存在分区信息,会以MBR中的分区信息显示相关分区情

况。

五、总结与展望

本方案充分利用了WinHex工具中的一些方法,恢复过程中,不需要磁头、柱面、扇区等

方面的转换,比较方便。但本方案仅适用于一个主分区,多个逻辑分区的情况;虽然

WINDOWS系统大部分都是这样的分区结构,但也会存在两个或以上主分区情况,这种情

况就需要利用DBR的信息进行恢复,关于DBR信息及相应的恢复信息将在新的文章中加以

阐述。