四、FAT分区原理。
先来一幅结构图:

现在我们着重研究FAT格式分区内数据是如何存储的。FAT分区格式是MICROSOFT最早支持的分区格式,依据FAT表中每个簇链的所占位数(有关概念,后面会讲到)分为fat12、fat16、fat32三种格式"变种",但其基本存储方式是相似的。
仔细研究图7中的fat16和fat32分区的组成结构。下面依次解释DBR、FAT1、FAT2、根目录、数据区、剩余扇区的概念。提到的地址如无特别提示均为分区内部偏移。
4.1 关于DBR.
DBR区(DOS BOOT RECORD)即操作系统引导记录区的意思,通常占用分区的第0扇区共512个字节(特别情况也要占用其他保留扇区,我们先说第0扇)。在这512个字节中,其实又是由跳转指令,厂商标志和操作系统版本号,BPB(BIOS Parameter Block),扩展BPB,os引导程式,结束标志几部分组成。 以用的最多的FAT32为例说明分区DBR各字节的含义。见图8。

图8的对应解释见表3
| 表3 FAT32分区上DBR中各部分的位置划分 | |||
| 字节位移 | 字段长度 | 字段名 | 对应图8颜色 |
| 0x00 | 3个字节 | 跳转指令 | |
| 0x03 | 8个字节 | 厂商标志和os版本号 | |
| 0x0B | 53个字节 | BPB | |
| 0x40 | 26个字节 | 扩展BPB | |
| 0x5A | 420个字节 | 引导程式代码 | |
| 0x01FE | 2个字节 | 有效结束标志 | |
图9给出了winhex对图8 DBR的相关参数解释:

根据上边图例,我们来讨论DBR各字节的参数意义。
MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86的CPU指令。这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。
跳转指令之后是8字节长的OEM ID,他是个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号。为了保留和MS-DOS的兼容性,通常Windows 2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了“MSDOS 5.0”,在NTFS磁盘上(关于ntfs,另述),Windows 2000记录的是“NTFS”。通常在被Windows 95格式化的磁盘上OEM ID字段出现“MSWIN4.0”,在被Windows 95 OSR2和Windows 98格式化的磁盘上OEM ID字段出现“MSWIN4.1”。
接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息。通常称之为BPB(BIOS Parameter Block),BPB一般开始于相同的位移量,因此,标准的参数都处于一个已知的位置。磁盘容量和几何结构变量都被封在BPB之中。由于引导扇区的第一部分是个x86跳转指令。因此,将来通过在BPB末端附加新的信息,能够对BPB进行扩展。只需要对该跳转指令作一个小的调整就能够适应BPB的变化。图9已列出了项目的名称和取值,为了系统的研究,针对图8,将FAT32分区格式的BPB含义和扩展BPB含义释义为表格,见表4和表5。



