现象描述:
我个人的电脑上安装了2块硬盘,第一块为80G,另一块为160G,因后一硬盘原来分为5个区,随着硬盘数据增多,觉得分区不合理了,如是想合并一些分区。从网上下了PQ magic 8.05,不能合并NTFS分区,于是先尝试让合并分区转成FAT32,结果不能转换。一大堆错误。于是下了 Paragon.Partition.Manager.v9.0 按照向导运行,运行了半天moving 我的I盘数据也不知道移动到哪里去了。移动完毕后I分区不再存在,变成了自由空间,估计数据也没了,可惜了我的电影。算了先与前一个H分区合并吧。合并成功了。后来运行PQ magic,弹出错误,大体类似如下内容:
“Norton PartitionMagic 已检测到起始于磁盘1扇区114366735上的分区有错误116。起始LBA的值为11436735而CHS的值为15483824。LBA和CHS的值必须相等。Norton PartitionMagic已经确认CHS的值是正确的且可修正LBA的值。您要Norton PartitionMagic来修正该错误吗?”
无法进入PQ magic操作界面。重新启动电脑,开机自检后,无法进入windows,用Ghost、WINPE、DOS都不行。硬盘灯常亮,但不闪烁。
分析:
硬盘灯常亮,硬盘故障,无法自主,应该是硬盘分区表坏了,着手恢复吧。
解决过程:
先了解硬盘结构,以及电脑启动过程。
以下文字来自网上:《MBR代码分析》的文章
机器加电或按reset键后都要进行系统复位,复位后CS=FFFFH,IP=0000H 那么自然就从FFFF:0000H处开始执行指令,这个地方只有一条JMP指令 跳转到系统自检程序处,系统自检完成后把软盘的第一个扇区(如果由软盘启动)或者硬盘的第一个扇区,即MBR扇区(如果由硬盘启动)读入到0:7C00H处然后把控制权交出,从0:7C00H处继续执行,下面就是硬盘的MBR代码分析其中的引导扇区是指硬盘相应分区的第一个扇区,是和操作系统有关的 操作系统的引导是由它来完成的,而MBR并不负责,MBR和操作系统无关 他的任务是把控制权转交给操作系统的引导程序。
那么MBR是啥样子的呢?
搜到文章 MBR与分区表中有介绍,也就是说从0柱面0磁道1扇区为主引导扇区,保存了MBR,01BE偏移开始是4条分区表信息,扇区最后是55AA,分区表项中存放了C/H/S和LBA信息。该磁道其余62个扇区也被占用。如下分区表项数据:
80 01 01 00 07 FE FF FF 3F 00 00 00 37 16 71 02
00 FE FF FF 05 FE FF FF 76 16 71 02 4B 74 30 10
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
55AA
80为若值为80H表示活动分区,若值为00H表示非活动分区
01 01 00 本分区的起始磁头号、扇区号、柱面号。其中:
磁头号——第2字节;
扇区号——第3字节的低6位;
柱面号——为第3字节高2位+第4字节8位。
07 分区类型这里表示NTFS
FE FF FF本分区结束磁头号、扇区号、柱面号
3F 00 00 00 本分区之前已用了的扇区数
37 16 71 02 本分区的总扇区数
下一条记录为扩展分区的。这里应该说明的是分区所包含的扇区信息有2种方式,其中C/H/S方式对大硬盘不适用,因为用8bit来存储磁头地址,用10bit来存储柱面地址,用6bit来存储扇区地址,而一个扇区共有512B最多1024*256*63*512,即8G大小。所以一般使用LBA(Logical Block Addressing逻辑块寻址模式)方式,在LBA地址中,地址不再表示实际硬盘的实际物理地址(柱面、磁头和扇区)。LBA编址方式将CHS这种三维寻址方式转变为一维的线性寻址,它把硬盘所有的物理扇区的C/H/S编号通过一定的规则转变为一线性的编号,系统效率得到大大提高,避免了烦琐的磁头/柱面/扇区的寻址方式。在访问硬盘时,由硬盘控制器再这种逻辑地址转换为实际硬盘的物理地址。
修复MBR引导程序可以采用fdisk /mbr
扩展分区布局如何呢?文章 《使用WinHex手工恢复MBR》 有详细说明,也就是说除了MBR,还有EBR,布局图如下
MBR | C盘 | EBR D盘 | EBR E盘 | EBR F盘 |
下面的文字描述中,提到主分区、扩展分区、逻辑分区的概念,主分区指活动分区,一般就是C盘。主分区和扩展分区由MBR的分区表项指出。逻辑分区指扩展分区的再次分区,可分成若干逻辑分区。如D、E都是逻辑分区。为了述说方便,我下面说的每个逻辑分区包括EBR。那么逻辑分区总数等于EBR扇区数、分区引导扇区和逻辑盘数据区等等之和。
分区引导扇区保存了DBR(DOS BOOT RECORD),每个主分区、逻辑分区都有分区引导扇区,如C、D、E分区。DBR扇区一般在EBR(占用一个磁道63个扇区)的后面。由MBR引导程序读取活动分区的DBR并执行。
DBR包括:
跳转指令,占用3个字节的跳转指令将跳转至引导代码。
厂商标识和DOS版本号,该部分总共占用8个字节。
BPB(BIOS Parameter Block, BIOS 参数块)。
操作系统引导程序。
结束标志字,结束标志占用2个字节,其值为AA55
DBR详细内容可参见文章,《硬盘主引导扇区、分区表和分区引导扇区(MBR、DPT、DBR、BPB)详解》
还是以前面提到的分区表为例来说明如何计算扩展分区的EBR起始逻辑扇区号:
80 01 01 00 07 FE FF FF 3F 00 00 00 37 16 71 02
EBR=02711637h(C盘扇区总数)+3Fh(MBR部分所占扇区)=02711676 h=40965750,
到达该扇区,部分数据如下
分区2(D分区)分区表扇区图
可以看到包含了2条分区表记录,第一条为本逻辑分区D的分区信息,第二条为下一逻辑分区E的分区信息
D盘扇区总数为:02800A34h =41945652约20G,与D盘大小相符。
那么E逻辑分区的EBR扇区起始号:
40965750(MBR和C盘所占扇区或者说D分区的EBR开始扇区号)+63 (EBR部分所占扇区3Fh) +41945652(D盘扇区总数) =82911465
后2部分合起来为D逻辑分区扇区总数。
下一逻辑分区相对第2物理分区偏移为02800A34h+3Fh=02800A73h
该分区扇区总数为07444f65,包括EBR和E盘。
这里强调一下偏移值,为相对第2物理分区(这里即为扩展分区)起始扇区的偏移扇区数,第2物理分区是指MBR中第2条分区信息中指出的扩展分区。
用winhex 访问分区三的分区表,也是到达第82911465扇区。见下图操作,通过winhex直接到达了82911465号扇区。
分区3(E分区)分区表扇区图
上图中可以看到E逻辑分区信息:分区之前已用了的扇区数00000040,分区占用扇区大小07444f25,都是16进制数。那么E逻辑分区总扇区数:00000040h+07444f25h=07444f65h,正好等于分区2分区表扇区中第2条分区表信息项中的分区总扇区数。
那么下一分区即F逻辑分区信息如何呢,让我们来计算一下
F逻辑分区的EBR扇区起始号为:
82911465(逻辑分区3的EBR的起始扇区04f120e9h)+07444f65h(E逻辑分区总扇区数)=204828750(0C35704eh),见分区4(F分区)分区表扇区图中的扇区标号。
F逻辑分区的相对偏移扇区数:
3Fh (EBR部分所占扇区) +02800A34h (D盘扇区总数)+ 64 (EBR部分所占扇区40h)+07444f25h (E盘扇区总数)=09c459d8h
分区4(F分区)分区表扇区图
如何计算出分区大小,重建分区表呢?文章当中也有详细描述。关键就是计算本分区的总扇区数。通过查找55aa标志来定位EBR,再计算分区大小。
另外的知识点是关于dos下采用debug命令来查看和修改分区数据
文章《DEBUG修复硬盘主引导区全透析》中有描述。
A 100 //在100处写入汇编代码
具体参见《MBR与分区表》
但是如何让我的问题硬盘可访问呢?因只要连接上问题硬盘那么系统无法启动,甚至无法进入DOS,单独用另一块硬盘,就没问题。尝试了各种启动的办法,BIOS里设置不加载、接在SecondIDE master接口,依然不能进入。无奈看来只有硬盘热插拔了。
查资料看了热插拔的注意事项:
插入时:先插数据线,后插电源线,插入电源线的动作要快,接头平行进入插孔,同时接触4个触点。
拔出时:在设备管理器先卸载,然后先电源线、后数据线。
然后打开设备管理器,刷新设备。过了一会就能用了。
哈,用winhex编辑分区表吧。经分析果然是E逻辑分区的EBR中分区表数据不正确了。修正后,系统顺利启动。
参考文献
l 使用WinHex手工恢复MBR
l LBA百度百科 http://baike.baidu.com/view/112216.htm
l MBR代码分析
l DEBUG修复硬盘主引导区全透析
l MBR与分区表
l 硬盘主引导扇区、分区表和分区引导扇区(MBR、DPT、DBR、BPB)详解 http://www.51stor.net/html/magnetism/200806/17-55.html
在此感谢这些文章的作者们,如果没有他们深入浅出、妙笔生花的描述,我的问题无法解决。同时,也以此文谨送给使用PQ重新分区出现问题的人们。如文章转载,请注明出处。