主磁盘结构
• 引导扇区(Boot Sector)
• 位于第一个扇区,在软盘上就是0柱面(磁道)0磁头1扇区。
• 文件分配表(FAT)
• 紧接着引导扇区的是两个完全相同的FAT表,每个FAT表占用9个扇区
• 根目录区
• FAT表之后是根目录区,根目录区长度不固定
• 数据区
• 根目录后面就是数据区
引导扇区格式
格式如下:
名称偏移长度内容软盘参考值BS_jmpBoot03-jmp LABEL_STARTnopBS_OEMName38厂商名'ForrestY'BPB_BytsPerSec112每扇区字节数0x200(即十进制512)BPB_SecPerClus131每簇扇区数0x01BPB_RsvdSecCnt142Boot记录占用多少扇区0x01BPB_NumFATs161共有多少FAT表0x02BPB_RootEntCnt172根目录文件数最大值0xE0 (224)BPB_TotSec16192扇区总数0xB40(2880)BPB_Media211介质描述符0xF0BPB_FATSz16222每FAT扇区数0x09BPB_SecPerTrk242每磁道扇区数0x12BPB_NumHeads262磁头数0x02BPB_HiddSec284隐藏扇区数0BPB_TotSec32324如果BPB_TotSec16是0,由这个值记录扇区数0xB40(2880)BS_DrvNum361中断13的驱动器号0BS_Reserved1371未使用0BS_BootSig381扩展引导标记0x29BS_VolD394卷序列号0BS_VolLab4311卷标'OrangeS0.02'BS_FileSysType548文件系统类型'FAT12'引导代码62448引导代码、数据及其他填充字符等-结束标志5102-0xAA55
文件分配表
它包含有两份文件分配表,这是出于系统冗余考虑,尽管它很少使用,即使是磁盘修复工具也很少使用它。它是分区信息的映射表,指示簇是如何存储的。
每个FAT项占12bit,这也所被成为FAT12的原因,FAT项的值代表的是文件下一个簇号,但如果值大于等于0xFF8,则表示当前簇已经是本文件的最后一个簇。如果值是0xFF7,表示它是一个坏簇。
一个FAT项可能跨越两个扇区,编码实现的过程要考虑在内。
根目录区
根目录区位于第二个FAT表之后,开始扇区号为19,它由若干个目录条目(Directory Entry)组成,条目最多有BPB_RootEntCnt个。每个条目占用32个字节,它的格式如下:
名称偏移长度描述DIR_Name00xB文件名8字节,扩展名3字节DIR_Attr0xB1文件属性保留0xC10-DIR_WrtTime0x162最后修改时间DIR_WrtDate0x182最后修改日期DIR_FstClus0x1A2此条目对应的开始簇号DIR_FileSize0x1C4文件大小
数据区
数据区在根目录区后,数据区开始扇区号为根目录区起始扇区号+根目录区大小,即19+BPB_RootEntCnt * 32 / BPB_BytsPerSec。