用WinHex直接修改磁盘分区表找回丢失的分区

从CSDN博客搬家过来,原文发表于2006年09月12日21:18:00

1. 为什么写这篇blog

上个星期SATA开始不停地出问题,经常性的在使用中分区信息丢失。开始只是C盘信息丢失,也就忍了,每次用Ghost还原。最后一次居然整个扩展分区没了,所有电影音乐游戏一概报销。只好临时把系统又装回老硬盘。虽然丢失的没有重要资料,毕竟是一大堆攒下来的东西,很不爽,决定找回来。在网上搜硬盘工具没找到理想的,倒是顺便又温习了一遍分区表知识,于是决定自己动手,丰衣足食。装上WinHex,直接开干。

2. MBR(主引导记录)and Partition Table(分区表)

MBR是磁盘第一个扇区,CHS地址是0柱面,0磁头,1扇区;LBA地址是0。布局如下:

MBR
扇区内偏移 描述
0x0000 引导代码
0x018A 4个9字节供IBM扩展的分区表项
0x01B8 4字节磁盘签名
0x01BE 4个16字节主分区表项
0x01FE 2字节MBR签名(0xAA55)[1]
[1] 0x01FE是55,0x01FF是AA。
分区表项
表项内偏移 描述
0x00 可引导标志
0x01 起始CHS地址
0x04 分区类型
0x05 结束CHS地址
0x08 4字节起始LBA地址
0x0C 4字节分区大小,以扇区计算

3. 修复过程

理解了MBR和Partition Table,修复思路就很清晰了。我的数据分区大概是占用250G硬盘的后180G,所以从硬盘头六分之一的位置开始,搜索分区表的明显标志0x55AA。WinHex的方便的搜索功能还可以设置只搜索存在于整数倍于512字节块的末尾的0x55AA,速度快很多。每找到一个最后两字节为0x55AA的扇区,就分析4个分区表项是不是合理的,以及它所描述的分区大小,终于找到一个扇区,含有一个分区表项,大小180G,哈哈,肯定就是它了。这个扇区肯定就是扩展分区的起始扇区,它含有的那个分区表项肯定就是它唯一包含的一个逻辑分区了。
在MBR中创建一条属性为扩展分区(05)的分区表项,填入其他相关位置信息,以描述刚才找到的这个扩展分区:
CHS起始位置:一般是逻辑分区表项中的CHS起始位置,把磁头数改为0。
CHS结束位置:照抄逻辑分区表项中的CHS结束位置。
LBA偏移量,写入那个扩展分区相对磁盘起始位置的扇区偏移量。
分区大小:应该是逻辑分区表项中逻辑分区大小加上63个扇区。
存盘,运行Windows管理工具,查看磁盘信息,数据分区赫然在目。:)

4. 备份MBR

终于找回我的电影和mp3了,激动啊。赶紧做个备份。MBR本来没有第二份拷贝,不像FAT,所以用winhex把MBR复制一份到磁盘最后一个扇区,这个扇区一般不可能被用到。好了,再也不怕你硬盘掉电了。