zck699 发表于 2012-8-8 22:50:40

快速修复U盘、TF卡、SD卡、CF卡等的MBR和DBR恢复数据

本帖最后由 zck699 于 2015-12-3 03:24 编辑

一、U内存卡的MBR和DBR的基本知识

1、现在的U盘、TF卡、SD卡、CF卡等容量都较大,分区格式通常为FAT32,FAT16很少(只有一些古董级的使用);

2、U盘、TF卡、SD卡、CF卡等的MBR扇区(0号扇区)一般有一个分区表及55AA标记(分区表知识在此不赘述),可能有引导代码,也可能没有引导代码(有无引导代码都不影响数据恢复);

3、DBR扇区00—3F为64个字节的跳转代码、OEM标识、PBP参数及卷标等,引导代码可能有也可能没有(不影响数据恢复),最后两字节为55AA标记;
以下为FAT32文件系统中各字节含义:
   字节偏移(16进制)字节数         含义
       00—02             3      跳转代码EB0090;
       03—0A             8      OEM,即文件系统标志(ASCII码),通常为MSDOS5.0
       0B—0C             2      每扇区字节数,通常都为0002(512)
       0D—0D            1      每簇扇区数,常为8、16、32、64等(必须为2的幂)
       0E—0E             1      保留扇区数,即FAT1扇区号与DBR扇区号之差
       10—10             1      FAT个数,通常为2
       11—12             2      根目录可容纳的目录项数目,通常为512(无意义)
       13—14             2      分区扇区总数(即分区大小,小于32M使用),超过32M时使用偏移20—23四个字节存放
       15—15             1      介质描述,通常为F8
       16—17             2      FAT表的大小扇区数(分区小于32M使用)
       18—19             2      每扇区的磁道数,通常为63
       1A—1B             2      磁头数,通常为255
       1C—1F             4      隐藏扇区数,即DBR扇区之前的扇区总数
       20—23             4      分区扇区总数(分区大于32M使用)
       24—27             4      FAT表的大小扇区数(分区大于32M使用)
       28—29             2      延迟,通常为0
       2A—2B             2      版本号
       2C—2F             4      根目录簇号
       30—31             2      FSInfo 扇区号
       32—33             2      DBR备份扇区号
       34—3F             12      保留未使用,通常全为0
       40—40             1      BIOS 驱动,常为80
       41—41             1      保留未使用,通常为0
       42—42             1      扩展引导标记,通常这29H
       43—46             2      卷序列号
       47—51             11      卷标(此处通常为NO NAME的ASCII码,FAT32的卷标在根目录中记录)
       52—57             2      文件系统类型,FAT32的ASCII码
       5A—1FD         2      引导代码
       1FE—1FF          2      签名值55AA

4、文件系统的6号扇区为DBR备份;

5、MBR中的分区表被破坏或DBR扇区被破坏,都会表现出在系统中提示未格式化。

二、MBR和DBR恢复方法

1、做镜像备份。如果对文件系统不熟悉,为避免做一些错误修改,可先把需要恢复的U盘、TF卡、SD卡、CF卡等做一个扇区级备份,再备份的镜像文件中操作。在Winhex的工具→磁盘工具→克隆磁盘,将存储介质备份为一个文件(来源选要备份的存储介质,目标为一个文件);

2、 在Winhex中打开备份的备份文件并设置镜像文件为磁盘;

3、查看将MBR号扇区有无分区表及55AA标记。如有,定位到分区起始位置,查看是否为DBR扇区;

4、如没有分区表或分区表中指定的分区起始扇区不是DBR,搜索FAT32的DBR跳转指令EB5890(设置条件为512=0)或55AA标记(设置条件为512=510),如搜索到确定为DBR,跳过5—7步。如未搜索到,继续下面步骤;

5、F8FFFF找到FAT1和FAT2的扇区号,用FAT2-FAT1得出FAT表大小值;

6、复制相应的正常的FAT32文件系统的DBR到MBR扇区和FAT1起始扇区之间任意位置;

7、修改DBR中相应值:
(1)“保留扇区”即为FAT1起始扇区号与DBR扇区号之差;
(2)“扇区/FAT”即FAT表大小值,为FAT2与FAT1扇区号之差,上面第5步计算得的值;
(3)“隐藏扇区数”DBR之前的扇区总数,因扇区编号从0开始,故隐藏扇区数就是DBR扇区号值;
(5)“扇区/簇” 即每簇扇区数(通常4G、8G为8,16G为16,32G为32),如不正确再修改,当然最好是搜索两个目录起始扇区分析确定,不过比较麻烦;
(6)“分区大小扇区”值:可用内存卡扇区总数减DBR扇区号值,修改为接近于该值而小于或等于该值的一个值(最好小于该值,因为通常内存卡中都有部分剩于扇区);

8、写分区表或修改分区表中的参数:
(1)分区类型(分区表项的第5个字节)FAT32文件系统为0B或0C;
(2)分区起始    为DBR中的隐藏扇区值;
(3)分区大小扇区数   DBR中的“扇区(32M以上)”或“扇区(32M以下)”值;
(4)由于现在的磁盘都用LBA寻址方式,分区表中的开始头、开始扇区、开始扇区、结束头、结束扇区、结束扇区已没实际意义,可随便填写(如开始参数为000101,结束参数为FEFFFF),也可不填写;

8、用ImDisk虚拟磁盘工具将改好的镜像文件装载磁盘,打开装载的盘符,查看数据是否正确,如不正确,再尝试修改DBR中的“扇区/簇”值;

其实,如果是DBR损坏,这样一项项查再一项项改也是一件麻烦的事,可写一个脚本,在FAT1之前任意定一个扇区作DBR扇区,让脚本自动为你在该盲区写一个DBR,把分区表中的起始扇区号改为你设定的扇区号,非常省事而且快速准确。

如有需求,欢迎光临我的淘宝店:http://Hisuo.taobao.com

mike56 发表于 2012-12-14 08:35:06

这样能行吗
页: [1]
查看完整版本: 快速修复U盘、TF卡、SD卡、CF卡等的MBR和DBR恢复数据