FAT32的初步理解以及简单的文件删除和恢复

FAT32的初步理解以及简单的文件删除和恢复

1 FAT32文件系统FAT文件系统主要有FAT12、FAT16和FAT32几种形式,其中FAT32是FAT发展的最后形式。这里FAT32的意思是簇的编址采用32bit宽度的数,所以FAT32文件系统最多能寻址 2 ** 32 = 4294967296 个簇,其他FAT变种类似。

FAT32文件系统由DBR及保留扇区,FAT1,FAT2和数据区组成:

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

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

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

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

用WinHew打开一个FAT32格式的磁盘,其DBR如下,对内容进行简要的表明。

跳转指令将呈现执行流程跳转到引导程序处;

OEM ID由厂商指定,这里是MSDOS5.0;

BPB记录文件系统相关的重要信息,由BPB和拓展BPB组成,具体参数解释如下:

字节偏移

字段长度(字节)

对应取值

名称和定义

0x0B

2

0x0200

扇区字节数

0x0D

1

0x20

每簇扇区数

0x0E

2

0x080E

保留扇区数

0x10

1

0x02

FAT数

0x11

2

0x0000

根目录项数

0x13

2

0x0000

小扇区数

0x15

1

0xF8

媒体描述符

0x16

2

0x0000

每FAT扇区数(FAT32为0)

0x18

2

0x003F

每道扇区数

0x1A

2

0x00FF

磁头数

0x1C

4

0x00000060

隐藏扇区数

0x20

4

0x03BFFF0A

总扇区数

0x24

4

0x00003BF9

每FAT扇区数

0x28

2

0x0000

扩展标志

0x2A

2

0x0000

文件系统版本

0x2C

4

0x00000002

根目录簇号

0x30

2

0x0001

文件系统信息扇区号

0x34

2

0x0006

备份引导扇区

0x36

12

12字节均为0x00

保留

拓展BPB参数如下:

字节偏移

字段长度(字节)

对应取值

名称和定义

0x40

1

0x00

物理驱动器号

0x41

1 0

x00

每保留

0x42

1

0x29

扩展引导标签

0x43

4

0x5168C523

分区序号

0x47

11

“NO NAME”

卷标

0x52

8

“FAT32”

系统ID

FAT32文件系统在DBR的保留扇区中还安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个空闲簇的簇号,该扇区一般在分区的1号扇区,也就是紧跟着DBR后的一个扇区,其内容如下图(其中字节值为零的,都没有被使用):

在DBR之后,就是FAT,文件分配表。FAT一般有两个,一个正常使用称为FAT1,另一个是备份称为FAT2,FAT1和FAT2的内容完全一样。

FAT是一组与数据簇号对应的列表,表项的编号从0开始,但是编号0表示FAT介质类型,编号1表示FAT文件系统错误标志,所以实际存储从2号开始。大文件占用多个簇的话,则FAT项纪录下一个FAT项编号,依次类推直到最后以“0F FF FF FF“表示文件末尾。文件至少占用一个簇,所以新建文件的时候,即使只写入1字节的数据,它也会占用一个簇的空间。

而且,从之前DBR偏移0xB的两字节和00x0D的一字节可以看出,一簇为32扇区,每扇区512字节,一簇大小为16KB。

下面对FAT1的部分内容进行一下标记(图上只标注了0-7项,后面的FAT表项依此类推):

从上图中,可以看到第4-7项存储了一个文件。第4项的存储内容说明下一个簇号在第5项,后面一样,直到第7项表明该文件存储结束。每一项对应一个簇,该文件就占用了4簇。

FAT2和FAT1内容完全一样,不单独拿出分析。

最后是数据区,是真正存储文件内容的区域。数据区紧跟在FAT2之后,被划分成一个个的簇。所有的簇从2开始进行编号,也就是说,2号簇的起始位置就是数据区的起始位置。在WinHex中,根目录起始扇区号即为数据区起始扇区号。

在数据区中,目录所在的扇区,都以32字节划分为一个单位,每个单位称为一个目录项。根目录由若干个目录项组成,一个目录项占用32个字节,可以是长文件名目录项、文件目录项、子目录项等。这些目录项用来存储文件名、文件属性、最后修改时间、最后保存时间等信息。

对短文件目录项(文件名<=8字节且后缀名<=3字节),其字节有如下定义:

字节偏移

字段长度(字节)

定义

0x0

8

文件名

0x8

3

拓展名

0xB

1

属性字节:00000000:读写;00000001:只读;00000010:隐藏;00000100:系统;00001000:卷标;00010000:子目录;00100000:归档

0xC

1

系统保留

0xD

1

创建文件的10毫秒位

0xE

2

文件创建时间

0x10

2

文件创建日期

0x12

2

文件最后访问时间

0x14

2

文件起始簇号的高16位

0x16

2

文件最近修改时间

0x18

2

文件最近修改日期

0x1A

2

文件起始簇号的低16位

0x1C

4

文件长度

对长文件目录项(文件名>8字节或后缀名>3字节),其字节有如下定义:

字节偏移

字段长度(字节)

定义

0x0

1

属性字节位意义:7:保留未用;6:表示长文件最后的目录项;5:保留未用;4:顺序号数值;3:顺序号数值;2:子顺序号数值;1:顺序号数值;0:顺序号数值

0x1

10

长文件名Unicode码1

0xB

1

长文件名目录标志

0xC

1

系统保留

0xD

1

校验值

0xE

12

长文件名Unicode码2

0x1A

2

文件起始簇号

0x1C

4

长文件名Unicode码3

当需要找文件真正存储内容的时候,就可以根据上面目录项的起始簇号去寻找文件内容。而每个文件所占用的簇信息,又在FAT表项中进行了标识,再按照FAT的信息进行查找,即可找到相应文件的所有内容。

比较方便的是,WinHex还提供了簇号和扇区的转换,可以根据簇号来跳转到相应的扇区。

2 文件删除及恢复现在Windows10操作系统的磁盘已经不使用FAT格式,这里选择U盘来做FAT的实验。

在WinHex工具栏,选择“工具”—“打开磁盘”。

在磁盘选择窗口,选择接入电脑的U盘并打开。

打开U盘之后,WinHex显示如下,可以看到U盘中的文件。

2.1 自动恢复先在U盘中创建一个文件—“计算机取证05171759.txt”,用于删除。

新建文件内容是我的名字。

确认文件内容之后,就可以把文件删除。删除之后,要在WinHex中更新磁盘。在WinHex工具栏,选择“专业工具”—“进行磁盘快照”。

在弹出的对话框中,勾选“更新快照”。

更新磁盘之后,可以在Winhex找到删除的文件。

右键单击,选择“恢复/复制”,导出到新文件。

将恢复文件的位置选择为U盘。

在U盘中查看文件内容,看到名字和内容都和原来一样。

2.2 手动恢复这里仍然可以在U盘中找到对应的文件。

但文件内容是乱码的,在编码页面选择GBK编码,就可以看到正确的文件内容。

之后选中文件区域,右键选择“复制选块”—“至新文件”。

将文件命名“恢复文件.txt”,另存到U盘中。再到U盘中验证文件内容,看到是跟原来文件内容是一样的。

这里是一个比较小的文件,存储内容在一簇的空间内即可存储,手工恢复比较简单。如果是想要对比较大的文件,进行恢复,经常会发现它的簇并不是完全连续的,而是呈现出片段状。手工恢复的话,就要找到这些簇,并把这些簇拼接到一起输出为文件,比较麻烦。但使用Winhex的话可以借助它的功能实现自动恢复,省去手动的麻烦。

然后,如果看这篇文章对FAT32还有不理解,或者有地方写的不明白,可以参照下面两篇文章,多篇文章参考起来,来回阅读的效果会好一点。

参考:

[1] FAT32文件系统格式详解

[2] FAT32文件系统结构

相关数据

宜口袋行方审核中能放款吗?多久能放款
beat365网页版登录官网

宜口袋行方审核中能放款吗?多久能放款

📅 06-29 👁️ 4531
为什么有的人睁眼睡觉
365提款一周都没到

为什么有的人睁眼睡觉

📅 08-10 👁️ 7807