FAT32文件系统

FAT32文件系统_第1张图片


第一扇区

第一个扇区512字节,MBR区占了446字节,另外64个字节是4个分区表,每个分区表占16个字节,最后两个字节是55和AA。
后面紧跟的保留扇区数目由MBR表中0x1c6开始的四个字节决定。


DBR

BDR(Dos Boot Recoder - DOS引导记录)扇区,DBR中记录着文件系统的起始位置,大小,FAT表个数及大小等相关信息。
【1】0x00~0x02:3字节,跳转指令。
【2】0x03~0x0A:8字节,文件系统标志和版本号,这里为MSDOC5.0。
【3】0x0B~0x0C:2字节,每扇区字节数,512(0X02 00)。
【4】0x0D~0x0D:1字节,每簇扇区数,8(0x08)。
【5】0x0E~0x0F:2字节,保留扇区数,38(0x00 26),符合FAT1起始地址为38扇区。
【6】0x10~0x10:1字节,FAT表个数,2。
【7】0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数;
【8】0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。
【9】0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质,常用的 0xF0。
【10】0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。
【11】0x18~0x19:2字节,每磁道扇区数,只对于有“特殊形状”(由磁头和柱面每 分割为若干磁道)的存储介质有效,63(0x00 3F)。
【12】0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效,255(0x00 FF)。
【13】0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数,8192(0x00 00 20 00),与MBR中地址0x1C6开始的4个字节数值相等。
【14】0x20~0x23:4字节,文件系统总扇区数,7736320(0x 00 76 0C 00),7736320 * 512 = 3960995840 ≈ 3.67GB。
【15】0x24~0x27:4字节,每个FAT表占用扇区数,7541(0x 00 00 1D 75)。
【16】0x28~0x29:2字节,标记,此域FAT32 特有。
【17】0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。
【18】0x2C~0x2F:4字节,根目录所在第一个簇的簇号,2。(虽然在FAT32文件系统 下,根目录可以存放在数据区的任何位置,但是通常情况下还是起始于2号簇)
【19】0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号1,该扇区为操作 系统提供关于空簇总数及下一可用簇的信息。
【20】0x32~0x33:2字节,备份引导扇区的位置。备份引导扇区总是位于文件系统 的6号扇区。
【21】0x34~0x3F:12字节,用于以后FAT 扩展使用。
【22】0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不
同的位置而已。
【23】0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不
同的位置而已 。
【24】0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过 两者位于启动扇区不同的位置而已
【25】0x43~0x46:4字节,卷序列号。通常为一个随机值。
【26】0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷 标,会保存在此。
【27】0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。
【28】0x5A~0x1FD:90~509共410字节,未使用。该部分没有明确的用途。
【29】0x1FE~0x1FF:签名标志“55 AA”。


FAT

FAT(File Allocation Table),一个文件系统通常有两个FAT表,FAT2通常是作为备份的。
FAT16没有保留扇区,DBR之后紧跟的是FAT表,而FAT32中DBR之后还有FSInfo,在FAT表之前是保留扇区,保留扇区的个数由DBR中0x0e~0x0f决定

a. FAT32表项中,0号表项和1号表项不与任何簇对应,FAT32的0号表项是”F8FFFF0F”,1号表项可能被用于记录脏标志,以说明文件系统没有被正常卸载或者磁盘表面存在错误,正常情况下1号表项的值为”FFFFFFFF”或”FFFFFFF0”。
b. 如果某个簇未被分配使用,他对应的FAT表项内容为0
c. 当某个簇存在坏扇区,则整个会用0xfffffff7标志为坏簇,这个坏簇就记录在他所对应的FAT表项中。
d. 在文件系统中新建文件时,如果新建的文件只占用一个簇,为其分配的簇对应的FAT表项将会写入结束标志,如果新建的文件不只占用一个簇,则在其所占用的每个簇对应的FAT表项中写入为其分配的下一簇的簇号。在最后一个簇对应的FAT表项中写入结束标志。
e. 新建目录时,只为其分配一个簇的空间,对应的FAT表项中写入结束标志,当目录增大超出一个簇的时候,将会在空闲空间中继续为其分配一个簇,并在FAT表中为其建立FAT表链以描述他所占用的簇。
f. 根目录紧跟在FAT表之后,保存在2号FAT表项,”FFFFFFF0”
当寻找一个文件时,先在目录项中找到文件的起始簇,然后到FAT表中找到起始簇位置,就能依次知道下一簇的位置了。


根目录

目录所在的扇区,都是以32字节划分为一个单位,每个单位称为一个目录项,每个目录项的长度都是32字节。


参考文章

  1. SD卡中FAT32文件格式快速入门(图文详细介绍)

你可能感兴趣的:(linux文件系统)