FAT,英文为File Allocation Table,文档分配表。先要记住几个概念:
        扇区:一般扇区为512个字节。
        簇:由若干个扇区组成,是存取数据的最小单位。如果簇大小为16K,文件大小为1字节,那也要用一个簇来存,而且该簇不用再拿来他用。

FAT文件系统就是专门管理这些簇的。一个文件可能占据一个或者多个簇,按正确的顺序去读取这些簇,就可以获取这个文件的内容了。

一、FAT32基本结构

FAT32基本结构依次为:DBR及其保留扇区、FAT表1、FAT表2、根目录和数据区。

1、DBR及其保留扇区

DBR是文件系统的引导扇区,位于第0号扇区,它记录着文件系统的起始位置、大小、FAT表个数及大小等相关信息。后面跟着由若干个扇区组成的保留扇区,保留扇区的大小记录在DBR中。

0x00~0x02:3字节,跳转指令。
0x03~0x0A:8字节,文件系统标志和版本号,这里为MSDOS5.0。
0x0B~0x0C:2字节,每扇区字节数,0x0200=512字节
0x0D~0x0D:1字节,每簇扇区数,0x08个。
0x0E~0x0F:2字节,保留扇区数,0x0C22=3106个。
0x10~0x10:1字节,FAT表个数,0x02。
0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数;
0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。
0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质。
0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。
0x18~0x19:2字节,每磁道扇区数,只对于“特殊形状”(由磁头和柱面分割为若干磁道)的存储介质有效,0x003F=63。
0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效,0x00FF=255。
0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数,0x0004A800=305152又出现了呢,与MBR中地址0x1C6开始的4个字节数值相等。
0x20~0x23:4字节,文件系统总扇区数,0x00E83800=15218688
0x24~0x27:4字节,每个FAT表占用扇区数,0x000039EF=14831
0x28~0x29:2字节,标记,此域FAT32 特有。
0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。
0x2C~0x2F:4字节,根目录所在第一个簇的簇号,0x02。(虽然在FAT32文件系统下,根目录可以存放在数据区的任何位置,但是通常情况下还是起始于2号簇)
0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号0x01,该扇区为操作系统提供关于空簇总数及下一可用簇的信息。
0x32~0x33:2字节,备份引导扇区的位置。备份引导扇区总是位于文件系统的6号扇区。
0x34~0x3F:12字节,用于以后FAT 扩展使用。
0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已。
0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已 。
0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
0x43~0x46:4字节,卷序列号。通常为一个随机值。
0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷标,会保存在此。
0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。
0x5A~0x1FD:共410字节,引导代码。
0x1FE~0x1FF:签名标志“55 AA”。

2、FSINFO扇区

FAT32在保留区中增加了一个FSINFO扇区,用以记录文件系统中空闲簇的数量以及下一可用簇的簇号等信息,以供操作系统作为参考。FSINFO信息扇区一般位于文件系统的1号扇区,结构非常简单。

0x200~0x203:4个字节,扩展引导标志“52 52  61  41”。
0x204~0x3E3:480个字节,未使用,全部置0。
0x3E4~0x3E7:4个字节,FSINFO签名“72  72  41  61”。
0x3E8~0x3EB:4个字节,文件系统的空簇数,FF  FF  FF  FF,这个值感觉有问题,格式化SD卡新建一个小于4K的文件,此处的值变成1C  F6  FE,所以上面的值应该为0x1FF6FF,猜测可能是由于格式化之后就会将此处置FF,新建文件后才会恢复。
0x3EC~0x3EF:4个字节,下一可用簇号(0x00000002)。
0x3F0~0x3FD:14个字节,未使用。
0x3FE~0x3FF:2个字节,“55 AA”标志。 
温馨提示:通常情况下,文件系统的2号扇区结尾也会被设置“55 AA”标志。6号扇区也会有一个引导扇区的备份,相应的7号扇区应该是一个备份FSINFO信息扇区,8号扇区可以看做是2号扇区的备份。

2、FAT1:FAT的含义是文件分配表,FAT32一般有两份FAT,FAT1是第一份,也是主FAT。

FAT2:FAT2是FAT32的第二份文件分配表,也是FAT1的备份,跟在FAT1的后面。

文件系统用簇作为基本单位来存放文件的数据。对于小文件,只需要用到一个簇来保存文件的所有数据。对于大文件,就需要分配多个簇,存放同一个文件的簇不一定连续,这就需要把簇的前后关系用FAT表来存放表示。

与FAT16类似,FAT32用32bit来描述一个簇。第0、1、2、3个字节表示第0个簇,第4、5、6、7个字节表示第1个簇,第8、9、10、11个字节表示第2个簇…就这样,每个簇都有4个和它对应的字节,这4个字节里面存放的数据就是文件中下一个簇大小数据所在的簇号。
        比如要读new.txt文件,从根目录中找到了它,读它的根目录信息知道它的第一个簇的簇号是5,于是把第5号簇的数据送出去,在FAT表中5号簇是第20、21、22、23字节来表示的,于是去读第20、21、22、23字节,得到00000007,知道了文件接下来的数据保存在7号簇中,把7号簇的数据送出去,又去读第28、29、30、31字节的数据,得到FFFFFFFF,说明文件到末尾了。

3、根目录和数据区:

根目录就是保存盘中有哪些文件,该文件相关信息的地方。用32字节表示一个对象。当从文件系统中读文件的时候,比如读TEST.txt文件就是先在根目录中找到该文件,然后读它的信息,得到它的起始簇号,接着把起始簇号的数据送出去,然后去FAT表得到接下来数据保存的簇号,把对于数据送出去,一直到结束。

0x00-0x07:文件名,不足8个字节0x20补全(短文件名8.3命名规则)
0x08-0x0A:扩展名
0x0B:文件属性,0x20表示归档
0x0D:创建时间的10毫秒位
0x0E-0x0F:文件创建时间
0x10-0x11:文件创建日期
0x12-0x13:文件最后访问日期
0x14-0x15:文件起始簇号的高16位 0x0000
0x16-0x17:文件最近修改时间
0x18-0x19:文件最近修改日期
0x1A-0x1B:文件起始簇号的低16位 0x0003
0x1C-0x1F:文件的长度,0x2206=8710bytes=8.5K

FAT32文件系统结构分析相关推荐

  1. SD卡FAT32文件系统格式

    一.声明 1.本文来源和主旨 2.本文测试环境 二.SD卡FAT文件系统 1.SD卡FAT32文件系统的整体布局 2.FAT文件系统简介 ① 文件分配表 ② 目录项 三.DBR(DOS BOOT RE ...

  2. 为什么 UEFI 方式启动的 U 盘必须使用 FAT32 文件系统?

    如果你希望更刺激地安装 Windows,那么你需要了解很多 Windows 系统相关的问题. 为什么 UEFI 方式启动的 U 盘必须使用 FAT32 文件系统? 因为 NTFS 是 Windows ...

  3. 快速了解FAT32文件系统

    文章目录 1 快速了解Fat32文件系统 1.1 只读文件系统 1.2 可写文件系统 1.3 Fat32分区结构 1 快速了解Fat32文件系统 1.1 只读文件系统 首先看一下我们的第一个需求,如果 ...

  4. JAVA——构建FAT32文件系统的DBR(DOS引导记录)类

    Maven <dependency><groupId>org.projectlombok</groupId><artifactId>lombok< ...

  5. SD卡移植FAT32文件系统无MBR

    问题:在研究SD卡和FAT32文件系统的时候,发现SD卡有的有MBR,有的没有MBR,这个为什么呢? 分析:MBR是主引导记录,是在给磁盘分区的时候建立的,我们的SD卡没有这个可能就是没有进行过分区操 ...

  6. 【转载】FAT32文件系统详解

    硬盘是用来存储数据的,为了使用和管理方便,这些数据以文件的形式存储在硬盘上.任何操作系统都有自己的文件管理系统,不同的文件系统又有各自不同的逻辑组织方式.例如:常见的文件系统有FAT,NTFS,EXT ...

  7. DSP之解读FAT32文件系统

    FAT 的全称是File Allocation Table(文件分配表系统),FAT 文件系统1982年开始应用于MS- DOS 中. FAT 文件系统主要的优点是它可以被多种操作系统访问,如MS- ...

  8. linux fat32 乱码,FAT32文件系统乱码的研究和分析

    刘宏斌 摘 要 FAT32文件分配表是Windows操作系统磁盘分区格式的一种.采用32位的文件分配表,使其对磁盘的管理能力增强.本文通过文件系统出现乱码对FAT32的文件分配表进行研究和分析 关键词 ...

  9. linux修复fat文件系统,如何修复损坏的FAT32文件系统

    问题描述 我正在为我的笔式驱动器使用FAT32文件系统.它经常有文件/数据损坏. 在Windows中,我使用扫描磁盘实用程序来修复FAT32 /NTFS文件系统.我如何在Ubuntu中做到这一点? 最 ...

最新文章

  1. webpack预览页面配置
  2. linux shell 流程控制(条件if,循环【for,while】,选择【case】语句实例 --转载
  3. php使用redis做缓存,php使用redis做缓存和使用redis保存session
  4. go/git设置及取消代理方法
  5. SAP CRM One Order 根据联系人姓名搜索的实现原理
  6. php mysql 命令行模式_MySQL_MYSQL导入导出sql文件简析,一.MYSQL的命令行模式的设置- phpStudy...
  7. linux申请cache和释放cache,Linux--- 手工释放系统cache
  8. 我是如何在六个月内学会 Python 的?
  9. 远程管理软件Royal TSX for Mac
  10. eagle打开的brd和sch转换为AD打开的原理图和PCB
  11. erstudio安装
  12. 好用的微信群管理软件
  13. 敏捷经验教训, 开发总结!
  14. 清北学堂(2019 4 30 ) part 3
  15. 简单几步实现内网穿透
  16. C语言二维数求矩阵每行的最大值与最小值
  17. 模型预测控制器(MPC)系列: 1.建立车辆横向动力学模型
  18. matlab fourier变换反变换
  19. Excel中VBA编程学习笔记(一)
  20. 技术人攻略访谈三十八-许式伟:十一年逆流顺流,首席架构师到CEO

热门文章

  1. vrep小车避障算法_V-REP 小车建模
  2. mac写python3_跟我读python3文档:004_mac与python3配置
  3. socket什么意思_浅析Redis为什么这么快
  4. linux nacos启动_nacos初体验-踩坑与填坑篇
  5. Python的list中的选取范围
  6. ARZIO让AR应用制作变得更简单
  7. Lucid Sight宣布即将推出“VR云霄飞车之星际之旅”
  8. Oculus不准备出席E3了!这是要搞事情?
  9. 学校APP太难用,码农爸妈们自己做出开源程序,官方却要报警
  10. 芯片短缺加剧,上半年汽车销量逆势上涨的丰田也扛不住了,9月减产40%