3.5 FAT32 数据区_根目录、子目录、目录项
作用: FAT32 的“数据区域”是真正用来存储用户数据的区域。 数据区域紧跟在FAT 区域之后,数据区域被划分为一个个的簇,所有的簇从2号开始编码,也就是说2号簇就是数据区域的起始位置。
一、根目录
虽然原则上FAT32 允许根目录位于数据区中的任何位置,但是“通常情况”下位于“2号簇”。也就是说 根目录位于数据区域的起始位置。
1、 定位根目录
首先要明确: 在FAT文件系统中,寻找第一簇(即2号簇)的位置是也就是寻找数据区的开始位置,并不是件简单的事情,因为它不是位于文件系统的起始处,而是位于数据区域的起始处。数据区域之前有 保留区域和FAT 区域, 这两个区域都不使用FAT 表进行管理。因此,数据区以前的 区域只能使用 扇区地址(逻辑扇区地址),而无法使用簇地址。所以说,并不是每个逻辑卷地址都相应的有一个“逻辑文件系统地(内部以簇为单位)址”,FAT 系统就是个特别的例子。
注意: NTFS 文件系统与 FAT 文件系统不同,NTFS 文件系统的第一簇总是起始于文件系统的第一个扇区。
>> 计算数据区的起始处:
可以通过保留区的DBR引导扇区的参数来计算:
· 引导扇区的偏移0x0E~0x0F 字节处得到保留扇区数
· 偏移0x10 字节处得到FAT 表的个数
· 从偏移0x24~0x27字节处得到每个FAT 表的大小扇区数
· 偏移0x0D 处得出每簇大小扇区数
公式:保留扇区数+FAT 表的个数*FAT 表的大小扇区数+((该簇簇号-2)*每簇扇区数) = 某簇起始扇区号
>> 根目录分析
作用: 根目录在文件系统创建时即已被创建,其目的就是存储“子目录”(也称为文件夹)或 文件的“目录项”。
目录项大小:每个目录项的大小为 “32个字节”。
· 在文件系统刚刚创建,还没有存储任何数据时,根目录下没有任何内容,文件系统只是为根目录分配了一个簇的空间(通常为2号簇),将结束标记0x0FFFFFFF 写入该簇对应的FAT 表项,表示该簇已经被分配使用。这时候根目录分配的空间没有任何内容。 但是如果创建文件系统时指定卷标,则会在根目录下为其建立一个卷标目录项,该目录项占用“根目录”中的第一个目录项位置。
· 在根目录下新建目录或文件时,其实就是在为根目录分配的簇中为其建立目录项,如果需要则在未分配空间为其分配空间已存储数据内容。
>> 目录项的基本特性
不管是根目录下还是子目录下的目录项,都有以下基本特性:
>> 为文件或子目录分配的第一个簇的簇号,记录在它的目录项中,其他后续簇则由“FAT 表”中的“FAT表链”进行跟踪。
>> 目录项中除了记录 文件或子目录的第一个簇(起始簇号)外,还记录它的名字、大小(子目录没有大小)、时间等元数据信息。
>> 每个子目录或文件除了有一个短文件名目录项外,还会有一个长文件名目录项。
>> 短文件名目录项固定占用32个字节,长文件名目录项根据需要占用1个或若干个32字节。
>> 对于同一个子目录或文件,它的长文件名目录放在他的短文件名目录项之前,如果长文件名目录项占用多个32字节,则按照倒序存放于短文件名目录项之前。
二、 子目录
定义: 所有除根目录以外的 目录度都称为 子目录, 不管是根目录的子目录,还是根目录的子目录的子目录。
过程: 子目录是在存储过程中根据用户需要建立的,随着目录建立的同时,会在为其分配的簇空间开始处建立“两个目录项”来描述 “子目录本身和其父目录” 的信息,以使父子目录间建立起联系。
FAT32文件系统中,在创建文件系统时就创建了根目录并且分配存储空间之外,其他所有目录只有在使用过程中根据需要建立。新建一个子目录时,在其父目录建立目录项,在空闲空间中为其分配一个簇,并对簇清零操作,同时将这个簇号记录在它的目录项。
创建子目录时在为其父目录分配的簇中建立目录项,目录项描述了该子目录的起始簇号; 在为子目录建立目录项的同时,也在为子目录分配的簇中,使用前两个目录项描述他与父目录的关系。
提示: 子目录的目录项中并不描述子目录的大小,要想知道子目录所占用的空间大小,可以从他的目录项中获得他的起始簇号并跟踪它的FAT 表链直到遇到结束标记为止。
总结:
目录项: 32字节长(短名称目录项32字节,长名称目录项1个或多个32字节;长名称目录项在前;若是长名称目录项长度为多个32字节则倒序排列,依然位于读文件名目录项前) 、 每个目录或者文件(文件夹)都有与其对应的目录项 、 作用(记住目录或文件夹的起始簇号)以及一些文件大小,文件名 等信息
根目录:
· 位置:FAT32 文件系统的根目录位于 文件系统的数据区的第一簇(2号簇,也就是数据区的起始簇)
· 根目录创建时期: 当创建文件系统过程中,自动创建根目录(若当下根目录中未创建文件以及目录,则2号簇所对应的FAT 表项值为 0x0fffffff结束标记)
· 根目录作用: 存储根文件系统中子目录以及文件的目录项。
· 文件系统中除去根目录以外,其他目录是子目录;目录与在其下创建的目录为父子关系;
根目录创建子目录或文件的意义: 在根目录中创建文件或子目录实质含义是在为根目录分配的簇中创建子目录/文件的目录项。
根目录创建子目录过程: 除根目录是是在创建文件系统时便创建完成外,(其他非根目录的均为)子目录,所有的子目录都是要在使用时才创建,子目录创建时同时在其为根目录中分配的簇中创建了子目录的目录项,并且同时在为该子目录分配的簇中创建目录项(使用前两个目录项描述该子目录与其父目录之间的关系);在子目录中创建下一级子目录或文件时,在为该子目录分配的簇中创建目录项,便需从“第三个目录项” 向后排序了。
转自http://blog.163.com/ourhappines@126/blog/static/121363154201311834528623/
加载中,请稍候......