根目录的管理
FAT32文件系统对于根目录下文件的管理,统一在数据区中的根目录区为这些文件创建目录项,并由FAT表为文件的内容分配簇存放数据。而根目录区的首簇由格式化程序指派,并把指派的簇号记录在DBR的BPB中。如果根目录下文件数目过多,这些文件的目录项在根目录区的首簇存放不下,FAT表就会为根目录分配新的簇来存放根目录下文件及文件夹的目录项。
具体看一个例子,目前在G盘根目录下有一个文件“setup.txt”,我们看FAT32文件系统如何管理这个文件。
第1步 定位DBR。
通过分区表定位到G盘的开始位置,在63号扇区,这个扇区就是G盘的DBR扇区。
第2步 定位根目录首簇。
访问DBR扇区的BPB,通过“DBR保留扇区数”、“每FAT扇区数”两个参数的值便可计算出根目录首簇的开始扇区,具体算法在前面讲解过。
第3步 定位目录项。
找到根目录首簇后,通过文件名定位到目标文件的目录项,其目录项如图4-302中的阴影部分所示。
图4-302 目标文件的目录项
该目录项的模板如图4-303所示。
图4-303 目录项的模板
从模板中可以看到文件开始簇号为3,文件大小为315字节。
第4步 定位FAT。
因为文件开始于3号簇,其下一簇的簇号在FAT表中3号FAT项里存放着,所以通过DBR的BPB参数“DBR保留扇区数”定位FAT1的开始扇区,并跳转过去,找到3号FAT项,其数值如图4-304所示。
图4-304 FAT1的开始扇区
图4-304中阴影部分就是FAT1的3号FAT项,数值为“0F FF FF FF”,说明是个结束标志,所以文件“setup.txt”只占用1个簇,就是3号簇。
第5步 定位数据区。
确定了文件存放在数据区的3号簇,最后就该去3号簇查看数据了。因为数据区中的簇从2开始编号,所以3号簇所对应的扇区号计算方法如下:
DBR保留扇区数 + 2×每FAT扇区数 +(3−2)× 每簇扇区数
计算出结果后跳转过去,内容如图4-305所示。
图4-305 文件的内容
因为文件大小是315字节,所以从3号簇的第一个字节起,连续的315字节就是文件“setup.txt”的内容,即图4-305中的阴影部分。
以上就是FAT32文件系统根目录的管理。
子目录的管理
FAT32的根目录、子目录及数据都是放在数据区的。下面根据一个实际的例子分析子目录的管理方法,同时也能看出数据区中的根目录、子目录及其数据的结构和关系。
在一分区根目录下有一个文件夹“123”,如图4-306所示。
图4-306 根目录下的“123”文件夹
文件夹“123”内有一文件夹“456”,如图4-307所示。
图4-307 文件夹“123”下的“456”文件夹
文件夹“456”内又有一文件夹“789”,如图4-308所示。
图4-308 文件夹“456”下的“789”文件夹
文件夹“789”内有一文本文件“abc.txt”,如图4-309所示。
图4-309 文件夹“789”下的“abc.txt”文件
打开文本文件“abc.txt”,其内容如图4-310所示。
图4-310 文本文件“abc.txt”的内容
下面来分析这一系列目录及其数据的结构。
首先通过WinHex在该分区根目下查看文件夹“123”的目录项,如图4-311所示。
图4-311 文件夹“123”的目录项
该目录项各字节的含义见其模板,如图4-312所示。
图4-312 文件夹“123”目录项的模板
从中可看出文件夹“123”的起始簇号为3,在WinHex中跳转到3号簇,其内容如图4-313所示。
图4-313 3号簇的内容
可以看出该簇中有三个目录项,前两个分别是“.”目录和“..”目录的目录项,第三个为文件夹“456”的目录项,其内容见模板,如图4-314所示。
图4-314 文件夹“456”目录项的模板
从中可看出文件夹“456”的起始簇号为4,在WinHex中跳转到4号簇,其内容如图4-315所示。
图4-315 4号簇的内容
可以看出该簇中有三个目录项,前两个分别是“.”目录和“..”目录的目录项,第三个为文件夹“789”的目录项,其内容见模板,如图4-316所示。
图4-316 文件夹“789”目录项的模板
从中可看出文件夹“789”的起始簇号为5,在WinHex中跳转到5号簇,其内容如图4-317所示。
图4-317 5号簇的内容
可以看出该簇中有三个目录项,前两个分别是“.”目录和“..”目录的目录项,第三个为文本文件“abc.txt”的目录项,其内容见模板,如图4-318所示。
图4-318 文本文件“abc.txt”目录项的模板
从中可看出文本文件“abc.txt”的起始簇号为6,文件大小为40字节,在WinHex中跳转到6号簇,其内容如图4-319所示。
图4-319 6号簇的内容
该簇中的前40字节也就是文本文件“abc.txt”的内容了。
通过以上分析,相信大家已经对根目录、子目录及其数据内容的结构有了清楚的了解。