起源
FAT(File Allocation Table)文件配置表。用来记录文件所在位置的表格。假若丢失文件分配表,那么硬盘上的数据就会因无法定位而无法使用。
- 在 DOS v1.0 时代就引入了,是最基本的文件系统之一。
 - FAT 家族:FAT12、FAT16、FAT32、ExFAT、VFAT
 - 12 位地址,最大容量 16MB
 - 为软盘设计的文件系统
 
FAT 结构
- FAT 文件系统把存储介质看成一维的数组,基本单位是簇(cluster)
- 存储介质被划分为 3 个区域:boot record、FAT、directory and data area
 
 - 一个簇包含一个扇区,大小为 512B
 
Boot record
引导扇区包含了数据和代码,数据被称为 BPB(BIOS Parameter Block)。



File Allocation Table
- FAT1 和 FAT2 互为备份。
 - 文件分配表被划分为紧密排列的若干个表项,每个表项都与数据区中的一个簇相对应,而且表项的序号也是与簇号一一对应的。
 - 每 12 位成为一个 FAT 项(FATEntry),代表一个簇。所以 2 个 FAT 项会占用 3 个字节。
 - 在 1.44M 软盘上,FAT 前三个字节的值是固定的 0xF0、0xFF、0xFF,用于表示这是一个应用在 1.44M 软盘上的 FAT12 文件系统。本来序号为 0 和 1 的 FAT 表项应该对应于簇 0 和簇 1,但是由于这两个表项被设置成了固定值,簇 0 和簇 1 就没有存在的意义了,所以数据区就起始于簇 2。
 - FAT 项的值代表文件的下一个簇号:
- 值大于或等于 0xFF8,表示当前簇已经是本文件的最后一个簇
 - 值为 0xFF7,表示它是一个坏簇
 
 

Directory area
根目录区由目录项(entry)组成,一个目录项占 32 个字节。


如果文件名过长,在原本的目录项后面会立即跟一个 LFN 项,同样也是 32 个字节。

Data area
数据区的第一个簇的簇号是 2,为什么?
数据区开始扇区号=根目录开始扇区号+根目录所占扇区数。
若为目录,格式同根目录项。
Reference
- https://wiki.osdev.org/FAT#File_Allocation_Table
 - https://blog.csdn.net/qq_39654127/article/details/88429461#main-toc
 
制作 FAT12 镜像
Linux
- 在当前目录(.)创建一个新的软盘镜像 
a.img 
1  |  | 
- 在当前目录下创建一个新目录 
./mount作为挂载点 
1  |  | 
- 将镜像 
./a.img挂载到./mount下 
1  |  |