几天前博主介绍过MBR格式,那是属于整个磁盘分区及引导管理的系统,从今天开始,我们走进每个分区,去看看每种分区的内在。

今天我们先来看看一种U盘常用的文件系统FAT32,其实FAT32也属于FAT文件系统类型,还有FAT12、FAT16文件系统,但是这两种早已淘汰,已经很少见到了。我们直接来看FAT32文件系统。

我们先使用虚拟磁盘来新建一个磁盘,并用DiskGenius将其格式化为FAT32格式。

本分类用到的所有软件都将上传至博客的网盘

我们先来认识一下FAT23文件系统的结构示意:

FAT32结构示意图

接下来我们慢慢来分析他的结构:

<h2 id="dbr_fenxi"> 一 、DBR分析 </h2>

先来看看DBR的结构:

FAT32DBR

对于DBR各各字节的解释博主直接借用winhex中的模板:

FAT32DBR解析

其中0BH至59H是他的BPB参数字节,对于他们的详细解释博主做了一张表格,帮助大家更换好的认识。

FAT32BPB

其中以亮黄色标出的参数是重要字节。也是博主要详细讲解的字节

这里需要说明的是,由于该文件系统采用了little-endian的字节序,我们在读某参数的具体值时需要按反序读例如winhex显示的01 02 03 0A 0B 我们在读他的值时应当按照0B 0A 03 02 01的顺序来读取。winhex的数据解释器已经帮你做好了这份工作,你可以从数据解释器中读取数据。

  • 每簇扇区数,又称簇大小、块大小,是用来记录每个簇的大小的参数,是FAT32文件系统用来存放文件的最小单位,每个文件所占用的大小一定是簇大小的整数倍。关于簇大小的计算,将在后文讲解。
  • DBR保留扇区数,从DBR(包括)至FAT1(不包括)统称为保留扇区。
  • 隐藏扇区数。该参数与分区无关,记录着从MBR/EBR至该分区DBR的空间,关系着操作系统能否正确识别到该分区。
  • 扇区总数。见文知意,是用来记录该分区大小的参数。该参数占用4个字节。
  • 每FAT表扇区数。用来记录FAT表的大小。FAT32文件系统有两张FAT表。两张表互为备份,大小及内容一样。

其他参数相对固定,博主不再过多解释。不清楚的欢迎提问或自行百度/谷歌

二、FAT表分析

FAT表即文件分配表,FAT表由FAT表项组成,每个表项4个字节。如下图:

FAT表

我们来说说FAT表的特点

  • FAT32文件系统具有两张FAT表,两张表大小内容完全一致,互为备份。
  • FAT1的起始位置由DBR决定,FAT1表起始于在保留扇区后一个扇区。
  • 从第一个表项开始,我们依次将FAT表项编号,从0号开始编号。也就是说第一表项为0号表项,第二表项为1号表项,以此类推。
  • 0号及1号表项为特殊的表项,0号表项一般用来记录该分区的物理介质类型,F8代表介质类型为硬盘。1号表项为肮脏标志,用来表明文件系统被非法卸载或者磁盘表面存在错误。
  • 除0和1号表项外其余所有的表项都对应着数据区的每一个簇,因此FAT32数据区从2号簇开始,意味着数据区第一个簇为2号簇,第二个簇为3号簇以此类推。
  • 在FAT32中一个文件占用至少一个簇,但是当一个文件占用多簇时,就需要FAT表来记录簇链当该文件在该簇未结束时(即为不够存的时),则在该簇所对应的FAT项填入该文件的下一个存储簇号,当在该文件在当前簇存储结束时,则在该簇所对应的FAT项写入结束标志0F FF FF FF 注意字节序为反序。FAT项值所对应的含义如下表:

FAT项值



三、目录分析

3.1、根目录

FAT32文件系统的根目录也是其数据区的起始,前面我们说过FAT32的数据区第一簇为2号簇,也就说明根目录的起始簇就是2号簇,这一点很重要,对于我们定位文件的具体位置很有帮助。

3.2、目录项具体分析

FAT32的目录项分为4种类型:

  • 短文件名目录项
  • 长文件名目录项
  • “.”即当前目录目录项、“..”即父目录目录项
  • 卷标目录项

结合下图,我们来具体分析:

3.2.1、短文件名目录项

  • 如图是一个典型的短文件名目录项:

    ![](https://ws3.sinaimg.cn/large/c2b6f47dgy1fqiwz76x0nj20jq014gle.jpg)
    
    各字节解释如下图:
    
    ![](https://ws4.sinaimg.cn/large/c2b6f47dgy1fqixacx0hbj20dv09z3z0.jpg)
    
    其中需要说明的一点是其开始簇号的记录分为了两块,每块2字节,共4字节。需要注意的是高位在前,低位在后。
    
  • 当短文件名记录项的0BH为00010000B时且文件大小位置为00 00 00 00时次文件记录项纪录的是一个子文件夹。其开始簇号位置记录的是该子文件夹目录所在位置。

3.2.2、长文件名目录项

当一个文件的文件名超过8个字节或拓展名超过3个字节时,系统将自动将其转化为长文件明目录项。在FAT32文件系统中,一个长文件名文件由一个短文件名目录项和若干个长文件名目录项共同记录。如下图:

这个文件的文件名为chang-wen-jian-ming-shi-li-wen-jian.txt
这个文件由4条文件记录记录,最后一条为短文件名记录项,文件名为CHANG-~1为系统自动生成,记录着该文件的大小,创建修改时间和位置等信息,和普通短文件名记录项无异。其余三项均为长文件名记录项,用来记录该文件的具体文件名。记录模板如下:

博主不在过多解释,在具体的恢复过程中,长文件名记录项分析的不多。

3.2.3、"."与".."目录项

其实这两个目录项对于接触过linux文件系统结构,与DOS操作系统的人来说应该很熟悉。“.”代表当前目录,“..”代表上一级目录,这两个目录项通常同时存在于子目录目录项总。

3.2.4、卷标目录项

卷标其实就是该分区的名字,与普通短文件名目录项基本一样,不同点在于卷标目录项不记录起始簇号、大小、创建修改时间等,只记录文件名。

3.3、子目录的管理

FAT32对于子目录的管理很简单,也很高效。上面我们在分析短文件名记录项的时候,我们说过对于子目录的记录,就是通过这样的子目录的记录,来指向子目录的目录项,再通过子目录的记录项来管理该子目录下的文件及目录。同时该子目录下存在“.”“..”记录用来索引当前目录与父目录,以保证子目录的准确记录。


关于FAT32的文件系统的介绍暂时就到这里吧,有不清楚可以留言评论。

<p align="center">本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。</p>

Last modification:May 31st, 2018 at 01:58 pm
If you think my article is useful to you, please feel free to appreciate