一、硬盘存储结构
硬盘总体存储图:
采用希捷硬盘120G,WinHex查看,主引导记录MBR如下:
硬盘分区表,64字节,分四个分区,每个分区占16位。
扩展分区,就像加入了一个U盘,第一个扇区512字节,为分区引导记录DBR,还有其他。
二、FAT文件存储基本原理
FAT表就是一个簇号的索引。当目录或者文件建立后,目录表中会有一个起始的簇号,这时就对应FAT表的位置,1个簇有很多扇区,这样将大的空间映射为小的簇号来管理。
根据目录表的起始簇号,查FAT表,直到找到标记FF FF FF 0F时,说明文件已经完全找到。
三、根目录文件存储
以4G容量的U盘为例,U盘的名字都写在U盘里,以文件的形式来管理。U盘DBR引导扇区(占一个扇区512字节)、保留扇区、文件分配表FAT1、FAT2、根目录表。差不多是相邻的。
1、基本原理
引导扇区的0EH处是保留扇区数a,aX扇区字节数,定位到FAT1;// FAT1挨着保留扇区
FAT1的偏移+引导扇区的24H处的FAT占用扇区处,定位到FAT2;// FAT2挨着FAT1
根目录位置= FAT2结束位置+(起始簇号-2)X每簇扇区数; //起始簇号一般为2,起始簇号在引导扇区2CH处
注意:FAT中,对应0号簇的单元常常是:F8FFFF0F,对应1号簇值为:FFFFFFFF或FFFFFF0F
2、文件存储
找到根目录项后,短文件采用32个字节的8.3文件格式存储目录,长文件会将文件名分割,再连续存储它,长文件最后一个目录项,是存将长文件变换成短文件的目录。
目录项的0BH处字节是0F,代表是长文件存储,
其0H处的字节,后5位代表项目编号,从01、02开始,第6位为1,则说明为最后一项。
目录及文件存储:
文件存储对应的结束标记:FF FF FF 0F
U盘新建一个文件夹是,根目录会多一个32字节的目录数据结构,同时写FAT表,其所占用的簇号,再分配相应的簇。这时,所分配的簇,又会多两个目录项,父目录和当前目录(各32字节)。
3、数据分析
四、总结
1、存储方式:前面索引块,后面目录信息,通过起始块号找到索引区,然后一块一块数据读出,即可得到全部数据。
2、目录路径时,在windef定义了#define MAX_PATH 260 是全路径最长长度。
3、多出两个目录项,参考第5点时,其目录项存储结构有问题。
4、字符数目,存储存不下时,第一个目录结构标识后面还有,然后依次读取。
5、关于目录结构的变长字符,可以插入'\n'来定位其字符串,可参看超级玛丽源码。
参考:1.1、2、FAT文件系统原理-数据恢复
1.1 FAT下长文件名字