文件系统系列之一:fat文件系统的结构分析

在这个系类的开篇还是先说一下文件系统是什么吧。
首先来介绍一下对u盘的格式化这个操作,格式化不是仅仅删除了所有文件,还为接下的来文件存储约定了一种存放格式,这种约定的文件存放格式就叫做文件系统

再用最通俗的说法简要介绍一下,磁盘如sd卡只能存放0和1这两种二进制状态序列,数字文件本质上也是一串0和1的序列。那么磁盘存储文件怎么存放呢?你说这个简单,把一个个的文件紧挨着排列在磁盘中不就可以了吗。那么,这样放在磁盘中后就是一堆的0和1,怎么区分开哪些是哪个文件的呢?所以我们可以约定一种区分开每个文件的规则,这种规则就是文件系统的雏形了。而且还要解决文件删除后释放空间的利用、如何适应文件的大小变化、快速查找文件树等问题。解决这些问题的方案有多种,这就是不同种类文件系统的区别了。常见的文件系统有:Flash上常用的YAFFS、JFFS2u盘,sd卡常用的FAT,exFATlinux中默认的文件系统Ext2,Ext3,Ext4windows中默认的NTFS等。

本文先从最基本的SD卡上的文件系统说起,在有了本文的基础后本系列会逐渐深入linux的VFS的各个细节。

SD卡中最小的操作单元是扇区,一个扇区512字节,也就是说最小的分配空间的单位是512字节。
一个典型的SD卡的结构如下图,分为第一个MBR扇区(包含分区表),一个FAT32分区和一个FAT16分区。当然一个SD卡也可以只有一个分区,同时也可以省略MBR分区。

MBR和GPT

图中可以看到第一个扇区叫做MBR。主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导代码,这段代码用于从SD卡启动操作系统。如果SD卡仅用于存储歌曲等,这段代码就是没有意义的。
MBR中还包含GPT,这个GPT就很重要了,全称叫做GUID磁盘分区表(GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。
具体的定义如下表:


一个MBR扇区的实例如下图:

重点分析一下其中的分区表项:

FAT32文件系统

下面针对第一个FAT32分区进行介绍,FAT文件系统将硬盘分为MBR区、DBR区、FAT区、FDT区、DATA区等5个区域,下面分别介绍一下。

在介绍这5个概念前,项引入一下簇的概念,后文会用奥。FAT文件系统觉得扇区的512个字节还是太小,不便于管理,于是引入了簇(cluster)的概念。一个簇是2^n个扇区。

MBR

主引导记录(MBR,Main Boot Record),上文介绍过了。

DBR

DBR(Dos Boot Record)分区引导记录,是每个FAT分区的第一个扇区。有些只有一个分区的SD卡,磁盘第一个扇区也可以是DBR扇区。
DBR扇区中存储了当前FAT文件系统的绝大部分信息,如FAT表个数,FAT表起始扇区号,根目录的起始簇号等等。

FAT表

FAT表是FAT文件系统在磁盘上划分出来的一块区域,用于指示一个文件的各个部分存放在何处。其中一个FAT表项对应DATA区的一个簇。一个文件FAT表项中填写的下一个FAT表项的地址,这样的一个链表就能指示出了整个文件存储的所有区域。

如上图示例,FAT表中有两条簇链,红色的起始簇号为0,而0号FAT单元中存放的下一个簇号是1,则去1号FAT单元中寻找下一个。则红色簇链依次为0->1->2->3->6->8->end。蓝色簇链依次为4->5->9->12->13->end。

FDT

FDT(File Directory Table)表即为文件目录表,也称为根目录区或ROOT区。用格式化命令(FORMAT)对硬盘(或逻辑盘)进行格式化的时候,就已经为整个硬盘建立了一个根目录FDT。FDT位于第二个FAT表之后,只有当FAT表不能定位文件在硬盘中的位置时,FAT才需和FDT配合以便能准确定位文件的位置。文件系统中的概念比较多,如果混乱了,可以对照文章开头第一张图的橙色区域仔细研究。橙色区域就是一个典型FAT32文件系统的结构,在大部分只有一个分区的SD卡中,这也是真个卡的扇区结构,比较重要在贴一次。

FDT中存储的就是一个个的文件目录项了,目录项包含文件、文件夹。文件目录项中存储的是文件名,文件起始簇号,文件长度等基本信息,文件具体内容在DATA区。
文件目录项的具体定义如下:


上面的文件名目录项仅支持8.3的文件名,即文件名8个字节,后缀3个字节。为了摆脱这中限制,增加了长文件名目录项,定义如下:

DATA区

数据区就是实际存储数据的空间了,有了FAT、FDT的索引,文章开头的文件删除后释放空间的利用、如何适应文件的大小变化、快速查找文件树的问题就被解决了。

猜你喜欢

转载自blog.csdn.net/RadianceBlau/article/details/79371562