剖析fat文件系统结构

上传人:xzh****18 文档编号:34631147 上传时间:2018-02-26 格式:DOC 页数:14 大小:270KB
返回 下载 相关 举报
剖析fat文件系统结构_第1页
第1页 / 共14页
剖析fat文件系统结构_第2页
第2页 / 共14页
剖析fat文件系统结构_第3页
第3页 / 共14页
剖析fat文件系统结构_第4页
第4页 / 共14页
剖析fat文件系统结构_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《剖析fat文件系统结构》由会员分享,可在线阅读,更多相关《剖析fat文件系统结构(14页珍藏版)》请在金锄头文库上搜索。

1、剖析 FAT 文件系统结构 2009-10-27 21:25:49标签: 剖析 FAT 文件系统结构 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http:/ 本人写文章,难免有错误的地方请大家谅解,如果有错误请大家指教,现在开始正题,大家都知道 FAT 文件系统不是什么新鲜的文件系统了,目前用此文件系统的设备很多,比如现在的数码相机、数码摄像机、手机等等设备都以 FAT 作为它管理文件的一个系统,因为 FAT 文件系统的结构相对简单,容易理解,FAT 文件系统进行了数次的升级,从 FAT12进化到 FAT16 直到 FAT 的最后版

2、本 FAT32(还有一个是 exFAT 因为和 FAT 还是略有不同,在此就不多做介绍),今天就以 FAT 最新的 FAT32 文件系统作为本将的开始,网上类似讲解 FAT 文件系统的文章也很多,我就讲解最重要的一些知识,也是我的一些经验,希望能对各位爱好数据恢复的朋友们有所帮助。了解一个文件系统就要从最基础的开始,我们先从 FAT32 的 DBR(DOS BOOT RECORD,DOS 引导记录)讲起,DBR 分为两部分:DOS 引导程序和 BPB(BIOS 参数块)。其中 DOS 引导程序完成 DOS 系统文件(IO.SYS,MSDOS.SYS)的定位与装载,而 BPB 用来描述本 DOS

3、 分区的磁盘信息,如比较重要的参数有“每个扇区的字节数”、“每个簇有多少个扇区”、“保留扇区”、“FAT 表数量”、“扇区总数”、“每 FAT 扇区数”,现在就从上述列出的几个关键的参数做详细的讲述:1、每个扇区的字节数:就是一个扇区共有多少个字节来组成,一般情况都是 512 个字节为一个扇区,16 进制表示为 200H。2、每个簇有多少个扇区:就是一个簇包含了多少个扇区,他的表示都是 2 的次方(512 字节1、2、4、8、16、32、64 扇区),比如 8 个扇区构成一个簇,它的簇大小就是 8,16 进制表示为 8H。3、保留扇区:就是 DBR 到 FAT 表之间共有多少个扇区。4、FAT

4、 表数量:表示该分区上的 FAT 表共有几个副本,一般情况都为 2(注:在重建 DBR 的情况下可以灵活调配)。5、扇区总数:表示该分区的扇区数量。6、每 FAT 扇区数:就是单个 FAT 表的扇区总数,通过次参数配合上面的参数就能够定位到根目录也就是Root,公式为:保留扇区+FAT 表数量*每 FAT 扇区数=根目录的地址。上述就是最为重要的几个 BPB 参数的解释,下面是 DBR 的截图,让大家看一下: WinHEX 扇区截图WinHex 模板解释出来的 BPB 参数在此提供一个 WinHex 调用的模板,大家可以把-之间的代码复制到一个记事本中,保存为以 TPL 为扩展名的文件,然后存

5、放到 WinHex 的目录中即可。 -template FAT32 引导扇区/ Template by Stefan Fleischmann/ X-Ways Software Technology AG/ 适用于 FAT32 格式逻辑驱动器的 0 扇区。description BIOS 参数块 (BPB) 和其它applies_to disksector-alignedrequires 0x02 90requires 0x52 46 41 54 33 32 / =FAT32 在偏移地址 52requires 0x1FE 55 AAbeginread-only hex 3 JMP 指令char8

6、 OEMsection BIOS 参数块uint16 字节 / 扇区uint8 扇区 / 簇uint16 保留扇区uint8 FAT 计数uint16 根项目 (未使用)uint16 扇区 (小容量)hex 1 媒介描述 (16 进制)uint16 扇区 / FAT (小容量)uint16 扇区 / 磁轨uint16 头uint32 隐藏扇区uint32 扇区 (大容量)section FAT32 扇区uint32 扇区 / FATuint16 延迟uint16 版本uint32 根目录第 1 簇uint16 FSInfo 扇区uint16 备份引导扇区read-only hex 12 (保留

7、)endsectionhex 1 BIOS 驱动 (16 进制, HD=8x)read-only uint8 (未使用)hex 1 扩展启动特征 (29h)uint32 卷序列号 (10 进制)move -4hex 4 卷序列号 (16 进制)char11 卷标签char8 文件系统endsectiongoto 0x1FEread-only hex 2 特征 (55 AA)end-至此上述所说的就是 BPB 参数极为重要的参数,下面讲述一下 FAT 表的作用。了解 FAT 表之前我们先了解一下如何定位到 FAT 表,我们如何才能知道 FAT 的具体位置呢,上面已经讲到 FAT 表的位置就在“保

8、留扇区”中记录,他里面记录了 FAT1 表的位置;为什么要有 FAT 表呢,有两大用途,我分别做阐述:用途一:我们在使用文件系统的过程中,会有“建立”、“删除”、“移动”等动作,就会造成文件系统中有大量的不连续的簇的产生,如果存储文件的时候文件系统只把文件存储到连续的簇中就会造成非常之严重的空间浪费,所以 FAT 表的产生的原因之一简单的说就是把那些不连续的簇在存储文件的时候通过 FAT 表项的指针做指引来把不同地方的空间给它“集合”起来,在读取文件的时候通过这个链表(FAT 表的指向)就很轻松的把文件读取出来了。通途二:如果对 NTFS 有一定了解的网友们就会知道,NTFS 里面有一个元文件

9、名为“$Bitmap”他就是记录整个文件系统的空间使用情况的,在 FAT 文件系统中 FAT 表也就充当了空间利用率的作用。在来说一下 FAT 表内的特征,FAT32 文件系统中的 FAT 表是 4 个字节描述一个簇,也就是一个 32 位的指针。他的特征一般为:“F8 FF FF 0F FF FF FF FF”第一个字节 F8 是同 BPB 参数中的“媒介描述符”而定,他们是一样的,在修复文件系统的时候上面的特征作为辅助判断,请文友朋友们自由发挥。下面讲述一下 FAT32 文件系统中的根目录,相比 FAT32 文件系统之前的版本的 FAT 文件系统来说 FAT32 文件系统在根目录的设计上的确

10、优于它的前身(FAT12 & FAT16),不知道大家注意到没有,在使用 FAT32 之前的 FAT 的版本文件系统的时候会遇到这样的问题,就是在根目录存储过多的文件的时候提示“无法创建文件夹”等消息提示,如图:此时我们看磁盘属性的剩余空间还是有很多的,如图:可用空间还有 247MB,为什么存不下了呢,答案因为 FAT32 之前的版本的根目录没有在数据区中,而是在格式化的时候就跟定死了,所以导致有剩余空间但是在根目录建立过多的文件或者文件夹的时候报错,如果以 8.3 标准命名的文件夹或者文件在存储到根目录的时候可以存放共有 512 个目录项,如果在格式化的时候输入了分区的卷标,那就存放不了 5

11、12 个目录项了,可存放的目录项就是 511 个,如果在已经存有 512 个目录项的文件系统上想添加分区的卷标就不行了,因为卷标也是占用目录项的位置的,还有一种可能就是在根目录如果超过 8.3 命名规则,那么存放在根目录的目录项就更少了,因为有长名的存在,而 FAT32 是把根目录移植到了数据区中,就好比管理一个文件一样去管理根目录,这样就解决了根目录不能存放太多文件的限制了,因为通过 FAT 表的指向,开辟一个新的空间存放其余的根目录项。 目录项模板截图在此提供一个 WinHex 调用的模板,大家可以把-之间的代码复制到一个记事本中,保存为以 TPL 为扩展名的文件,然后存放到 WinHex

12、 的目录中即可。-template FAT Directory Entry/ Template by Stefan Fleischmann/ X-Ways Software Technology AG/ To be applied to a sector of a FAT16 or FAT32 drive/ that contains a directory. Not suitable for LFN/ (long filename) directory entries.description Normal/short entry formatapplies_to diskmultiplebe

13、ginchar8 Filename (blank-padded)char3 Extension (blank-padded)hex 1 0F = LFN entrymove -1binary Attributes ( - -a-dir-vol-s-h-r)goto 0hex 1 00 = Never used, E5 = Erasedmove 11read-only byte (reserved)move 1DOSDateTime Creation date & timemove -5byte Cr. time refinement in 10-ms unitsmove 2DOSDateTim

14、e Access date (no time!)move 2DOSDateTime Update date & timemove -6uint16 (FAT 32) High word of cluster #move 4uint16 16-bit cluster #uint32 File size (zero for a directory)end-至此大概的 FAT32 文件系统结构就先告一段落,说明一下,如果想了解 DBR、FAT 表项、目录项的其它字节的含义请参照相关数据恢复的书籍,因为之前我已经说过我就是把我的一些经验讲出来,如果不明白大家可以一起探讨,最后我再说一下如何创建 FAT32 文件系统的结构(就是格式化 Format),在此我就提供一个非常重要的一个公式,是我自己着么出来的如何计算单个 FAT 表大小的一个公式,在做格式化 FAT32 文件系统的软件的时候很有用公式如下:单个 FAT 表大小=(分区大小每扇区字节数保留扇区)簇大小2)4每扇区字节数)(分区大小每扇区字节数)%簇大小)建立完毕结构以后,剩余的使用与管理工作就交给管理文件系统的操作系统来完成了,至此我的讲解到此结束,最后发布一个我做的格式化脚本的录像。联系电话

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号