《2022年用DEBUG修复硬盘MBR和DBR .pdf》由会员分享,可在线阅读,更多相关《2022年用DEBUG修复硬盘MBR和DBR .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、用 DEBUG 修复硬盘 MBR 和 DBR (2011-05-16 17:19:43) 在硬盘的数据结构中, 主引导记录 MBR 和 DOS 引导记录 DBR 占有非常重要的地位。一旦它们出现问题, 轻则无法从硬盘启动, 重则造成整个硬盘或分区数据无法读取,同时它们又是硬盘数据结构中最为脆弱、故障率最高的部位之一。有关MBR和 DBR 的修复方法很多,但是要彻底修复这个故障,还是用DEBUG 来得彻底。DEBUG 是一个 Windows系统自带的 DOS 调试程序。 一些第三方的自动修复工具软件,虽然容易操作,但适用范围小。以常用的NORTON DISK DOCTOR为例,用它修复一些标志性
2、字节 ( 如活动分区标志 80、结束标志 55 AA)错误是有效的,但对于大多数非标志性错误 ( 如引导程序错误 ) ,它则无能为力。 特别是 DBR中的许多错误,它不仅无法修复, 而且很容易造成其他数据结构的损坏,致使修复更加困难。DEBUG 虽然操作复杂, 但却灵活有效。 它可针对不同的故障采用不同的方法,所有的操作均在修复者的指令下进行。只要操作者头脑清醒, 这种方法是相当安全的。用 DEBUG 修复硬盘软故障, 除了应当掌握 DEBUG 的一些常用命令之外, 更要弄清 MBR 和 DBR的数据结构。希望那些汇编爱好者们能通过DEBUG 进行理论和实践结合来修复故障,解决实际问题。为了正
3、确判断 MBR 是否出现故障, 故障在哪些字节上, 必须首先调出 MBR 字节内容。为此我们先来看一下硬盘MBR 数据结构。MBR 和分区表结构MBR 位于硬盘 0 柱面、 0 磁头、 1 扇区上,它由以下三个部分组成:(1) 主引导程序 ( 含出错提示信息 ),偏移地址为 0H 1BDH ;(2) 分区表,偏移地址为1BEH 1FDH ;(3) 结束标志 55 AA,偏移地址为 1FEH 1FFH 。在这三部分中, 最重要的是分区表, 最难修复的也是分区表。 不同容量的硬盘或者硬盘容量相同但分区不同,分区表也各不相同。 寻找分区表相同的硬盘, 对家庭用户来说是不现实的。 而用相同 DOS 版
4、本分区命令建立的引导程序,是基本一致的,修复时可以互相替代。可以这样认为:分区表修复了,MBR 也就修复了。分区表中有四个分区表项,每个表项长度为16字节。通常只使用前两个表项,后两个表项全部为零字节。分区表项中各个项目的偏移地址、字节数及含义见07030701a所示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 7 页 - - - - - - - - - 说明:整个硬盘划分为主分区和扩展分区,其中 C盘属于主分区 (活动分区 ),其他各盘均属于扩展分区 ( 非活动分区
5、 )。以 C盘为例:在第一分区表项中,第1字节必须为 80,否则无法从硬盘启动。第2、3、4 字节分别为 C盘逻辑 0 扇区所在的磁头号、扇区号和柱面号,通常为1 头 1 扇 0柱。第 6、7、8 字节为 C盘尾扇的位置信息硬盘的末磁头( 磁头号为硬盘磁头数减去1)、末扇区 (63扇)、C盘的终止柱面。第912 字节为 C盘逻辑 0 扇区之前的隐含扇区数,常为 63(3F 00 00 00)。第 1316 字节为 C盘上自逻辑 0 扇区开始的扇区总数,为方便,本文简称为C盘或主分区的逻辑扇区总数。在第二分区表项中,首字节00 表示本表项为扩展分区。第2、3、4 字节为扩展分区中首扇的位置信息0
6、磁头、 1 扇区,柱面号则为主分区 (C 盘) 的终止柱面号加 1。 第 6、 7、 8 字节为扩展分区尾扇 ( 也是整个硬盘的尾扇 ) 的位置信息硬盘的末磁头 ( 磁头号为硬盘磁头数减去1)、末扇区 (63 扇)、末柱面 (柱面号为硬盘柱面数减去 1)。第 912 字节为 C盘逻辑扇区总数加隐含扇区数(63) ,本文简称为主分区扇区总数。第1316 字节为扩展分区扇区总数。上述二者之和应为硬盘扇区总数。重建分区表时必须掌握以下数据:(1) 硬盘的磁头数、柱面数和扇区数。这三个数可由FDISK/MBR 创建的分区表项中获取,也可由 CMOS 设置中获取。二者应当一致。此三个数之乘积即为硬盘的扇
7、区总数。(2) 文件系统类型是 FAT16或是 FAT32 。此信息应由硬盘的使用者提供,或者从该盘 DBR中获取,还可由 FDISK/MBR 创建的分区表项中看出。 另外,根据 C盘的大小也可作出判断。(3)C 盘的逻辑扇区总数,可由DBR 中获取。它与隐含扇区数之和即为主分区扇区总数。当然,在知道本盘起止柱面号时,也可计算出这两个扇区总数。(4) 主分区的末扇区所在的柱面号及扩展分区首扇区所在的柱面号,后者比前者多一个柱面。扩展分区首扇区所在的柱面号按下式计算:扩展分区起始柱面号 =主分区扇区总数 /(63 硬盘磁头数 ) (5) 扩展分区扇区总数 =硬盘扇区总数 - 主分区扇区总数。除了
8、上述 MBR 之外,如果一个硬盘有多个分区, 在其他各盘的起始柱面、 0 磁头、1 扇区上,均有该盘的分区表。但没有引导程序。第一表项为本盘的起始磁头/扇区/ 柱面、分区类型、终止磁头/ 扇区/ 柱面、隐含扇区数、逻辑扇区总数;第二表项为下盘 ( 后续盘 )的起始磁头 / 扇区/ 柱面、分区类型和终止磁头/ 扇区/ 柱面,本盘之前的扩展分区扇区总数、下盘(后续盘 ) 的扇区总数。 以此来构成各盘间的链接。查看 MBR 的 HEX显示了解了以上情况后让我们来实际解决一下如何查看MBR 的 HEX显示。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
9、 - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - A:DEBUG -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 -D1000 显示读入内存的内容出现 MBR 的 HEX显示后,对照前文 MBR 结构进行检查,特别注意关键字节( 如 55 AA 、活动标志 80 和非活动标志 00 等) 的内容和偏移
10、地址是否正确。例 1 重建 MBR 一个 3.5GB硬盘,系统启动时在更新ESCD 之后无法继续,提示信息为:“Disk boot failure,insert system disk and press enter.”只知道该硬盘有多个分区,但不清楚各盘容量大小。用软盘启动后, 发现各盘全部丢失。 可以判断为 MBR 故障,因为 DBR 故障一般不会造成各盘同时丢失。在MBR 故障中,这有多种可能:一是活动分区标志损坏,二是结束标志 55 AA出错,还有可能是整个 MBR 被破坏。用前面查看 MBR 的方法,发现 MBR 全为乱码,需要重建。用备份的 MBR 恢复这是最简单的解决方案,假定备
11、份MBR 在软盘的第 2870逻辑扇区中 ( 见例 1),恢复方法为:-L1000 0 B36 1 -D1000 确认备份 MBR 正常后,继续:-A100 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - - - - - 1D2F:0100 MOV AX,0301 1D2F:0103 MOV BX,1000 1D2F:0106 MOV CX,1 1D2F:0109 MOV DX,80 1D2F:010C INT13 1D2F:010E INT2
12、0 1D2F:0110 -G=100 退出 DEBUG,取出软盘,重新启动即可。在上篇文章中,谈到了用备份的MBR 来恢复损坏的 MBR ,而备份的 MBR 保存在启动盘的末尾扇区中 (第 2870 扇即 B36H扇区。因 1.44MB软盘共 2880个扇区,末尾扇区通常空闲未用 ) 。这样既不影响启动盘的正常使用,同时又给备份文件恢复带来了方便。 为将正常 MBR 备份到启动盘, 可将启动盘置入软驱, 在上篇查看MBR 显示的程序后面接着执行:-W1000 0 B36 1 -Q 退出 DEBUG 后,就把 MBR 备份到启动盘的第2870逻辑扇区中了。最好将备份内容和存放位置做记录, 以免遗
13、忘。 此方法不仅可用作常规下的备份,还可用于修复前的备份,以使修复更加安全。本篇着重介绍重建MBR 的方法。 MBR 的故障是十分复杂的。有时只是其中某一字节出现错误, 有时也可能是整个MBR 全被损坏。为使故障能够得到最有效最迅速的修复,应当针对不同的故障部位采取不同的修复方法,这正符合 DEBUG 使用灵活的特点。 显然,在这样一篇短文中, 不可能对所有常见故障一一给出具体的修复方法。现只讨论 MBR 全损坏的情况。 为了保留原有数据, 必须重建和原来相同的 MBR 。这无疑难度最大。但如果将这种修复方法套用到个别字节出错的情况,虽然完全可以排除故障, 却未必合理。 合理的修复方法应当是小
14、错小改,大错大改,全错重建。在掌握了 MBR 的结构之后,用 DEBUG 修复就不太困难了 (以下修复的方法和思路也可通过其他程序如diskedit来实现 ) 。其中有一些计算,虽然也可徒手进行,但如有 HEX( 十六进制 ) 、DEC( 十进制 )和 BIN(二进制 )运算功能的小型计算器, 将大大减轻工作量。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 7 页 - - - - - - - - - 仍以上篇 3.5GB硬盘的故障为例。现介绍两种重建方法。方法一:用 F
15、DISK/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显示( 见08030701a)。经检查 DBR 完好。在以上 DBR 表偏移地址 1020H 1
16、023H处,知原 C盘的逻辑扇区总数为 2EE141H 。而隐含扇区数为3FH ,因此原主分区扇区总数=2EE141+3F=2EE180H。并由以上 DBR 表的 ASCII 码显示,知原 C盘采用 FAT32文件系统。退出 DEBUG,运行 FDISK/MBR ,重建 MBR 中的引导程序和结束标志55 AA,并且把整个硬盘创建为一个活动分区(顺便提请注意:对于多分区硬盘,在结束标志55 AA 已损坏的情况下,如果分区表完好,不宜运行FDISK/MBR ,否则将破坏原有的分区表 ) 。 仍进入 DEBUG, 查看 MBR , 被损坏的主引导程序和结束标志已重写,分区表项只有一个表项,其内容为
17、: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 由此又获得以下信息:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 7 页 - - - - - - - - - (1) 该硬盘起始头 / 扇/ 柱为 01/01/00 ,终止头 / 扇/ 柱为 7F/FF/4F,即该硬盘有128 头,63 扇,848柱。此组数据
18、也可由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(因
19、末扇区号为 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 分区表项
20、说明,并注意到扇区数目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 中, 尽管分区表随硬盘或分区不同而有所不同
21、,但它们的主引导程序却具有通用性。为此可用好硬盘同版本MBR 中的主引导程序来覆盖已被损坏的MBR 引导程序。 具体作法是:先将好硬盘 MBR 写入软盘某一扇区 (例如启动盘的第 2872 即 B38H逻辑扇 ) 中,而后进行以下操作:-L200 0 B38 1 -D200 确认拷贝的 MBR 无问题后,进入已全部损坏的主引导纪录区:-A100 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 7 页 - - - - - - - - - 1D2F:0100 MOV AX ,
22、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使用不当所造成的问题。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 7 页 - - - - - - - - -