FAT 简介
FAT全称File Allocation Table,是一种计算机文件系统体系结构。最初于1977年设计用于软盘,20年来,fat很快被广泛应用于整个dos和windows 9x时代的硬盘上。[4]随着磁盘驱动器的发展,文件系统的功能也相应地得到了扩展,产生了三种主要的文件系统变体:fat12、fat16和fat32。
本文主要探讨FAT12文件系统。
FAT 结构
FAT文件系统把存储介质看成一维的数组,基本单位是簇(cluster)。存储介质被划分为3个区域:boot record、FAT、directory和data area。
一个簇包含一个扇区,大小为512B。
image
Boot Record
引导扇区包含了数据和代码,数据被称为BPB(BIOS Parameter Block)。
Offset(decimal) | Offset(hex) | Size(in bytes) | Meaning |
---|---|---|---|
0 | 0x000 | 3 | 前三个字节EB 3C 90分解为JMP SHORT 3C NOP。(3C值可能有所不同)这样做的原因是要“翻阅磁盘格式信息(BPB和EBPB)。由于磁盘的第一个扇区已加载到0x0000:0x7c00位置的ram中,并且已执行, 如果没有这种跳转,处理器将尝试执行非代码数据,即使对于不可引导的卷,Windows和OS X都必须提供与模式匹配的代码(或使用E9跳转选项)。 为了满足要求,可以在此处放置带有字节EB FE 90的无限循环。 |
3 | 0x003 | 8 | OEM标识符。(后面看不看无所谓) 前8个字节(3-10)是所使用的DOS版本。 接下来的八个字节29 3A 63 7E 2D 49 48和43读出版本名称。 Microsoft的官方FAT规范说,该字段实际上是没有意义的,MS FAT驱动程序将忽略它,但是它确实建议使用值“ MSWIN4.1”,因为某些第三方驱动程序应该检查并期望它具有该值。 DOS的较旧版本也报告MSDOS5.1,Linux格式的软盘可能在此处带有“ mkdosfs”,而FreeDOS格式的磁盘在此处具有“ FRDOS5.1”。 |
11 | 0x00B | 2 | 每个扇区的字节数 |
13 | 0x00D | 1 | 每个簇的扇区数 |
14 | 0x00E | 2 | 保留的扇区数,boot record的扇区包含在其中;也可以说是boot record占用的扇区数。 |
16 | 0x010 | 1 | FAT的数量,一般为2 |
17 | 0x011 | 2 | 根目录文件数(的最大值,must be set so that the root directory occupies entire sectors)。 |
19 | 0x013 | 2 | 扇区数。如果此值为0,则说明这个卷有超过65535个扇区,真实的数量将存在0x20处 |
21 | 0x015 | 1 | 此字节指示媒体描述符类型 |
22 | 0x016 | 2 | 每个FAT的扇区数。仅FAT12/FAT16使用。 |
24 | 0x018 | 2 | 每个磁道的扇区数 |
26 | 0x01A | 2 | 存储介质上的磁头或磁头数 |
28 | 0x01C | 4 | 隐藏扇区数(即分区开头的LBA) |
32 | 0x020 | 4 | 大扇区数。当卷中超过65535个扇区(在0x13出放不下,仅2 byte)时设置。 |
36 | 0x024 | 1 | 驱动器号。 此处的值应与BIOS中断Ox13返回的值相同,或与DL寄存器中传递的值相同。 即软盘为0x00,硬盘为Ox80。 该编号无用,因为该介质很可能会移动到另一台计算机上,并插入到具有不同驱动器编号的驱动器中。 |
37 | 0x025 | 1 | Windows NT中的标志;否则保留(不使用)。 |
38 | 0x026 | 1 | Signature,必须为0x28或0x29 |
39 | 0x027 | 4 | 卷ID“序列号”。 用于跟踪计算机之间的卷。 如果你想的话,可以忽略它。 |
43 | 0x02B | 11 | 卷标签字符串。该字段用空格填充。 |
54 | 0x036 | 8 | 系统标识符字符串。 该字段是FAT文件系统类型的字符串表示形式。 它用空格填充。 规范说永远不要相信此字符串的内容用于任何用途 |
62 | 0x03E | 448 | Boot代码 |
510 | 0x1FE | 2 | 可启动分区签名0xAA55(0x55AA) |
Boot Record占据了第一个扇区。