




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
剖析FAT文件系统结构 2009-10-27 21:25:49标签:剖析FAT文件系统结构 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。/775253/217665 本人写文章,难免有错误的地方请大家谅解,如果有错误请大家指教,现在开始正题,大家都知道FAT文件系统不是什么新鲜的文件系统了,目前用此文件系统的设备很多,比如现在的数码相机、数码摄像机、手机等等设备都以FAT作为它管理文件的一个系统,因为FAT文件系统的结构相对简单,容易理解,FAT文件系统进行了数次的升级,从FAT12进化到FAT16直到FAT的最后版本FAT32(还有一个是exFAT因为和FAT还是略有不同,在此就不多做介绍),今天就以FAT最新的FAT32文件系统作为本将的开始,网上类似讲解FAT文件系统的文章也很多,我就讲解最重要的一些知识,也是我的一些经验,希望能对各位爱好数据恢复的朋友们有所帮助。了解一个文件系统就要从最基础的开始,我们先从FAT32的DBR(DOS BOOT RECORD,DOS引导记录)讲起,DBR分为两部分:DOS引导程序和BPB(BIOS参数块)。其中DOS引导程序完成DOS系统文件(IO.SYS,MSDOS.SYS)的定位与装载,而BPB用来描述本DOS分区的磁盘信息,如比较重要的参数有“每个扇区的字节数”、“每个簇有多少个扇区”、“保留扇区”、“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表数量:表示该分区上的FAT表共有几个副本,一般情况都为2(注:在重建DBR的情况下可以灵活调配)。5、扇区总数:表示该分区的扇区数量。6、每FAT扇区数:就是单个FAT表的扇区总数,通过次参数配合上面的参数就能够定位到根目录也就是Root,公式为:保留扇区+FAT表数量*每FAT扇区数=根目录的地址。上述就是最为重要的几个BPB参数的解释,下面是DBR的截图,让大家看一下:WinHEX 扇区截图WinHex模板解释出来的BPB参数 在此提供一个WinHex调用的模板,大家可以把-之间的代码复制到一个记事本中,保存为以TPL为扩展名的文件,然后存放到WinHex的目录中即可。 -template FAT32 引导扇区/ Template by Stefan Fleischmann/ X-Ways Software Technology AG/ 适用于 FAT32 格式逻辑驱动器的 0 扇区。description BIOS 参数块 (BPB) 和其它applies_to disksector-alignedrequires 0x0290requires 0x5246 41 54 33 32 / =FAT32 在偏移地址 52requires 0x1FE 55 AAbeginread-only hex 3 JMP 指令char8OEMsectionBIOS 参数块uint16字节 / 扇区uint8扇区 / 簇uint16保留扇区uint8FAT 计数uint16根项目 (未使用)uint16扇区 (小容量)hex 1媒介描述 (16 进制)uint16扇区 / FAT (小容量)uint16扇区 / 磁轨uint16头uint32隐藏扇区uint32扇区 (大容量)sectionFAT32 扇区uint32扇区 / FATuint16延迟uint16版本uint32根目录第 1 簇uint16FSInfo 扇区uint16备份引导扇区read-only hex 12 (保留)endsectionhex 1BIOS 驱动 (16 进制, HD=8x)read-only uint8 (未使用)hex 1扩展启动特征 (29h)uint32卷序列号 (10 进制)move -4hex 4卷序列号 (16 进制)char11 卷标签char8文件系统endsectiongoto0x1FEread-only hex 2 特征 (55 AA)end-至此上述所说的就是BPB参数极为重要的参数,下面讲述一下FAT表的作用。了解FAT表之前我们先了解一下如何定位到FAT表,我们如何才能知道FAT的具体位置呢,上面已经讲到FAT表的位置就在“保留扇区”中记录,他里面记录了FAT1表的位置;为什么要有FAT表呢,有两大用途,我分别做阐述:用途一:我们在使用文件系统的过程中,会有“建立”、“删除”、“移动”等动作,就会造成文件系统中有大量的不连续的簇的产生,如果存储文件的时候文件系统只把文件存储到连续的簇中就会造成非常之严重的空间浪费,所以FAT表的产生的原因之一简单的说就是把那些不连续的簇在存储文件的时候通过FAT表项的指针做指引来把不同地方的空间给它“集合”起来,在读取文件的时候通过这个链表(FAT表的指向)就很轻松的把文件读取出来了。通途二:如果对NTFS有一定了解的网友们就会知道,NTFS里面有一个元文件名为“$Bitmap”他就是记录整个文件系统的空间使用情况的,在FAT文件系统中FAT表也就充当了空间利用率的作用。在来说一下FAT表内的特征,FAT32文件系统中的FAT表是4个字节描述一个簇,也就是一个32位的指针。他的特征一般为:“F8 FF FF 0F FF FF FF FF”第一个字节F8是同BPB参数中的“媒介描述符”而定,他们是一样的,在修复文件系统的时候上面的特征作为辅助判断,请文友朋友们自由发挥。下面讲述一下FAT32文件系统中的根目录,相比FAT32文件系统之前的版本的FAT文件系统来说FAT32文件系统在根目录的设计上的确优于它的前身(FAT12 & FAT16),不知道大家注意到没有,在使用FAT32之前的FAT的版本文件系统的时候会遇到这样的问题,就是在根目录存储过多的文件的时候提示“无法创建文件夹”等消息提示,如图:此时我们看磁盘属性的剩余空间还是有很多的,如图:可用空间还有247MB,为什么存不下了呢,答案因为FAT32之前的版本的根目录没有在数据区中,而是在格式化的时候就跟定死了,所以导致有剩余空间但是在根目录建立过多的文件或者文件夹的时候报错,如果以8.3标准命名的文件夹或者文件在存储到根目录的时候可以存放共有512个目录项,如果在格式化的时候输入了分区的卷标,那就存放不了512个目录项了,可存放的目录项就是511个,如果在已经存有512个目录项的文件系统上想添加分区的卷标就不行了,因为卷标也是占用目录项的位置的,还有一种可能就是在根目录如果超过8.3命名规则,那么存放在根目录的目录项就更少了,因为有长名的存在,而FAT32是把根目录移植到了数据区中,就好比管理一个文件一样去管理根目录,这样就解决了根目录不能存放太多文件的限制了,因为通过FAT表的指向,开辟一个新的空间存放其余的根目录项。目录项模板截图在此提供一个WinHex调用的模板,大家可以把-之间的代码复制到一个记事本中,保存为以TPL为扩展名的文件,然后存放到WinHex的目录中即可。-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 diskmultiplebeginchar8Filename (blank-padded)char3Extension (blank-padded)hex 10F = LFN entrymove-1binaryAttributes ( - -a-dir-vol-s-h-r)goto0hex 100 = Never used, E5 = Erasedmove11read-only byte (reserved)move1DOSDateTimeCreation date & timemove-5byteCr. time refinement in 10-ms unitsmove2DOSDateTimeAccess date (no time!)move2DOSDateTimeUpdate date & timemove-6uint16(FAT 32) High word of cluster #move4uint1616-bit cluster #uint32File size (zero for a directory)end-至此大概的FAT32文件系统结构就先告一段落,说明一下,如果想了解DBR、FAT表项、目录项的其它字节的含义请参照相关数据恢复的书籍,因为之前我已经说过我就是把我的一些经验讲出来,如果不明白大家可以一起探讨,最后我再说一下如何创建FAT32文件系统的结构(就是格式化Format),在此我就提供一个非常重要的一个公式,是我自己着么出来的如何计算单个FAT表大小的一个公式,在做格式化FAT32文件系统的软件的时候很有用公式如下:单个FAT表大小=(分区大小每
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园应急知识培训课件作文
- 债务规划面试题及答案
- 教师业务考试题及答案
- 云南b类面试题及答案
- 砌砖工程试题及答案
- 幼儿英语考试试题及答案
- 硫酸镁考试题及答案
- 2025年广州航海学院招聘事业编制人员考试笔试试题(含答案)
- 校内安全知识培训课件
- 2025年佛山市高明区教师发展中心选聘考试笔试试题(含答案)
- DB37-T 4687-2023 社会心理服务中心(站、室)建设运行规范
- 激光打印机维修培训资料全
- 耳鼻喉科患者的心理护理与干预策略
- 30道医院妇产科医生岗位高频面试问题附考察点及参考回答
- 设计单位工程质量检查报告(合格证明书)
- 机动车驾驶员培训备案表
- (完整word版)中国银行交易流水明细清单模版
- 怎么点评施工方案好坏
- 公司客户信息管理制度
- 食品安全责任保险课件
- 塑胶模具类中英文对照专业术语
评论
0/150
提交评论