|
关于修复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)
|