FAT文件系统详解(二)

前序

上一篇文章主要讨论了硬盘的构造、分区表的含义、每个分区中的划分,虽然是指的FAT16文件系统,其实,也同样适用于FAT32文件系统,因为FAT32是兼容FAT16的,FAT16和FAT32到底差别在哪里?
第一,FAT表表示一个簇号的差异:FAT16用2个字节(16bits),FAT32用4个字节(32bits),因此FAT32能够表示更多的簇号。
第二,FAT32分区中并不单独存在FDT目录表区,而是把目录的表示也划分到来数据区。
本篇文章主要讨论FAT32文件系统。

一、扩展分区表。

上节中我们知道,在MBR扇区中,有64字节可以用来表示主分区表,那么要想把一块硬盘划分更多的分区的话,就需要有扩展分区,第1个扩展分区也需要从MBR中的64个字节中占用16个字节来表示扩展分区,现在一个硬盘分了一个主分区和2个扩展分区,我们再看MBR分区表:
在这里插入图片描述
此时到“第1个扩展分区表的扇区”也就是626625扇区,我们会看到:
在这里插入图片描述
注意,第1个扩展分区的起始扇区(MBR扇区)为63扇区,是相对于626625这个扇区,在硬盘中绝对的扇区位置为:626625+63 = 626688,接下来的一个条目描述的是第2个扩展分区表的位置,也是相对于626625这个扇区而言的,我们到626625+417792=1044417扇区,可以看到:
在这里插入图片描述
第2个扩展分区的起始位置也是63扇区,是相对于1044417扇区而言的,下一项分区项全为0,说明,扩展分区已经结束。

从上面我们可以看出,包含有主分区、扩展分区的硬盘,划分的结构为:
在这里插入图片描述
可以看出,扩展分区表,形成一个单项链表的结构,这样只要硬盘足够大,盘符足够多,就可以进行任意多的分区。

二、FAT32分区各个段的划分。

一个FAT32分区中,包含有以下几个段:
在这里插入图片描述
(1)DBR段也是占第1个扇区:
在这里插入图片描述
(2)FAT1和FAT2是簇表,与FAT16表示的意义是相同的,但是FAT16使用4个字节表示一个簇:
在这里插入图片描述
(3)与FAT16相比,FAT32分区并没有FDT表段,但是怎么描述第1个目录项呢?
在MBR的BPB参数中,我们可以看出2CH-2FH指示的就是第1个目录项,也就是根目录的簇位置。

三、目录是怎么存放的?

(1)目录存放的位置。
主分区的DBR扇区的数据为:
在这里插入图片描述
所以说根目录在本扇区的数据区的第2簇。

(2)长文件名的存放。

在这个磁盘创建一个名字为12345678abcdefg.txt文件:
在这里插入图片描述
然后到本分区的第2簇:
在这里插入图片描述
短文件名与FAT16相同都占16个字节,8个字节表示文件名,3个字节表示扩展名,但是其他的字节表示的有差异(图片来源网络):
在这里插入图片描述
其中文件起始簇需要用4个字节表示,14H的2字节是高2字节,1AH是低2字节,这4字节一起组成4字节32位的簇号。

紧挨着短文件名的上方,我们看到是长文件名,长文件名也是用16个字节表示,含义:
在这里插入图片描述
其中,偏移00H代表的是长文件名的第几项,其中各个位的含义:
在这里插入图片描述
bit7、bit5置0;bit6如果是1代表长文件名项结束,bit4-bit0代表长文件名的顺序项。
因此,12345678abcdefg.txt文件的长文件名占了2项。
每个长文件名项可以有26个字节填写文件名,但是必须用UNICODE码,表示,一个UNICODE码占用2个字节,所以最大可以存13个UNICODE编码。

(3)子目录怎么表示?
再在根目录下新建一个child的子目录:
在这里插入图片描述
可以看到2簇的目录项的改变:
在这里插入图片描述
可以看到子目录也是需要16个字节1个目录项来描述的,只是大小为0,在child子目录下又创建来一个child_12345678abcd.txt文件,我们到9簇看一下:
在这里插入图片描述
在这里插入图片描述
可以看出,文件的数据存放在10簇,到10簇正是我们存放的数据,
在这里插入图片描述
等等,目录项在9簇存放,数据区在10簇,那么说child的目录里面只能用1个簇来表示能存放多少个目录项吗?
答:并不是这样的,如果是这样,还不如用FAT16的FDT表。

四、格式化和删除文件发生来什么?

(1)根目录下的文件被删除。
不在演示删除前后发生的变化,只是总结一下:
(i)短文件名的占的目录项第1个字节被改写成E5H。
(ii)长文件名占的目录项第1个字节也被改写成E5H。
(iii)数据存放的高2个字节的簇号位置被清0,此时此刻,对于大文件恢复起来就不容易来,低2个字节的簇号不变,因为文件的大小比较大才能占到高2字节的簇号,所以不演示了。
文件目录项的变化:
在这里插入图片描述
(iv)占用的FAT表被清0。
(v)数据区不变。

(2)子目录被删除。
(i)短文件名的占的目录项第1个字节被改写成E5H。
(ii)长文件名占的目录项第1个字节也被改写成E5H。
(iii)子目录的中的文件:短文件名和长文件名的第1字节被改写为E5。
(iv)子目录的中的文件的起始簇号的高2字节也被清0,此时此刻,子目录也不容易恢复。

(2)格式化分区。
(i)FAT表被清零。
(ii)DBR被重写,对应的根目录位置被清除。
(iii)根目录所在的簇中的目录项被清除。
(iv)子目录以及数据区保持不变。

五、其他一些重要问题。

(1)有了长文件名后,系统会不会把一个长文件名目录项当作一个真实的目录项?
答:肯定是不会的,目录项偏移为0BH的字节,如果低4位全为1,那么就认为此目录项不合法,长文件名的目录项正好把这4位全部置1,所以系统不好“误认为”。

(2)系统怎么知道一个短文件名目录项有长目录项?长目录项与短目录项对应的时候,怎么保证没有对应错误?
答:系统找到短目录项后,会自动的向挨着它的地方进行搜索,上面我们知道每个长目录向的0DH偏移的地址是一个校验值,找到一个长目录项后,会进行校验,如果校验通过,那么它就是短目录项对应的长目录项。

(3)一个文件夹的大小为0,如果存在与其同名的文件,系统怎么区分是文件夹还是文件?
答:依然是通过短目录项的0BH偏移的字节的值来判断的,如果bit4为1则代表的是一个文件夹。

(4)上面例子可以看到,目录项的短文件名都是以大写的方式存储,那么系统怎么判断文件名中是否有小写?
答:系统读取目录项的时候不区分大小写,只区分大写,如果大写和小写的字母是一样的,那么系统就认为是同名文件,会提示报错,认为他们是同名。
在这里插入图片描述
(5)存储的时候既然把小写也认为成了大写,那么系统怎么区分用户写人的字母是大写还是小写呢?
答:分两种情况:
(i)文件名或扩展名都是纯大写或者纯小写。此时根据目录项的0C字节判断。
在这里插入图片描述
在这里插入图片描述
所以,小写+小写值为18H,小写+大写值为08H,大写+小写值为10H,大写+大写值为00H。

(ii)文件名或扩展名混用大小写。此时,不会文件名是否超过8个字节,都直接增加长文件名项,在长文件名存储的时候就有大小写区分来。
在这里插入图片描述
在这里插入图片描述

六、核心思想总结。

总结一下FAT32与FAT16的差异:
(1)FAT32用4个字节表示簇号索引。
(2)分区中不存在FDT区。
(3)目录项也存放在数据区。
(4)删除操作,会根目录和子目录中的簇的高2字节被清零。
(5)其他与FAT16差异很小。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值