ExFAT文件系统对于根目录下文件的管理,统一在数据区中的根目录区为这些文件创建目录项,并由簇位图文件为用户文件的内容分配簇存放数据。而根目录区的首簇由格式化程序指派,并把指派的簇号记录在DBR的BPB中。如果根目录下文件数目过多,这些文件的目录项在根目录区的首簇存放不下,簇位图文件就会为根目录分配新的簇来存放根目录下文件及文件夹的目录项,并在FAT表中记录簇链。
具体看一个例子。目前在G盘根目录下有一个文件“ExFAT.txt”,我们看ExFAT文件系统如何管理这个文件。
第1步 定位DBR。
通过分区表定位到G盘的开始位置在63号扇区,这个扇区就是G盘的DBR扇区。
第2步 定位根目录首簇。
访问DBR扇区的BPB,BPB的参数如图4-540所示。
通过“首簇起始扇区号”、“根目录首簇号”和“每簇扇区数N”三个参数的值便可计算出根目录首簇的开始扇区。具体算法:首簇起始扇区号+(根目录首簇号-2)×每簇扇区数。以图4-540中的数值为例,计算结果为4224,所以根目录开始于4224扇区。
第3步 定位目录项。
找到根目录首簇后,通过文件名定位到目标文件的目录项,该文件有三个目录项,其目录项如图4-541中的阴影部分所示。
该目录项的模板如图4-542所示。
从模板中可以看到文件开始簇号为5,文件大小为37字节。
第4步 定位FAT。
因为文件开始于5号簇,我们可以看看5号簇对应的5号FAT项内的数据。通过DBR的BPB参数“FAT起始扇区号”定位FAT的开始扇区,并跳转过去,找到5号FAT项,其数值如图4-543所示。
图4-453中阴影部分就是FAT表的5号FAT项,数值为“00 00 00 00”,但这并不能说明5号簇是个空簇,因为ExFAT对连续存放的文件并不记录簇链。
第5步 定位簇位图文件。
簇位图文件是ExFAT文件系统中真正管理簇的分配和使用情况的文件,我们去看看这个文件。该文件一般都存放在数据区第一个簇中,也就是2号簇,可以根据BPB参数的“首簇起始扇区号”定位到该文件的第一个扇区,目前在4096,跳转到该扇区,如图4-544所示。
该文件目前只有一个字节“0F”,换算为二进制等于“00001111”,也就说明2、3、4、5这四个簇是使用的,其中2、3、4簇分别被簇位图文件、大写字符文件和根目录占用,5号簇就是被“ExFAT.txt”文件所占的。
第6步 定位数据区。
确定了文件存放在数据区的5号簇,最后就该去5号簇查看数据了。因为数据区中的簇从2开始编号,所以5号簇所对应的扇区号计算方法如下:
首簇起始扇区号+(5-2)×每簇扇区数
计算出结果后跳转过去,内容如图4-545所示。
因为文件大小是37字节,所以从5号簇的第一个字节起,连续的37字节就是文件“ExFAT.txt”的内容,即图4-545中的阴影部分。
以上就是ExFAT文件系统根目录的管理。
ExFAT的根目录、子目录及数据都是放在数据区的。下面根据一个实际的例子分析子目录的管理方法,同时也能看出数据区中的根目录、子目录及其数据的结构和关系。
在一分区根目录下有一个文件夹“123”,如图4-546所示。
文件夹“123”内有一文件夹“456”,如图4-547所示。
文件夹“456”内有一文本文件“sjhf.txt”,如图4-548所示。
打开文本文件“sjhf.txt”,其内容如图4-549所示。
下面来分析这一系列目录及其数据的结构。
首先通过WinHex在该分区根目下查看文件夹“123”的目录项,如图4-550所示。
该目录项各字节的含义见其模板,如图4-551所示。
从中可看出文件夹“123”的属性二进制数为“00010000”,表示子目录,起始簇号为5,文件大小为32 768字节。这与传统FAT不一样,传统FAT中文件夹的目录项是没有大小的,ExFAT中对文件夹的目录项也描述大小,其实就是其下级目录项所占用的空间,也就是1个簇的大小。当前分区每簇64扇区,换算为字节数就是32 768。
在WinHex中跳转到5号簇,其内容如图4-552所示。
可以看出该簇中有三个目录项,也就是文件夹“456”的目录项,其内容见模板,如图4-553所示。
从模板中可看出文件夹“456”的起始簇号为6,在WinHex中跳转到6号簇,其内容如图4-554所示。
可以看出该簇中有三个目录项,也就是文本文件“sjhf.txt”的目录项,其内容见模板,如图4-555所示。
从中可看出文本文件“sjhf.txt”的属性二进制数为“00100000”,表示存档,起始簇号为7,文件大小为50字节。在WinHex中跳转到7号簇,其内容如图4-556所示。
该簇中的前50字节也就是文本文件“sjhf.txt”的内容了。
通过以上分析,相信大家已经对根目录、子目录及其数据内容的结构有了清楚的了解。