FAT12分区是由微软开发的一个较为简易的文件系统,其是专门为软盘开发所开发的,当各参数调至最大值时,支持32MB的软盘。
常用的软盘大小为1.4MB:
2(H) × 80(C) × 18(S) × 512 = 1474560B = 1440K = 1.44M
FAT文件系统整体默认格式:
逻辑扇区 | 占用扇区 | 内容 |
---|---|---|
0 | 1(512B) | 引导程序 |
1~9 | 9(4.5 KB) | FAT文件分配表1 |
10~18 | 9(4.5 KB) | FAT文件分配表2 |
19~32 | 14(7 KB) | 根目录 |
33~2880 | 2848(1424 KB) | 文件数据区 |
引导程序格式
标识 | 偏移量 | 偏移量 | 大小 | 说明 | 默认值 |
---|---|---|---|---|---|
0 | db | 3 | 跳转指令(imp) | ||
BS_OEMName | 3 | db | 8 | OEM字符串,必须为8个字符,不足以空格填空 | MSWIN4.1 |
BPB_BytsPerSec | 11 | dw | 2 | 单个扇区字节数 | 0x200(512) |
BPB_SecPerClus | 13 | db | 1 | 单个簇占用的扇区数 | 1 |
BPB_RsvdSecCnt | 14 | dw | 2 | 保留扇区数(默认保留第一个扇区MBR) | 1 |
BPB_NumFATs | 16 | db | 1 | FAT表的记录数 | 2 |
BPB_RootEntCnt | 17 | dw | 2 | 最大根目录文件数 | 0xe0(224) |
BPB_TotSec16 | 19 | dw | 2 | 逻辑扇区总数(还有一个物理扇区的概念) | 0xb40(2880) |
BPB_Media | 21 | db | 1 | 媒体描述符 | 0xf0(240) |
BPB_FATSz16 | 22 | dw | 2 | 单个FAT表占用扇区数 | 9 |
BPB_SecPerTrk | 24 | dw | 2 | 单个磁道扇区数 | 0x12(18) |
BPB_NumHeads | 26 | dw | 2 | 磁头数 | 2 |
BPB_HiddSec | 28 | dd | 4 | 隐藏扇区数 | 0 |
BPB_TotSec32 | 32 | dd | 4 | 如果BPB_TotSec16是0,则在这里记录扇区总数 | 0 |
BS_DrvNum | 36 | db | 1 | int 0x13的驱动器号 | 0 |
BS_Reserved1 | 37 | dd | 1 | 保留 | 0 |
BS_BootSig | 38 | db | 1 | 扩展引导标志 | 0x29(41) |
BS_VolID | 39 | db | 4 | 卷序列号(UUID) | 0 |
BS_VolLab | 43 | dd | 11 | 必须是11个字符,不足以空格填充 | |
BS_FileSysType | 54 | db | 8 | 文件系统类型,必须是8个字符,不足填充空格 | FAT12 |
62 | 448 | 由偏移0字节处的短跳转而来 | |||
510 | dw | 2 | 系统引导标识 | 0xaa55 |
文件分配表格式
文件分配表
是主要用于快速索引磁盘空余、坏道和已用。
注:文件分配表又被称之为表项
。
第000和001号簇保留用于标志表项信息,第一个字节为存储介质,FDD为0xf0,HDD为0xf8。第二三个字节为0xff,表示为这个为文件分配表。
剩余字节,分配用于表项使用。注意,在FAT12中,簇的最小单位为12bits,所以需要使用方式来存储簇信息,如下图。
每一个簇对应这一个扇区,所以这里簇的作用也就非常清楚了。
每个簇的内容都有特殊含义:
- 0x00:未使用
- 0x002~0xfef:其值为指向下一个簇的位置。由于簇0和簇1 在开头已经被使用,所以就就从002开始了。
- 0xff0~0ff5:预留
- -0xff7:坏道
- 0xff8~0xfff:表示一个链的结尾
FAT分区的文件索引方式与其他文件系统不同,使用的是链的方式来表示一个完整的文件。
注:表项只是用于表示文件内容信息,文件名称、属性等信息存储在目录中。
如上图中所示,可以按照以下方式表示一个文件:
- 簇003(004),这个是一个文件的开始,其内容为004,那么下一个簇就是簇4。
- 簇004(005),上同,指向的就是簇5。
- 簇005(fff),到这个簇到结尾,这个文件的全部内容就读取完了。
根目录格式
上图这个就是FAT12目录数据架构了,大小为32bytes。
其大致属性如下:
- 文件名称:都为ASCII的字符串,注意文件名称全大写,不足用空格填补。
- 后缀名:3字节长的ASCII字符串,也是全部使用大写。
- 首簇号:对应段就是前面
FAT文件分配表
的簇号。用一个簇链来表示一个完整文件。 - 时间、日期:段表示的是文件最后修改日期。
- 只读:不可改写
- 隐藏:浏览文件时隐藏列表
- 系统:删除的时候会有提示
- 卷标:作为磁盘的卷标识符
- 目录:此文件是一个子目录,它的内容就是此目录下的所有文件目录项
- 归档:归档文件
本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【4QJIVYG7】获取授权信息。