DEBUG修复硬盘主引导区全透析(下)

硬件周刊

在上篇文章中,谈到了用备份的MBR来恢复损坏的MBR,而备份的MBR保存在启动盘的末尾扇区中(第2870扇即B36H扇区。因1.44MB软盘共2880个扇区, 末尾扇区通常空闲未用)。这样既不影响启动盘的正常使用,同时又给备份文件恢复带来了方便。为将正常MBR备份到启动盘,可将启动盘置入软驱,在上篇查看MBR 显示的程序后面接着执行:
-W1000 0 B36 1
-Q
退出DEBUG后,就把MBR备份到启动盘的第2870逻辑扇区中了。最好将备份内容和存放位置做记录,以免遗忘。此方法不仅可用作常规下的备份,还可用于修复前的备份,以使修复更加安全。
本篇着重介绍重建MBR的方法。MBR的故障是十分复杂的。有时只是其中某一字节出现错误,有时也可能是整个MBR全被损坏。为使故障能够得到最有效最迅速的修复,应当针对不同的故障部位采取不同的修复方法,这正符合DEBUG使用灵活的特点。显然,在这样一篇短文中,不可能对所有常见故障一一给出具体的修复方法。现只讨论MBR全损坏的情况。为了保留原有数据,必须重建和原来相同的MBR。这无疑难度最大。但如果将这种修复方法套用到个别字节出错的情况,虽然完全可以排除故障,却未必合理。合理的修复方法应当是小错小改,大错大改,全错重建。
在掌握了MBR的结构之后,用DEBUG修复就不太困难了(以下修复的方法和思路也可通过其他程序如diskedit来实现)。其中有一些计算,虽然也可徒手进行,但如有HEX(十六进制)、DEC(十进制)和BIN(二进制)运算功能的小型计算器,将大大减轻工作量。
仍以上篇3.5GB硬盘的故障为例。现介绍两种重建方法。

方法一:用FDISK/MBR重建

用上篇方法查看MBR的HEX全为乱码之后,接着查看DBR是否完好。因此时各盘已经全部丢失,必须通过BIOS中断调用读出C盘的DBR:
-A100
1D2F:0100 MOV AX,0201
1D2F:0103 MOV BX,1000
1D2F:0106 MOV CX,1
1D2F:0109 MOV DX,180
1D2F:010C INT13
1D2F:010E INT20
1D2F:0110
-G=100
-D1000
这时出现C盘DBR的HEX显示(见(图1))。

图1
图1

经检查DBR完好。在以上DBR表偏移地址1020H∽1023H处,知原C盘的逻辑扇区总数为2EE141H。而隐含扇区数为3FH,因此原主分区扇区总数=2EE141+3F=2EE180H。并由以上DBR表的ASCII码显示,知原C盘采用FAT32文件系统。
退出DEBUG,运行FDISK/MBR,重建MBR中的引导程序和结束标志55 AA,并且把整个硬盘创建为一个活动分区(顺便提请注意:对于多分区硬盘,在结束标志55 AA已损坏的情况下,如果分区表完好,不宜运行FDISK/MBR,否则将破坏原有的分区表)。仍进入DEBUG,查看MBR,被损坏的主引导程序和结束标志已重写,分区表项只有一个表项,其内容为:
11B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 01
11C0 01 00 0B 7F FF 4F 3F 00 00 00 C1 57 68 00 00 00
由此又获得以下信息:
(1)该硬盘起始头/扇/柱为01/01/00,终止头/扇/柱为7F/FF/4F,即该硬盘有128头,63扇,848柱。此组数据也可由CMOS设置中查知。
(2)该硬盘的逻辑扇区总数为6857C1H。硬盘扇区总数=6857C1+3F=685800H。由此知原扩展分区扇区总数=685800-2EE180=397680H。
(3)原扩展分区的起始柱面号=原主分区扇区总数/(硬盘磁头数×扇区数)=17DH。即原主分区的终止柱面号为380(17D-1=17CH)。第一分区表项的第7、8字节共同为主分区的终止扇区号和柱面号,其中前字节(第7字节)中的低6位为扇区号,前字节中的高2位与后字节(第8字节)合为柱面号。17CH的二进制为0101111100,它的高两位01与111111(因末扇区号为63=3F,二进制为111111)合为7F,7F即为第一表项的第7字节。17CH的二进制低8位01111100为7CH,7C即第一表项的第8字节;第一表项的第6字节(主分区终止磁头号)为7F。同样的道理,因扩展分区的起始扇区为1,起始柱面号为17DH(二进制为0101111101),知第二表项的第3、4字节分别为41H和7DH,而第2字节(扩展分区起始磁头号)为00H。另外按规定FAT32主分区类型为0B,扩展分区类型为05(分别为第一表项的第5字节和第二表项的第5字节)。
有了以上数据,按照上篇MBR分区表项说明,并注意到扇区数目HEX值(主分区逻辑扇区总数为2EE141H,扩展分区扇区总数为397680H)在存储单元的存放顺序,对上述分区表进行修改以恢复原分区表(程序续前):
-E11C0 01 00 0B 7F 7F 7C 3F 00 00 00 41 E1 2E 00 00 00
-E11D0 41 7D 05 7F FF 4F 80 E1 2E 00 80 76 39 00 00 00
-E102 3
-G=100
退出DEBUG,取出软盘,重新启动,系统恢复正常。

方法二:用复制法重建MBR

在同一版本DOS分区命令所建立的MBR中,尽管分区表随硬盘或分区不同而有所不同,但它们的主引导程序却具有通用性。为此可用好硬盘同版本MBR中的主引导程序来覆盖已被损坏的MBR引导程序。具体作法是:先将好硬盘MBR写入软盘某一扇区(例如启动盘的第2872即B38H逻辑扇)中,而后进行以下操作:
-L200 0 B38 1
-D200
确认拷贝的MBR无问题后,进入已全部损坏的主引导纪录区:
-A100
1D2F:0100 MOV AX,0201
1D2F:0103 MOV BX,1000
1D2F:0106 MOV CX,1
1D2F:0109 MOV DX,80
1D2F:010C INT13
1D2F:010E INT20
1D2F:0110
-G=100
-E11FE 55 AA 修复已被损坏的结束标志
-M200 3BF 1000 用好MBR引导程序覆盖坏引导程序(为方便计,延伸至3BF)
-E102 3
-G=100
-D1000
查看MBR引导程序复制成功后,再按照方法一重建分区表即可,只不过硬盘的磁头数、柱面数只能由CMOS设置中获取罢了。与方法一相比,它的好处在于不必担心因FDISK使用不当所造成的问题。