FAT32与FAT16的原理基本上是相同的,图4.3.12标出了FAT32分区的基本构成。
| 图4.3.12 Fat32的组织形式 |
| 引导扇区 |
其余保留扇区 |
FAT1 |
FAT2(重复的) |
根文件夹首簇 |
其他文件夹及所有文件 |
剩余扇区 |
| 1扇区 |
31个扇区 |
实际情况取大小 |
同FAT1 |
第2簇 |
|
不足一簇 |
| 保留扇区 |
|
|
┗━━━━━━━━数据区━━━━━━━━┛ |
FAT32在格式化的过程中就根据分区的特点构建好了它的DBR,其中BPB参数是很重要的,可以回过头来看一下表4和表5。首先FAT32保留扇区的数目默认为32个,而不是FAT16的仅仅一个。这样的好处是有助于磁盘DBR指令的长度扩展,而且可以为DBR扇区留有备份空间。上面我们已经提到,构建在FAT32上的win98或win2000、winXP,其操作系统引导代码并非只占一个扇区了。留有多余的保留扇区就可以很好的拓展OS引导代码。在BPB中也记录了DBR扇区的备份扇区编号。备份扇区可以让我们在磁盘遭到意外破坏时恢复DBR。 FAT32的文件分配表的数据结构依然和FAT16相同,所不同的是,FAT32将记录簇链的二进制位数扩展到了32位,故而这种文件系统称为FAT32。32位二进制位的簇链决定了FAT表最大可以寻址2T个簇。这样即使簇的大小为1扇区,理论上仍然能够寻址1TB范围内的分区。但实际中FAT32是不能寻址这样大的空间的,随着分区空间大小的增加,FAT表的记录数会变得臃肿不堪,严重影响系统的性能。所以在实际中通常不格式化超过32GB的FAT32分区。WIN2000及之上的OS已经不直接支持对超过32GB的分区格式化成FAT32,但WIN98依然可以格式化大到127GB的FAT32分区,但这样没必要也不推荐。同时FAT32也有小的限制,FAT32卷必须至少有65527个簇,所以对于小的分区,仍然需要使用FAT16或FAT12。 分区变大时,如果簇很小,文件分配表也随之变大。仍然会有上面的效率问题存在。既要有效地读写大文件,又要最大可能的减少空间的浪费。FAT32同样规定了相应的分区空间对应的簇的大小,见表12:
| 表12 FAT32分区大小与对因簇大小 |
| 分区空间大小 |
每个簇的扇区 |
簇空间大小 |
| <8GB |
8 |
4k |
| >=8GB且<16GB |
16 |
8k |
| >=16GB且<32GB |
32 |
16k |
| >=32GB |
64 |
32k |
簇的取值意义和FAT16类似,不过是位数长了点罢了,比较见表13:
| 表13 FAT各系统记录项的取值含义(16进制) |
| FAT12记录项的取值 |
FAT16记录项的取值 |
FAT32记录项的取值 |
对应簇的表现情况 |
| 000 |
0000 |
00000000 |
未分配的簇 |
| 002~FFF |
0002~FFEF |
00000002~FFFFFFEF |
已分配的簇 |
| FF0~FF6 |
FFF0~FFF6 |
FFFFFFF0~FFFFFFF6 |
系统保留 |
| FF7 |
FFF7 |
FFFFFFF7 |
坏簇 |
| FF8~FFF |
FFF8~FFFF |
FFFFFFF8~FFFFFFFF |
文件结束簇 |
FAT32的另一项重大改革是根目录的文件化,即将根目录等同于普通的文件。这样根目录便没有了FAT16中512个目录项的限制,不够用的时候增加簇链,分配空簇即可。而且,根目录的位置也不再硬性地固定了,可以存储在分区内可寻址的任意簇内,不过通常根目录是最早建立的(格式化就生成了)目录表。所以,我们看到的情况基本上都是根目录首簇占簇区顺序上的第1个簇。在图4.3.12中也是按这种情况制作的画的。 FAT32对簇的编号依然同FAT16。顺序上第1个簇仍然编号为第2簇,通常为根目录所用(这和FAT16是不同的,FAT16的根目录并不占簇区空间,32个扇区的根目录以后才是簇区第1个簇) FAT32的文件寻址方法与FAT16相同,但目录项的各字节参数意义却与FAT16有所不同,一方面它启用了FAT16中的目录项保留字段,同时又完全支持长文件名了。
本新闻共 6页,当前在第 4页 1 2 3 4 5 6 上一篇:FAT文件系统原理(三) 下一篇:Sql数据库MDF数据文件数据库恢复 |