FAT12分区是由微软开发的一个较为简易的文件系统,其是专门为软盘开发所开发的,当各参数调至最大值时,支持32MB的软盘。

常用的软盘大小为1.4MB:
2(H) × 80(C) × 18(S) × 512 = 1474560B = 1440K = 1.44M

FAT文件系统整体默认格式:

逻辑扇区占用扇区内容
01(512B)引导程序
1~99(4.5 KB)FAT文件分配表1
10~189(4.5 KB)FAT文件分配表2
19~3214(7 KB)根目录
33~28802848(1424 KB)文件数据区

引导程序格式

标识偏移量偏移量大小说明默认值
0db3跳转指令(imp)
BS_OEMName3db8OEM字符串,必须为8个字符,不足以空格填空MSWIN4.1
BPB_BytsPerSec11dw2单个扇区字节数0x200(512)
BPB_SecPerClus13db1单个簇占用的扇区数1
BPB_RsvdSecCnt14dw2保留扇区数(默认保留第一个扇区MBR)1
BPB_NumFATs16db1FAT表的记录数2
BPB_RootEntCnt17dw2最大根目录文件数0xe0(224)
BPB_TotSec1619dw2逻辑扇区总数(还有一个物理扇区的概念)0xb40(2880)
BPB_Media21db1媒体描述符0xf0(240)
BPB_FATSz1622dw2单个FAT表占用扇区数9
BPB_SecPerTrk24dw2单个磁道扇区数0x12(18)
BPB_NumHeads26dw2磁头数2
BPB_HiddSec28dd4隐藏扇区数0
BPB_TotSec3232dd4如果BPB_TotSec16是0,则在这里记录扇区总数0
BS_DrvNum36db1int 0x13的驱动器号0
BS_Reserved137dd1保留0
BS_BootSig38db1扩展引导标志0x29(41)
BS_VolID39db4卷序列号(UUID)0
BS_VolLab43dd11必须是11个字符,不足以空格填充
BS_FileSysType54db8文件系统类型,必须是8个字符,不足填充空格FAT12
62 448由偏移0字节处的短跳转而来
510dw2系统引导标识0xaa55

文件分配表格式

FAT文件分配表
文件分配表是主要用于快速索引磁盘空余、坏道和已用。
注:文件分配表又被称之为表项

第000和001号簇保留用于标志表项信息,第一个字节为存储介质,FDD为0xf0,HDD为0xf8。第二三个字节为0xff,表示为这个为文件分配表。

剩余字节,分配用于表项使用。注意,在FAT12中,簇的最小单位为12bits,所以需要使用方式来存储簇信息,如下图。
对应关系
每一个簇对应这一个扇区,所以这里簇的作用也就非常清楚了。

每个簇的内容都有特殊含义:

  • 0x00:未使用
  • 0x002~0xfef:其值为指向下一个簇的位置。由于簇0和簇1 在开头已经被使用,所以就就从002开始了。
  • 0xff0~0ff5:预留
  • -0xff7:坏道
  • 0xff8~0xfff:表示一个链的结尾

FAT分区的文件索引方式与其他文件系统不同,使用的是链的方式来表示一个完整的文件。
注:表项只是用于表示文件内容信息,文件名称、属性等信息存储在目录中。

如上图中所示,可以按照以下方式表示一个文件:

  1. 簇003(004),这个是一个文件的开始,其内容为004,那么下一个簇就是簇4。
  2. 簇004(005),上同,指向的就是簇5。
  3. 簇005(fff),到这个簇到结尾,这个文件的全部内容就读取完了。

根目录格式

FAT目录项数据结构
上图这个就是FAT12目录数据架构了,大小为32bytes。

其大致属性如下:

  • 文件名称:都为ASCII的字符串,注意文件名称全大写,不足用空格填补。
  • 后缀名:3字节长的ASCII字符串,也是全部使用大写。
  • 首簇号:对应段就是前面FAT文件分配表的簇号。用一个簇链来表示一个完整文件。
  • 时间、日期:段表示的是文件最后修改日期。
  • 只读:不可改写
  • 隐藏:浏览文件时隐藏列表
  • 系统:删除的时候会有提示
  • 卷标:作为磁盘的卷标识符
  • 目录:此文件是一个子目录,它的内容就是此目录下的所有文件目录项
  • 归档:归档文件

本文经「原本」原创认证,作者乾坤盘,访问yuanben.io查询【4QJIVYG7】获取授权信息。

最后修改:2020 年 05 月 20 日 08 : 48 PM
如果觉得我的文章对你有用,请随意赞赏