FAT32文件系统详细分析 (格式化SD nandSD卡)

FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)

目录

  • [FAT32 文件系统详细分析 (格式化 SD nand/SD 卡)](#FAT32 文件系统详细分析 (格式化 SD nand/SD 卡))
    • [1. 前言](#1. 前言)
    • [2.格式化 SD nand/SD 卡](#2.格式化 SD nand/SD 卡)
    • [3.FAT32 文件系统分析](#3.FAT32 文件系统分析)
      • [3.1 保留区分析](#3.1 保留区分析)
        • [3.1.1 BPB(BIOS Parameter Block) 及 BS 区分析](#3.1.1 BPB(BIOS Parameter Block) 及 BS 区分析)
        • [3.1.2 FSInfo 结构扇区分析](#3.1.2 FSInfo 结构扇区分析)
        • [3.1.3 引导扇区剩余扇区](#3.1.3 引导扇区剩余扇区)
        • [3.1.4 备份引导扇区](#3.1.4 备份引导扇区)
        • [3.1.5 保留区剩余区域](#3.1.5 保留区剩余区域)
      • [3.2 分区偏移及大小计算](#3.2 分区偏移及大小计算)
      • [3.3 FAT 区分析:](#3.3 FAT 区分析:)
      • [3.4 数据区分析:](#3.4 数据区分析:)
    • 4.总结

1. 前言

文件存储到存储芯片中,有 2 种形式。

1, 直接按照地址的方式进行存储。

2, 以文件系统的形式进行存储。

直接按照地址的方式进行存储,可以通过建立一张索引表,知道哪些地址存储哪些数据,或者按照固定的方式,进行顺序的存储。这种写入的方式好处是不需要复杂的文件系统管理,但是不方便数据的交互。因为这张索引表都是自己定义的,不是通用的标准。

文件系统形式进行存储,就会有一套标准,大家都按照这个标准来,不同的设备都可以对于这个数据进行读写操作。通过文件系统的方式来存储数据,好处是方便了数据的交互,但是也会提高复杂程度。并且如果数据是完整的保存到存储单元中,但是描述这个文件的相关文件参数损坏了,这个文件也就无法正确读取到了。每一个数据,都有描述文件起始地址,文件大小,格式等等很多参数,也也就提高了文件出错的概率。 文件系统的种类也有很多,比如 FAT,exfat,NTFS,ext4 等等。

今天我们就先了解下 fat32 的文件系统。

2.格式化 SD nand/SD 卡

申请到雷龙发展代理的 CS 创世 贴片 SD Card (SD NAND) 样品,做出测试,分享一下,该公司 SD NAND 二代产品介绍可以参考如下地址http://longsto.com/product/list-39.html,有1Gb,4Gb,32Gb,64Gb的容量可选,我这里申请到的是两片32Gb的芯片和测试板.

2.1 格式化 SD nand / SD 卡,强制采用 FAT32 格式,分配每个簇大小为 2048Byte,同时为了避免其他原有数据干扰,我们此处取消快速格式化。

2.2 使用 WinHex 打开分析

3.FAT32 文件系统分析

FAT 文件系统布局图如下,和 FAT16 上有些许差别:

3.1 保留区分析

保留区分为引导扇区、备份引导扇区及其他字段,具体数据段分析如下。

3.1.1 BPB(BIOS Parameter Block) 及 BS 区分析

BPB 及 BS 参数内容数据如下:

EB 58 90 :BS*JmpBoot,跳转指令

4D 53 44 4F 53 35 2E 30:BS_OEMName,MSDOS 5.0,一个名字,指示创建此卷的操作系统,无其他作用

00 02:BPB_BytsPerSec,扇区大小 512 字节

04:BPB_SecPerClus,每次操作的最小扇区数,簇 Cluster,4 (与格式化时选择的大小匹配 2048 = 512 * 4)

16 11:BPB*RsvdSecCnt,保留区的扇区数,0x1116=4374 (通过此可计算,FAT 区起始地址为 4374 * 512 = 0x22 2C00)

02:BPB*NumFATs,FATs 的个数,2(一般此值为 2,多一个用来做冗余备份,解决系统异常导致第一个损坏时,增大恢复的可能性,表示 FAT 区有两个 FATs 备份)

00 00:BPB_RootEntCnt,0,在 FAT12/16 系统中,此字段表示根目录中 32 字节目录条目数量,设置此值时需注意对齐,为了最大的兼容性,FAT16 系统上此值应设置为 512,FAT32 系统上此值应设置为 0

00 00:BPB_TotSec16,16 位大小区域描述 FAT 卷扇区总数,0。当 FAT12/16 系统扇区数 ≥0x10000(65536)时,此字段应设置为 0,真实值存放在 BPB_TotSec32 字段;对于 FAT32 系统,此值必须为 0。(此处由于我们的总扇区数=118.510241024/512 = 242688 > 65536,所以此字段为 0)

F8:BPB_Media 媒体类型

00 00:BPB_FATSz16,00,一个 FAT 占用的扇区数,此字段仅在 FAT12/16 系统使用;FAT32 系统,此字段必须为 0,使用 BPB_FATSz32 字段替代。

3F 00:BPB_SecPerTrk,每个磁道的扇区数,此字段仅与具有几何形状且仅用于 IBM PC 的磁盘 BIOS 的介质相关,不用管。

FF 00:BPB_NumHeads,头数量,此字段仅与具有几何形状且仅用于 IBM PC 的磁盘 BIOS 的介质相关,不用管。

00 00 00 00:BPB_HiddSec,0,FAT 卷之前的隐藏物理扇区数(当磁盘被分区之后,当前分区并不一定是从扇区头开始的)

00 08 0F 00:BPB_TotSec32,0x0F0800 = 985088(整个卷空间大小),32 位大小区域描述 FAT 卷扇区总数。 FAT12/16 系统,扇区总数小于 0x10000 时,此字段必须为 0,真实值存放在 BPB_FATSz16;FAT32 系统,此字段一直有效。(481M = 512 * 985088)

以上是 FAT12/16/32 公共字段,接下来是 FAT32 独有字段

75 07 00 00:BPBFATSz32,1909,一个 FAT 占用的扇区数,FAT 区总大小等于 BPB_FATSz?? * BPBNumFATs 扇区。(由此可计算 FAT 区总大小:1909 * 2 = 3818 扇区 = 3818 _ 512Byte = 0x1D D400 Byte)

00 00: BPB_ExtFlags,扩展标识字段,bit7=0,表示所有 FAT 都是镜像的和活跃的;bit7=1,表示只有 bit3-0 表示的 FAT 是有效的。

00 00:BPB_FSVer:FAT32 版本,高字节是主版本号,低字节是次版本号。

02 00 00 00:BPB_RootClus,2, 根目录的第一个簇号,此值通常为 2,因为前两个簇一般用于保留。

01 00:BPB_FSInfo,1,FSInfo 结构扇区与 FAT32 卷顶部的偏移扇区值。此值通常为 1,因为其通常位于引导扇区旁边。

06 00:BPB_BkBootSec,6, 备份引导扇区与 FAT32 卷顶部的偏移扇区值。此值通常为 6,考虑最大的兼容性,此值不建议为其他值。

00 00 00 00 00 00 00 00 00 00 00 00:BPB_Reserved,0,保留

80:BS_DrvNum,IBM PC 的磁盘 BIOS 使用的驱动器号,00h 代表软盘,80h 代表固定磁盘

00:BS_Reserved,保留字段,0

29:BS_BootSig,扩展引导签名,表示以下存在三个字段

30 D1 B5 78:BS_VolID,与 BS_VolLab 一起构成卷序列号,一般在格式化的时候结合时间生成

4E 4F 20 4E 41 4D 45 20 20 20 20:(解析为:"NO NAME "),BS_VolLab,11byte 卷标,当卷标不存在时,此值应设置为"NO NAME"

46 41 54 33 32 20 20 20:BS_FilSysType,始终为"FAT32 ",对 FAT 类型的确定没有任何影响。

33 C9 ... B9 01 00 00:BS_BootCode32,引导启动程序,与平台有关,不使用时填充为 0

BS_BootSign:0xAA55,引导签名,指示这是一个有效的引导扇区

当扇区大小大于 512 字节时,剩余的字段应全部使用 0x0 填充。

3.1.2 FSInfo 结构扇区分析

FSInfo 数据结构为 FAT32 系统所特有,其目的是记录 FAT32 系统上剩余的簇数量以及下一个空闲簇数据;以避免扫描整个磁盘搜索导致的时间浪费。

FSInfo 数据偏移可从引导扇区内的 BPB_FSInfo 参数获取,此处为 1,因此 FSInfo 数据偏移为 1 个扇区,对应 512Byte,0x200 地址处。FSInfo 数据结构如下:

内容如下:

3.1.3 引导扇区剩余扇区

FAT32 引导扇区总共有三个 512Byte 的扇区构成。BPB、BS、FSInfo 字段已使用了 2 个扇区,还剩有一个扇区未使用,字段为 0,如下图所示,需要注意的是,此扇区在偏移值 510 处依旧存在尾部签名 0xAA55。

引导扇区剩余字段,为非有效字段,采用 0x00 填充。

3.1.4 备份引导扇区

相比 FAT12/16,FAT32 系统上存在引导扇区的备份,此块区域偏移参考引导扇区内 BPBBkBootSec 字段,当前引导扇区内此参数值为 6, 因此在当前文件系统内,备份引导扇区的偏移为 6 号扇区,对应偏移地址为 BPB_BkBootSec * BPBBytsPerSec = 6 * 512Byte = 3072Byte = 0xC00

3.1.5 保留区剩余区域

在 FAT32 系统中,保留区除了 BPB 区域、FSInfo 区域以及这两个区域的备份区域外,还有一部分区域,目前我没找到此区域的作用,我理解为此块区域是作为某种引导程序,数据内容如下:

关于此块区域,欢迎大家在评论区讨论!

此外,还有一处区域的存在也欢迎大家讨论,即 FSInfo 扇区后面的一个扇区,只有看到尾部签名,其他数据为空,目前也未找到此处有关说明,后续清楚后会在此补充,亦欢迎大家在评论区讨论!

3.2 分区偏移及大小计算

知道 BPB 参数内容之后,便可以进行分区偏移及大小计算了!

各分区偏移地址及大小如下:

关于 FAT 区,通常存在一个以上的 FAT,如此处所格式化的 sd 卡便存在两个 FAT,对应的偏移地址和大小如下:

注意:在 FAT32 系统中,根目录区不存在,但依旧存在根目录,不过是根目录作为数据区的一部分!

3.3 FAT 区分析:

FAT32 系统与 FAT12/16 系统在 FAT 区数据一个显著差别是:FAT32 每条 FAT 条目占 32bit,FAT16 占 16 个 bit,FAT12 占 12bit。关于此部分更详细描述,可参考上一篇:FAT 文件系统详解(点击跳转!) 的 4.3 章节!

3.3.1 FAT1

FAT1 偏移地址:0x22 2C00

数据内容如下:

3.3.2 FAT2

FAT2 是 FAT1 的备份,偏移地址:0x31 1600

数据内容与 FAT1 一致,如下:

3.4 数据区分析:

偏移地址:0x40 0000

由参数 BPB_RootClus 可知,数据区第一个簇是 2 号簇。

打开数据区的第一个簇,里面存放的内容便是根目录的内容!这也就是为什么 FAT32 没有根目录区,但依旧存在根目录的实现方式。数据内容如下:

之后我们看到 3 号簇的内容:

数据字段如下图所示,由于在上一篇博文中已对长短文件名每个字段进行过细致分析,此处不再做过度分析,仅抽取关键字段进行分析,如下图所示:

之后切换到 4 号簇和 5 号簇,可以查看到对应数据:

从 6 号簇开始便没有在使用,均为空闲簇,对应上 FSInfo 结构内 FSI_Nxt_Free 字段的内容。

4.总结

相比 FAT16 系统,FAT32 文件系统在保留区有了更多的设计:

1)增加了引导扇区的备份,异常掉电等情况下可恢复性更强;

2)增加了 FSInfo 结构,对于大容量 flash 访问将更加高效;

此外 FAT32 系统取消了根目录区,将根目录移至数据区,根目录与普通目录本来就没有什么区别,确实也不用单独分一个区存放,提高了一致性。

关于数据的存储思想,依旧保持不变:FAT 区内的 FAT 条目通过簇链记录扇区使用情况及文件占用的扇区情况;数据区内目录和文件都作为文件,通过目录这一类特殊文件,描述文件属性以及实际文件内容存放的簇的方式,将整个文件管理起来。

综上,便是 FAT32 格式文件系统的详细解析,欢迎大家评论区进行积极讨论与反馈!!!

亲爱的卡友们,欢迎光临雷龙官网,如果看完文章之后还是有疑惑或不懂的地方,请联系我们,自己去理解或猜答案是件很累的事,请把最麻烦的事情交给我们来处理,术业有专攻,闻道有先后,深圳市雷龙发展专注存储行业 13 年,专业提供小容量存储解决方案。

相关推荐
QianCenRealSim11 小时前
十五五智能网联汽车产业发展战略与前景展望
microsoft·十五五智能网联汽车产业发展
std860211 天前
微软升级Copilot Actions,可对本地文件执行操作
microsoft·copilot
ITHAOGE151 天前
下载| Windows 11 ARM版11月官方ISO系统映像 (适合部分笔记本、苹果M系列芯片电脑、树莓派和部分安卓手机平板)
windows·科技·microsoft·微软·电脑
吴法刚1 天前
Gemini cli 源码分析之Chat-ContentGenerator生成式 AI 模型交互
人工智能·microsoft·ai·gemini·ai编码
星尘安全2 天前
研究人员发现严重 AI 漏洞,Meta、英伟达及微软推理框架面临风险
人工智能·microsoft·网络安全·程序员必看
板鸭〈小号〉2 天前
守护进程(linux)
microsoft
Leinwin2 天前
微软与Anthropic深化战略合作,在Azure Foundry平台部署Claude系列AI模型
人工智能·microsoft·azure
JasonSJX3 天前
海海软件成为微软 PlayReady DRM 官方合作伙伴
microsoft·drm·视频加密·playready·数字版权保护
西焱4403 天前
微软官方直链下载(winxp,win8,win10,win11镜像下载)
microsoft
季春二九3 天前
微软 .Net 运行库丨多语言丨离线全集丨静默安装丨多架构支持
microsoft·.net