LINKS

 

 

[回首页]

关于修复FAT32逻辑盘的更正和补充

RobertYore

查阅贴子内容
标题: 关于修复FAT32逻辑盘的更正和补充
时间: 99-4-29 下午 11:55:01
作者: RobertYore E_mail:robert_yore@163.net
--------------------------------------------------------------------------------

4月26日发作的CIH病毒,破坏了许多计算机的主板BIOS芯片及硬盘数据。本人也未幸免。
经过4月26日晚的一个通宵,总算修复了自己的FAT32分区(3910MB),并在病毒论坛上发表了一篇说明。
通过这几天的其他修复工作(本人单位里有十余台FAT16系统瘫痪),对修复工作有了一定的经验。现将
其说明如下,希望能供各位难友参考。
另外,网上有许多朋友病急乱投医,希望使用一些自动修复系统扇区的工具软件。在此,本人特别说明,
使用这些自动工具时,一定注意不要轻易改写系统扇区,尤其是FAT表,否则有可能因工具软件的失误造成
数据无法恢复。
有关的硬盘结构说明,在另一篇中说明,请自动或手工修复前仔细阅读。

修复工具:DISKEDIT(Norton Utility 8.0中的一个硬盘直接编辑工具,DOS环境)
修复条件:FAT32系统硬盘(2G以上分区),逻辑C盘

修复步骤:
1) 检查MBR,查看分区表结构是否遭破坏
分区表自MBR偏移01BEH开始,共4个分区,每个分区16字节;
第一个分区的结构如下:
偏移 值 说明
01BE 80 ;启动标志
01BF 01 ;分区开始的磁头号
01C0 01 ;分区开始的扇区号,低6位;柱面号,高2位
01C1 00 ;分区开始的柱面号,低8位
01C2 ?? ;分区类型,06=FAT16的C,0C=FAT32的C
;05=扩展分区
01C3 ?? ;分区结束的磁头号
01C4 ?? ;分区结束的扇区号,低6位;柱面号,高2位
01C5 ?? ;分区结束的柱面号,低8位
01C6-01C9 ?? ;相关扇区数,通常为63
01CA-01CD ?? ;分区的总扇区数
分区表结束标志:
01FE 55
01FF AA
2) 修复MBR
对于不止有一个逻辑盘的情况:
首先,在硬盘上扫描逻辑盘的BOOT扇区,其特点为:
** 开始于某根磁道的1号扇区;
** 扇区结束标志也是55 AA;
** OEM ID包含WINDOWS 9X系统的标志字符:偏移 0003H 处的值为 MSWIN4.1

找到后向后翻页,看是否有FAT扇区,即有连续增加的双字节(FAT16)或4字节(FAT32)。
或向前一个磁头(Alt-P,Side-1,回车),查看是否有扩展分区记录EPR(结构与MBR相同)
确定找到后,记录其地址。
举例:
在DISKEDIT中,用Alt-O选择Drive-]Physical Drive-]Hard Drive 1(或2)
Alt-T,选择Find,选中Search at specified sector offset前的框,在后面的栏中
填入510,按Find按钮。
找到后查看该扇区是否符合要求,并记录。
按Ctrl-G找下一个……
只有一个逻辑盘C的情况:
用DISKEDIT选择Hard Drive 1(或2)后,按[End]键,记录右下角的物理地址,和左下角
的硬盘扇区总数(将总数+1减去63,填入分区的总扇区数一栏)。
***** 通过上述方法,将分区地址填入MBR表中。
不止一个逻辑盘C时,先查找扩展分区的地址,寻找结尾处标志为55 AA的扇区。且该扇区位
于物理1号扇区,即DISKEDIT中Physical Sector: Cyl ?, Side ?, Secotr 1;该扇区内容除
了扩展分区表(结构与主分区表相同)外,没有其他代码(全00);将该扇区地址中的磁头号
加1后,应为扩展分区的第一个逻辑驱动器(D盘)的BOOT区。
找到该扇区(含扩展分区表)后,记录物理地址,计算扩展分区的物理扇区总数用以下方法:
按Alt-P,输入0-0-1,回车,记录左下角的扇区总数+1;
假设满足要求的扩展分区扇区,其物理地址为,?-?-1;
按Alt-P,输入?-?-1回车,记录左下角的扇区总数+1;
将两个扇区总数值相减,得出分区的总扇区数。
至此,扩展分区的起始地址恢复完毕,重启动系统后,D盘应可以一切正常。
3) 修复FAT扇区
a) Alt-O-]Drive-]Physical Drive-]Hard Disk 1
b) 用DISKEDIT的FIND功能寻找ASC II字符串:COMMAND COM
(COMMAND与COM中间有一个空格,ASC II值为20H,找寻FDT表中COMMAND.COM的原
因是,根目录中一般都有此文件,如果你的计算机里该文件不在根目录,就将上
述字符串改为根目录中的其他文件名,如IO.SYS或MSDOS.SYS。但要注意文件名和
后缀名之间要有空格,总长度为11字节)
c) 找到后,用PgUp向前翻页,寻找ROOT头部(上一扇区尾部出现连续的00)
d) 记录该扇区的Cylinder,Side,Sector值。——ROOT,例如:1-121-35
e) 寻找FAT2的开始扇区,其特点是:
扇区偏移0000H处为F8 FF 7F ;FAT16
扇区偏移0000H处为F8 FF FF 0F FF FF FF 0F ;FAT32
找到后,确认上一扇区尾部出现连续的00,则该扇区为FAT2头部。
(FAT1应与FAT2内容相同,但其头部数个扇区已被CIH破坏)
f) 记录该扇区的Cylinder,Side,Sector值。——FAT2,例如:0-125-34
g) 计算FAT2的扇区数,用以下公式,其中,尾标0为FAT2地址,尾标1为ROOT地址:
=====================================================================
扇区数=(Side1-Side0)*每道扇区数+(Cylinder1-Cylinder0)*硬盘磁头总数
*每道扇区数+Sector1-Sector0
=====================================================================
对不起各位,上次匆忙公布的公式中,错把(Side1-Side0)与(Cylinder1-
Cylinder)颠倒了。请各位谅解,本人当时的精神已然有些恍惚了……
---------------------------------------------------------------------
说明:Sectors/Cylinder为每道扇区数,Sides为硬盘的总磁头数。一个简单的
查看方法是:在DISKEDIT中按下[End]键,屏幕右下角的Sector值即为每道扇区
数,而Side值+1即为总磁头数。FAT1扇区数与FAT2相同。
---------------------------------------------------------------------
例如:(121-125)*63+(1-0)*128*63+35-34=7813个扇区
---------------------------------------------------------------------
h) 计算出FAT1头部地址,并记录。——FAT1,例如:0-1-33
i) 在DISKEDIT中按Alt-P重选Physical Sector,起始地址为步骤f)记录的地址。
(0-125-34);扇区数为步骤g)计算出的扇区数(7813)。按Alt-W将选中的扇
区(即FAT2)存至FAT1开始的地址(步骤h)计算出的FAT1头部,0-1-33)。
j) 至此,FAT2-]FAT1的恢复工作宣告结束。
4) 修复BOOT扇区
找一台正常的相同系统(FAT32/FAT16),用DISKEDIT将BOOT扇区(例如,0-1-1至0-1-32)写入
软盘。
Alt-P,输入0-1-1地址,输入扇区数32(FAT16为1),回车;
Alt-T -] Write Object to ... -] to a file -] 输入A:\及文件名,按OK
将存好的文件复制到带毒系统中:
Alt-O -]File -]输入刚才的文件名,按OK;
Alt-T -] Write Object To ... -] to physical sectors -] 输入0-1-1
修改BOOT扇区中的BPB表项:
Alt-O -] Physical Drive -] Hard Drive 1
Alt-P -] 输入0-1-1 -] 按[F7]查看
修改Sides后的值,将修复MBR时记录的右下角物理地址中的磁头数加1,输入此处
(磁头总数为偶数,从0开始)
按[F2]查看HEX数据,修改偏移0024H处的字节(FAT1扇区数,例中为7813,16进制1E85,
注意:低位在前,高位在后(在DISKEDIT中写入偏移0024H处为85,0025H处为1E)。

经过上述看来较复杂的操作后,苦尽甘来,重启动后,看看你的硬盘上还剩下什么?……
如果DIR C:后情况不对,请仔细检查你的计算过程,是否有遗漏……

Robert Yore: robert_yore@163.net
04/29/1999

(,1999-04-29)