当前位置: 首页 新闻资讯 技术问答

详细介绍FAT32文件系统的分配表结构是怎样的?

SD NAND-贴片式TF卡-贴片式SD卡-免费测试2025-06-259

AT32(File Allocation Table 32)的文件分配表结构是其核心机制,负责管理磁盘空间和文件存储位置。以下从底层原理到实际应用进行详细解析:

1. FAT32 的基本结构层次

FAT32 文件系统由以下核心部分组成(按扇区顺序排列):

+---------------------+
| 引导扇区(Boot Sector)|
+---------------------+
|     FAT表区域       |
+---------------------+
|    根目录区域       |
+---------------------+
|     数据区          |
+---------------------+

2. 引导扇区(Boot Sector)

引导扇区位于分区的第 0 扇区(512 字节),包含以下关键信息:


  • BPB (BIOS Parameter Block):存储文件系统参数,如:

    • 每扇区字节数(通常 512)

    • 每簇扇区数(2/4/8/16/32,由分区大小决定)

    • FAT 表数量(通常 2 份,互为备份)

    • 数据区起始扇区位置

  • 引导代码:用于系统启动(如包含 GRUB 等引导程序)。

  • 卷标:分区名称(如 “System”)。


示例 BPB 参数(1GB 分区,4KB 簇):

Bytes per sector:        512
Sectors per cluster:     8 (4KB/cluster)
Reserved sectors:        32
Number of FATs:          2
Sectors per FAT:         655 (FAT表大小)
Root directory clusters: 2 (从簇2开始)

3. 文件分配表(FAT)结构

FAT 表是一个数组,每个条目(Entry)对应一个簇号,记录该簇的状态和后续簇链接关系。

3.1 FAT 表基本特性

  • 大小:由分区大小和簇大小决定,例如 1GB 分区用 4KB 簇需约 655 扇区(约 335KB)。

  • 条目格式

    • FAT32 使用 28 位表示簇号(实际占 4 字节,高 4 位保留)。

    • 每个条目值含义:

0x00000000      → 未分配簇
0x00000002~0x0FFFFFF6 → 数据簇(指向下一个簇号)
0x0FFFFFF7      → 坏簇(不可用)
0x0FFFFFF8~0xFFFFFFFF → 文件最后一个簇

3.2 FAT 表的链表机制

文件存储时会被分割成多个簇,FAT 表用链表记录这些簇的顺序:

  • 示例:一个文件占用簇 2、7、9,FAT 表中条目关系为:

FAT[2] = 7    → 簇2的下一个簇是7
FAT[7] = 9    → 簇7的下一个簇是9
FAT[9] = 0xFFFFFFF → 簇9是文件的最后一个簇

4. 根目录与文件目录项(Directory Entry)

4.1 根目录结构

  • FAT32 的根目录

    • 不再限制为 512 个条目(FAT16 的限制)。

    • 作为普通数据簇存储(通常从簇 2 开始)。

    • 大小可动态扩展(受数据区空间限制)。

4.2 目录项格式

每个目录项占 32 字节,包含:

+----------------+--------+----------------------------------+
| 字段           | 长度   | 描述                             |
+----------------+--------+----------------------------------+
| 文件名         | 11字节 | 8.3格式(8字节主名+3字节扩展名) |
| 属性           | 1字节  | 文件属性(如只读、隐藏、目录)   |
| 创建时间       | 6字节  | 文件创建时间戳                   |
| 起始簇号       | 4字节  | 文件数据的第一个簇号             |
| 文件大小       | 4字节  | 文件大小(字节)                 |
+----------------+--------+----------------------------------+

长文件名支持

  • 采用 VFAT(长文件名)格式,通过多个目录项拼接表示长文件名(每个目录项存 13 个 Unicode 字符)。

5. 数据区(Data Region)

数据区是实际存储文件内容的区域,从第一个数据簇(通常是簇 2)开始。

  • 簇编号规则

    • 簇号从 2 开始(0 和 1 保留,用于 FAT 表特殊标记)。

    • 最大簇号:0x0FFFFFF6(约 1677 万个簇)。

  • 数据区大小:由 BPB 中的参数计算:

数据区总簇数 = (分区总扇区数 - 保留扇区数 - FAT表扇区数×FAT表数量) / 每簇扇区数

6. FAT32 的读写流程

6.1 文件读取流程

  1. 从目录项获取文件起始簇号。

  2. 查 FAT 表找到下一个簇号,直到遇到结束标记(0xFFFFFFF)。

  3. 按簇号顺序读取数据区内容。

6.2 文件写入流程

  1. 查找 FAT 表中的空闲簇(值为 0 的条目)。

  2. 分配足够数量的簇,并在 FAT 表中建立链表关系。

  3. 更新目录项中的起始簇号和文件大小。

7. FAT32 的局限性与优化

7.1 主要缺点

  • FAT 表易损坏:单点故障(如 FAT 表损坏可能导致文件丢失)。

  • 碎片问题:频繁读写导致文件碎片化,降低性能。

  • 空间浪费:小文件占用整个簇(如 1KB 文件占 4KB 簇)。

  • 扩展性差:最大支持 32GB 分区(微软官方限制)。

7.2 优化措施

  • 双 FAT 表备份:两个 FAT 表互为镜像,提高可靠性。

  • 碎片整理:定期运行碎片整理工具(如 Windows 的defrag)。

  • 簇大小优化:根据文件类型选择合适簇大小(见前文分析)。

8. 与其他文件系统的对比

特性FAT32NTFSexFAT
最大分区大小32GB256TB128PB
最大文件大小4GB16EB16EB
文件分配表结构链表式B + 树B + 树
元数据保护事务日志有限日志
安全性ACL 权限、加密基本权限
兼容性所有系统支持Windows 为主主流系统支持

总结

FAT32 的分配表结构通过简单的链表机制实现了文件存储管理,但受限于其设计:

  • 优势:结构简单、兼容性强、适合小容量存储。

  • 劣势:空间利用率低、易碎片、扩展性差。
    理解 FAT32 的分配表结构对优化存储、数据恢复(如文件误删除)和嵌入式系统开发尤为重要。在现代大容量存储场景中,建议优先使用 NTFS 或 exFAT,但 FAT32 仍在兼容性要求高的场景(如 U 盘、嵌入式设备)中广泛应用。

热门标签:SD NAND FLASH 贴片式TF卡 贴片式SD卡 SD FLASH NAND FLASH


SD NAND-贴片式TF卡-贴片式SD卡-免费测试

深圳市芯存者科技有限公司

售前咨询
售前咨询
售后服务
售后服务
联系我们

电话:176-6539-0767

Q Q:135-0379-986

邮箱:1350379986@qq.com

地址:深圳市南山区蛇口街道后海大道1021号C座C422W8

在线客服 在线客服 QQ客服 微信客服 淘宝店铺 联系我们 返回顶部