IT袋

当前位置:主页 > 经验教程 > 系统教程 >

U盘文件系统fat32打不来怎么办

U盘文件系统fat32打不来怎么办 详解u盘写入保护解除方法(2)

时间:2023-11-25 12:07:37 来源:IT袋 作者:苏晓敏
导读:U盘文件系统fat32打不来怎么办,下面讲讲最重要的一个DBR(DOS BOOT RECORD 操作系统引导记录区)。DBR 是我们进军 FAT32 的首道防线。其实 DBR 中的 BPB 部分才是这一区域的核心部分(第12~9

U盘文件系统fat32打不来怎么办

下面讲讲最重要的一个DBR(DOS BOOT RECORD 操作系统引导记录区)。DBR 是我们进军 FAT32 的首道防线。其实 DBR 中的 BPB 部分才是这一区域的核心部分(第12~90 字节为 BPB),只有深入详实地理解了 BPB 的意义,才能够更好地实现和操控 FAT32。关于 DBR 在 FAT32 中的地位就不多说了,上面的数据中的前90个字节是BPB的主要部分。BPB的C语言结构体如下所示:

struct FAT32_DBR{unsigned char BS_jmpBoot[3];//跳转指令 offset: 0unsigned char BS_OEMName[8];//原始制造商 offset: 3unsigned char BPB_BytesPerSec[2];//每扇区字节数 offset:11unsigned char BPB_SecPerClus[1]; //每簇扇区数 offset:13unsigned char BPB_RsvdSecCnt[2]; //保留扇区数目 offset:14unsigned char BPB_NumFATs[1]; //此卷中FAT表数 offset:16unsigned char BPB_RootEntCnt[2];//FAT32为0 offset:17unsigned char BPB_TotSec16[2]; //FAT32为0 offset:19unsigned char BPB_Media[1];//存储介质 offset:21unsigned char BPB_FATSz16[2];//FAT32为 0 offset:22unsigned char BPB_SecPerTrk[2];//磁道扇区数 offset:24unsigned char BPB_NumHeads[2];//磁头数 offset:26unsigned char BPB_HiddSec[4]; //FAT区前隐扇区数 offset:28unsigned char BPB_TotSec32[4];//该卷总扇区数 offset:32unsigned char BPB_FATSz32[4]; //一个FAT表扇区数 offset:36unsigned char BPB_ExtFlags[2];//FAT32特有 offset:40unsigned char BPB_FSVer[2];//FAT32特有 offset:42unsigned char BPB_RootClus[4];//根目录簇号 offset:44unsigned char FSInfo[2];//保留扇区FSINFO扇区数 offset:48unsigned char BPB_BkBootSec[2];//通常为6 offset:50unsigned char BPB_Reserved[12];//扩展用 offset:52unsigned char BS_DrvNum[1];//offset:64unsigned char BS_Reserved1[1];//offset:65unsigned char BS_BootSig[1];//offset:66unsigned char BS_VolID[4];//offset:67unsigned char BS_FilSysType[11];//offset:71unsigned char BS_FilSysType1[8];//"FAT32 " offset:82};

每个字段的大小和含义都有详细的注释,解析这些数据使是们进行文件系统探秘的首要任务。需要注意的是在BPB中数据是以小端模式存储的,所以51单片机的大端模式下需要进行大小端的转换,而一般ARM的默认方式就是小端模式,所以无需进行转换操作。

简单介绍DBR的BPB之后还需要介绍一下FAT表(文件分配表)的概念。什么是文件分配表呢?顾名思义,就是给文件分配存储空间的表,这里面存放的不是文件的数据而是文件所在的簇的信息,具体下面会给出解释。

FAT 表是 FAT32 文件系统中用于磁盘数据(文件)索引和定位引进的一种链式结构。可以说 FAT 表是 FAT32 文件系统最有特色的一部分,它的链式存储机制也是 FAT32 的精华所在,也正因为有了它才使得数据的存储可以不连续,使磁盘的功能发挥得更为出色。

那么FAT 表到底在什么地方?它到底是什么样子的?这时就要回到刚才的BPB部分了,在BPB中有一个字段叫做BPB_RsvdSecCnt,这个字段是表示保留山区数目,其实就是保留给BPB使用的空间的扇区数量,也就是说这个数值表示的就是FAT表前面的空间大小,那么FAT表的地址就是这个字段的数值了。其实在文件系统中为了保证正确性和稳定性胡设置两个完全相同的FAT表,并且两个FAT是同步的,也就是说对一个 FAT 表的操作, 同样地, 也应该在另一个 FAT表进行相同的操作,时刻保证它们内容的一致。这样是为了安全起见,当一个FAT 因为一些原因而遭到破坏的时候,可以从另一个 FAT 表进行恢复。

相关阅读