FAT32文件系统详解

简介:

 硬盘是用来存储数据的,为了使用和管理方便,这些数据以文件的形式存储在硬盘上。任何操作系统都有自己的文件管理系统,不同的文件系统又有各自不同的逻辑组织方式。例如:常见的文件系统有FAT,NTFS,EXT,UFS,HFS+等等。作者后面的文章会一一讲到,下面就来学习一下基于Windows的FAT32文件系统。

FAT32文件系统由DBR及其保留扇区,FAT1,FAT2和DATA四个部分组成,其机构如下图:

wKioL1LLT7nxfthkAAArvJ7ngmE694.jpg

这些结构是在分区被格式化时创建出来的,含义解释如下:

DBR及其保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有一些保留扇区。

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

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

DATA:DATA也就是数据区,是FAT32文件系统的主要区域,其中包含目录区域。


一、分析FAT32文件系统的DBR

   FAT32文件系统的DBR有5部分组成,分别为跳转指令,OEM代号,BPB,引导程序和结束标志。如下图是一个完整的FAT32文件系统的DBR。

wKiom1LLUHGgknhHAAGkc-UgO5Q090.jpg

跳转指令:本身占2字节它将程序执行流程跳转到引导程序处。

OEM代号:这部分占8字节,其内容由创建该文件系统的OEM厂商具体安排。

BPB:FAT32的BPB从DBR的第12个字节开始,占用79字节,记录了有关该文件系统的重要信息,各参数解释如下表:

wKioL1LLUOyRCx8vAAB2zWiNedE813.jpg

wKiom1LLe2DwevFzAACqRwFUOUY487.jpg

FAT32文件系统在DBR的保留扇区中安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个空闲簇的簇号,该扇区一般在分区的1号扇区,也就是紧跟着DBR后的一个扇区,其内如下:

wKiom1LLUZOQTvOJAAF1cveUbmw760.jpg

各参数解释如下:

wKioL1LLUayjqXzeAAB_VWKMAuo360.jpg

引导程序代码:FAT32的DBR引导程序占用420字节,对于没有安装操作系统的分区来说这段程序是没有用处的。

结束标志:DBR的结束标志与MBR,EBR的结束标志相同,为“55 AA”。


二、分析FAT32文件系统的FAT表

FAT1的内容如下:

由于分区格式化之后没有写入太多的数据,所以FAT项很少。

wKiom1LLUnaTOkgJAACCopPnP58159.jpg

FAT表结构及作用

1、FAT32文件一般有两份FAT,他们由格式化程序在对分区进行格式化时创建,FAT1是主,FAT2是备份。

2、FAT1跟在DBR之后,其具体地址由DBR的BPB参数中指定,FAT2跟在FAT1的后面。

3、FAT表由FAT表项构成,我们把FAT表项简称FAT项,每个FAT项占用4字节。

4、每个FAT项都有一个固定的编号,这个编号从0开始。

5、FAT表项的前两个FAT项为文件系统保留使用,0号FAT为介质类型,1号FAT为文件系统错误标志。

6、分区的数据区中每个簇都会映射到FAT表中的唯一一个FAT项,因为0号FAT和1号FAT被系统占用,用户的数据从2号FAT开始记录。

7、如果某个文件占用很多个簇,则第一个FAT项记录下一个FAT项的编号(既簇号),如果这个文件结束了,则用“0F FF FF FF”表示。

8、分区格式化后,用户文件以簇为单位存放在数据区中,一个文件至少占用一个簇。

9、FAT的主要作用是标明分区存储的介质以及簇的使用情况。


定位FAT绝对位置的方法如下:

1、首先从MBR的分区表中得知分区的起始扇区,偏移到此扇区。

2、从DBR的BPB中得知DBR的保留扇区数,FAT表的个数,FAT表的大小。

3、因此FAT1=分区起始扇区+DBR保留扇区,FAT2=分区起始扇区+DBR保留扇区+FAT1。


三、分析FAT32文件系统的数据区

数据区的位置在FAT2的后面,具体定位方式如下;

1、通过MBR中的分区表信息得知分区的起始位置。

2、通过分区中DBR得知DBR的保留扇区数以及FAT表的大小,FAT表的个数。

3、通过上面的信息就可以找到数据区的起始位置,根目录=数据区的起始扇区+(簇大小*2)。


数据区的类容主要由三部分组成:根目录,子目录和文件内容。在数据区中是以“簇”为单位进行存储的,2号簇被分配给根目录使用。

根目录的定位方式为:根目录=分区起始扇区+DBR保留扇区+(FAT表*2)+(簇大小*2)

wKiom1LLWxKSM0PwAACNLrmNTVc897.jpg

FAT32文件系统中,分区根目录下的文件和目录都放在根目录区中,子目录中的文件和目录都放在子目录区中,并且没每32个字节为一个目录项,每个目录项纪录着一个目录或文件(也可能是多个目录项记录一个文件或目录),如上图所示就是一个目录项。

在FAT32文件系统中,目录项可以分为四类:卷标目录项、“.”和“..”目录项、短文件名目录项、长文件名目录项。

卷标目录项:卷标就是分区的名字,可以在格式化分区时创建,也可以随意修改,长度为11字节。

“.”和“..”目录项:“.”表示当前目录,“..”表示上一层目录。这两个目录项多存在子目录中。

短文件名目录项:所谓短文件名既文件名的“8.3”格式,此格式支持主文件名不能超过8字节,扩展名不能超过3字节。短文件名目录始终存放在一个目录项中。

短文件名的各参数解释如下:

wKioL1LLZaryRrZbAAEU013v_ho125.jpg

其中关于时间的表达方式如下:

wKioL1LLaIKhSRWBAABJ-d63uVU365.jpg

关于日期的表达方式如下:

wKiom1LLaM7AfCeHAABJ0UIbWsc692.jpg

长文件名目录项:由于短文件名“8.3”的格式远远不能满足现实中的需求,所以就出现了长文件名,长文件名其实就是将文件名进行分段,分成若干个短文件名进行存储。

wKiom1LLdkTjJJoeAAChWw_qpQo810.jpg

长文件名在进行分段存储的时候,遵循一下三个处理原则:

1、系统取长文件名的前6个字符加上“~1”形成短文件名,其扩展名不变;

2、如果已存在这个名字的文件,则符号“~”后的数字自动增加;

3、如果文件名内存在windows非法的字符,则以下划线“_”代替;

4、长文件名目录项采用倒叙的方式进行记录,如上图。

如下:是长文件名目录的各参数的解释

wKioL1LLbN3DTdvXAABXaWgL6jM246.jpg

wKioL1LLbKOxoS_oAABFm_xFUtY021.jpg


FAT32文件系统总结

上述的内容已经简单的介绍了FAT32文件系统,下面根据定位某个文件来详细的了解FAT32文件系统是如何存储数据的。

1、根据磁盘0号扇区MBR的分区表得知分区的起始位置,既DBR;

2、根据DBR中BPB记录的信息,得知DBR保留扇区数,FAT的大小,FAT的个数;

3、根据上述信息可以算出数据的起始位置,数据区=分区起始扇区+DBR保留扇区+(FAT表*2);

4、计算根目录所在的绝对位置,根目录=数据区的起始扇区+(簇大小*2);

5、根据根目录中的目录项信息得知,根目录下的文件以及子目录等所对应的簇;

6、根据文件的簇号就可以找到文件内容的绝对扇区;

7、如果一个文件占用多个簇,则需要根据FAT表项得知下一个数据簇的簇号。

7、如果根目录下的目录项是子目录的话,则根据子目录中的文件目录项得知文件内容的簇号;

8、如果子目录中还有子目录的话,则根据这种方法一直找下去即可。


至此FAT32文件系统就简绍完毕了,希望对那些喜欢数据底层的朋友们有所帮助。




本文转自yun5277 51CTO博客,原文链接:http://blog.51cto.com/dengqi/1349327,如需转载请自行联系原作者

相关文章
|
存储 小程序 Unix
《操作系统真象还原》——0.28 MBR、EBR、DBR和OBR各是什么
MBR和EBR是分区工具创建维护的,不属于操作系统管理的范围,因此操作系统不可以往里面写东西,注意这里所说的是“不可以”,其实操作系统是有能力读写任何地址的,只是如果这样做的话会破坏“系统控制权接力赛”所使用的数据,下次开机后就无法启动了。
4077 0
|
存储 数据安全/隐私保护 Windows
======第六章文件管理======(2)
6.5.2 直接文件和哈希文件 直接文件
231 0
|
4月前
|
数据采集 编解码 JavaScript
视觉爬虫开发:通过Puppeteer截图+CV定位动态元素坐标
本文是关于“视觉爬虫开发”的速查指南,重点介绍如何使用 Puppeteer 和 OpenCV 在小红书上实现视频截图与评论采集。内容包括代理 IP 接入、Cookie 与 User-Agent 设置、动态元素坐标获取及评论采集的代码示例。提供功能点列表、常用代码片段、配置建议和快速测试方式,帮助开发者快速掌握核心技术和实践方法。通过 Puppeteer 截图结合 OpenCV 模板匹配,精准定位动态元素坐标,提升爬虫稳定性与效率。
115 2
视觉爬虫开发:通过Puppeteer截图+CV定位动态元素坐标
|
消息中间件 缓存 监控
优化微服务架构中的数据库访问:策略与最佳实践
在微服务架构中,数据库访问的效率直接影响到系统的性能和可扩展性。本文探讨了优化微服务架构中数据库访问的策略与最佳实践,包括数据分片、缓存策略、异步处理和服务间通信优化。通过具体的技术方案和实例分析,提供了一系列实用的建议,以帮助开发团队提升微服务系统的响应速度和稳定性。
|
10月前
|
弹性计算 并行计算 双11
阿里云服务器多少钱一年?2024年11月最新价格表,爆款配置清单
2024年双十一期间,阿里云推出多款优惠云服务器配置。最便宜的轻量应用服务器2核2G、3M带宽、50GB ESSD云盘,仅需36元一年;ECS云服务器2核2G、3M带宽、40GB ESSD Entry云盘,99元一年;ECS u1实例2核4G、5M带宽、80GB ESSD Entry盘,199元一年。更多配置详见官网。
960 0
|
开发工具 git
成功解决:Svnion not found. installat
这篇文章分享了作者在使用VSCode进行SVN版本控制时遇到的一个问题,即SVN插件提示找不到`svn.exe`的问题。原因是在安装SVN时没有选择客户端工具,导致没有`svn.exe`文件。文章提供了解决方案,包括重新安装SVN时选择客户端工具,并在VSCode的`setting.json`文件中配置SVN的路径。
成功解决:Svnion not found. installat
|
消息中间件 缓存 NoSQL
个人项目中技术落地的基础入门(2)
个人项目中技术落地的基础入门
188 7
|
存储 数据采集 数据安全/隐私保护
使用STM32F103读取TF卡并模拟U盘:使用标准库实现
通过以上步骤,你可以实现用STM32F103将TF卡内容变成U盘进行读取。这种功能在数据采集、便携式存储设备等应用中非常有用。如果你有更多的需求,可以进一步扩展此项目,例如添加文件管理功能、加密存储等。希望这篇博客能帮到你,如果有任何问题,欢迎在评论区留言讨论!
960 1
|
Linux Shell C语言
linux下configure,make(makefile),cmake命令详解-makefile和CMakeList
linux下configure,make(makefile),cmake命令详解-makefile和CMakeList
|
JavaScript Java 关系型数据库
Springboot+vue的作业管理系统(有报告),Javaee项目,springboot vue前后端分离项目。
Springboot+vue的作业管理系统(有报告),Javaee项目,springboot vue前后端分离项目。

热门文章

最新文章