1、FAT 文件系统分析报告实现平台:PC 硬盘 40G,操作系统 WinXP,测试软件 WinHex参考资料:数据恢复技术 戴士剑,陈永红编著大容量硬盘修复技术及数据管理张钟澍编著Fat32报告人:周俊辉(Tony)完成时间:2004.10.20目录一、基本概念 31、硬盘逻辑结构 .32、LBA, .33、C/H/S 值, 3二、硬盘数据存储区域的划分 41、 MBR 42、虚拟 MBR 及其查找实例 53、DOS 引导区 DBR.64、文件分配表 FAT 95、文件目录表 FDT 106、DATA 区 .12四、FAT32 文件系统根目录下文件查找实例 .14五、子目录下的文件查找举例 17
2、六、长文件名的实现及存在的问题 19七、长文件名查找举例 20一、基本概念1、硬盘逻辑结构硬盘是一个密封的腔体,里面密封着磁头、盘片(磁片、碟片)等部件,盘面号既磁头号,从 0 开始编号。磁道从外向面编号,从0 开始。磁道被划成一段段圆弧,每段圆弧叫一个扇区,从 1 编号。所有盘面上的同一磁道构成一个圆柱,叫做柱面。磁盘容量计算公式:硬盘容量盘面数柱面数扇区数每扇区字节数(通常为512)2、 LBA,全称 Logic Block Address,既扇区逻辑地址,它从 0 开始编号,一一对应硬盘上的物理扇区3、 C/H/S 值,柱面、磁头、扇区号,一一对应物理扇区二、硬盘数据存储区域的划分 MB
3、R(63) DBR(32) FAT1 FAT2 DIR(32) DATA说明:MBR 一般占用 63 个扇区(实际只占用 1 个扇区);DBR 占用32 个扇区(实际只占用第 1 和第 6 扇区,第 1 扇区起作用,第 6 扇区为第一扇区的备份);FAT1=FAT2,FAT 文件为变长,隋分区大小、每簇扇区数的变化而变化;DIR 变化最大,早期的系统中 DIR 是固定长度,为 32 个扇区,而每个文件目录项占用 32 个字节,所以,根目录下最多只能有 512 项(文件和目录总和) ,软盘只有 112 项,超过这个数就不能再在根目录下建立文件或目录。后来为了突破这个限制,根目录采用和子目录一样的
4、方式来管理,称为根目录文件,就没有这个限制了,从此也就不再有单独的根目录,而成为 DATA的一部分。甚至根目录文件并不一定紧跟在 FAT 之后,可以在DATA 区任意的位置。1、 MBR既主引导记录区,位于 0 磁道 0 柱面 1 扇区。共 512 字节,MBR 引导程序占用其前 446 个字节(偏移 0偏移 1BDH) ,隋后64 个字节(偏移 1BEH1FDH)为 DPT 硬盘分区表,最后以“55AA”结束。硬盘分区表结构:偏移 意义 偏移 意义0 自举标志 81 起始磁头号 H 92 起始扇区号 S 103 起始柱面号 CYL 11本分区前已用扇区数4 分区格式标志 125 终止磁头号
5、H 136 终止扇区号 S 147 终止柱面号 CYL 15本分区总扇区数说明:柱面号的高 2 位存放在扇区字节的高 2 位2、虚拟 MBR 及其查找实例起因:通过主引导记录定义硬盘分区表,最多只能描述 4 个分区,如果想要多于 4 个分区,就要突破主引导记录中的分区描主法,这在某些时候也是突破硬盘容量限制的一种方法。我们采用一种虚拟 MBR 技术来实现。分区表项描述为:C:盘分区表 D: 盘分区表 E: 盘分区表 F: 盘分区表定义 C:盘 定义 D:盘 定义 E:盘 定义 F:盘描述剩余空间 描述虚拟MBR描述虚拟 MBR 描述虚拟 MBR末用 末用 末用 末用末用 末用 末用 末用先查看
6、硬盘的 0 扇区 既 MBR 的分区选项,C 盘分区的起始扇区号(DBR 位置)为:0000003F既 63 号扇区,扩展分区号(虚拟 MBR 位置):01388B3B 换成十进制是 20482875 号扇区。查看 20482875 扇区的分区表项为第一分区 0000003F( 63)是 D 盘的 DBR 相对位置,那么 D 盘的DBR 逻辑扇区计算为:204828756320482938 号扇区。第二分区又指向系统盘 E:的虚拟 MBR 位置(相对):01C92C09 十进制是:29961225,E:盘分区的虚拟 MBR 位置计算为:204828752996122550444100 查看 5
7、0444100 号扇区为:这里只有一个分区,偏移位置为:0000003F(63) ,所以 E:盘 DBR所在的扇区号为:504441006350444163,如果有 F:盘,则 E:盘的虚拟 MBR 的第二分区将指向它,如果形成一个环,系统本身并不会去判断它,它只是按照这个链忠实地寻找分区,而不进行任何额外的检测与处理,这所谓“逻辑锁” ,表现为无法引导,不能访问硬盘。3、 DOS 引导区 DBR硬盘各分区的逻辑管理方式表现为,所有分区内的逻辑扇区都是从“0”开始编号,直至其最大值1,涵盖整个分区,分区内的0 扇区称为 BOOT 区。由 Format 命令将 DOS 引导记录(DBR )写到该
8、扇区,主要功能是完成系统的自举。DOS 引导扇区结构如下:(1)跳转指令(2)厂商标识和 DOS 版本号,占 8 个字节( 030A)(3)BPB(BIOS Parameter Block,BIOS 参数块)(4)DOS 引导程序,负责完成 DOS 三个系统文件的装入(5)结束标专“55AA ”硬盘 DOS 引导记录中 BPB 参数信息:偏移量 字节数 含义00H 3 跳转到引导代码03H 8 厂商标识和 DOS 版本号0BH 2 每扇区字节数0DH 1 每簇扇区数(2 的整数倍)0EH 2 保留扇区数(FAT32 一般为 32)10H 1 FAT 个数(通常为 2)11H 2 根目录项数(早
9、期版本允许最大目录基数)13H 2 扇区总数(小卷,小于 32MB) (FAT16 系统)15H 1 磁介质描述符(F8 表示硬盘)16H 2 每 FAT 表所占扇区数(小卷,FAT16 系统)18H 2 每磁道扇区数1AH 2 逻辑磁头数1CH 2BPB参数信息当前分区前面隐含扇区数(系统隐含扇区)20H 4 扇区总数(大卷,大于 32MB) (FAT32 系统)FAT32 区段24H 4 每个 FAT 表所占扇区数(大卷,FAT32 系统)28H 2 标记2AH 版本2CH 4 引导目录第一簇,即根目录的起始簇30H 2 FS 信息扇区,BOOT 本身占用的扇区数32H 2 备份引导扇区的
10、位置34H 7 保留,一般为 00H40H 1 BIOS 设备(从 80 开始,编号到 85,86 为光驱)41H 1 未使用42H 1 扩展引导标记43H 4 序列号47H 11 卷标52H 8 文件系统说明:1、保留扇区是由 DOS 或 Windows 指定的被保留用做引导的扇区数。早期版本为 1 即 BOOT 本身占用的 1 个扇区,较新的版本一般为 32。除本身占用一个外,有 31 个扇区保留未用,其中第 6 扇区一般是 BOOT 的备份,在 BOOT 损坏时,可覆盖 BOOT 扇区修复2、系统隐含扇区(Hidden Sectors ):指分区表中所描述的该分区的起始扇区至该逻辑盘 D
11、BR 扇区间的扇区数。即 MBR 或虚拟 MBR 至隋后的逻辑盘 DBR 扇区数,一般为 3F(63 )而分区表中隐含扇区指每个分区以前的扇区数。不固定。对MBR 隐含扇区是绝对位置,对于虚拟 MBR,隐含扇区是相对于本扩展分区 MBR 的位置。第一分区 第二分区 第三分区MBR DBR 及数据 虚拟 MBR DBR 及数据 虚拟 MBR DBR 及(1) (3) (4)(2)第三分区 MBR 参数中的隐含扇区数(1)指系统隐含扇区也指分区表中是隐含扇区(2)指第二分区 MBR 参数中的隐含扇区数(3) , (4)指系统隐含扇区数4、文件分配表 FAT文件分配表(FAT) ,是 DOS 文件管
12、理系统用来记录每个文件的存储位置的表格,它以链的方式存放簇号。FAT 紧接着 DOS 引导扇区存放。磁盘上有两个 FAT,一个是基本表,另一个是备份。两个表的内容相同。每个 FAT 所占用的扇区数取决于 DOS 版本、分区大小、每簇的扇区数等因素。可查 BPB 参数查询到。簇号的长度由簇的多少决定,进而取决于 FAT 表项的位数。文件系统 区别 表示最大簇数 簇最大扇区 分区最大容量FAT12 12 位表示一簇 4096(12 次方) 64 128MBFAT16 16 位表示一簇 65536(16 次方) 64 2048MB(2G)FAT32 32 位表示一簇 4294967296 64 12
13、8TB注:为提高磁盘利用率,FAT32 每簇一般为 8,16 个扇区,软盘用12 位 FAT 表项,磁盘分区文件系统一般规律:小于 20740(10M)用 12 位映射一个簇小于 512M 多于 2074(10M)用 16 位映射一个簇大于 512M 用 32 映射一个簇在 FAT 表中,簇统计编号也是登编号。每一个登记项作为一个簇的樗信息占用一定的字节,该标专信息表项值含义如下:表项值(12 位) 表项值(16 位) 表项值(32 位) 簇描述信息含义000H 0000H 00000000H 未使用的簇002HFEFH 0002-FFEFH 00000002H-FFFFFFEFH 一个已分配
14、的簇号FF0H-FF6H FFF0H-FFF6H FFFFFFF0H-FFFFFFF6H 保留FF7H FFF7H FFFFFFF7H 坏簇FF8H-FFFH FFF8H-FFFFH FFFFFFF8H-FFFFFFFFH EOF(文件结束簇)在 FAT 簇登记项中,0,1 号登记项是表头,簇的登记项从 2 号开始,即磁盘的第一个文件从第 2 簇开始分配。早期 DOS 版本中,系统文件 IO.SYS(或 IBMBIO.COM)所在的首簇号总是 2。5、文件目录表 FDT根目录下的所有文件及其子目录在根目录的文件目录表中都有一个“目录登记项” 。每个目录登记项用 32 个字节,提供有关文件和子目
15、录的信息。FAT32 文件系统目录项含义:(1)0-7 字节:文件名(2)8-10 字节:文件扩展名(3)11 字节:文件属性,按二进制定义,最高二位保留不用,0-5位分别表示只读位、隐藏位、系统位、卷标位、子目录和归档位,当 11 字节为“0FH”时,表示该项为长文件名记录项。(4)12-13 字节:(仅长文件目录项有效)用来存储其对应的短文件名目录项的文件名字节校验和。(5)13-15 字节:24 位二进制文件建立时间,其中高 5 位为小时,次 6 位为分钟,再次 5 位的倍数为秒,最后 8 位为单位精确到 10 毫秒的创建秒数。(6)16-17 字节:16 位二进制文件建立日期,高 7
16、位为相对于 1980年的年份值,次 4 位为月份,后 5 位为月内日期(7)18-19 字节:16 位二进制文件最新访问日期,同 16-17 字节。(8)20-21 字节:起始簇高 16 位(9)22-23 字节,16 位二进制文件最新修改时间,同 13-15 前 16位(10)24-25 字节:16 位二进制文件最新修改时间,同 16-17 字节(11)26-27 字节:起始簇低 16 位(12)28-31 字节:32 位文件字节长度。注:(1) 子目录项,其长度为 0,已删除目录项的首字节值为E5H。(2)文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,每一项最多保存
17、13 个字符内码,首字节指明是长文件名的第几项,11 字节为 0FH,12 字节指明类型,13 字节为校验和,26,27 字节为零。6、 DATA 区用于实际存储文件数据,其组织与管理由前面 4 个区域的内容来完成三、FAT32 文件系统分区逻辑结构由上面的分析,我们总结出如下的逻辑磁盘中系统对文件的管理链:MBR DBR 保留扇区 FAT1 FAT2 FDT=32 DATA剩余扇区总结:(1)由 MBR 可找到 DBR(2)由 DBR 找确定保留扇区, FAT1,FAT2 大小,算出起始位置,确定 FDT 首簇位,DATA 起始位。(3)由 FDT 确定文件首簇位置和 FAT 中簇链起点(4
18、)由 FAT 文件和 FDT 中的簇链起点可找出文件所有簇号。(5)剩余扇区指,剩下的不足以组成一簇的扇区。剩余扇区计算举例:进入硬盘 0 分区 1,我们计算第一分区(C:盘)的剩余扇区,由 C:盘的 DBR 如下:我们可以得下如下参数图示:20482812保留扇区32 FAT1=9997 FAT2=9997 DATA 剩余扇区数据 DATA 扇区20482812329997220462786 个扇区剩余扇区数20462786 mod 16=10 个扇区共有簇数20462786/161278846 个簇也就是 C:盘有 10 个扇区不能成簇被浪费。四、FAT32 文件系统根目录下文件查找实例在
19、 C:盘根目录下兴建一个文件 file.txt,其 C:盘根目录结构如图示:查看 MBR,找到 C:盘 DBR 的位置:得到 C:盘 DBR 位置是:00000003F(63)63跳转到 63 号扇区,查看 C:盘的 DBR, 如图示:从上图我们可以得到如下几个要用到的计算参数:Sectors per FAT(每个 FAT 文件扇区数):9997Root dir 1st cluster(根目录占用第一簇号):2Sectors per cluster(每簇扇区数):16Reserved sectors(保留扇区数即 MBR 占用扇区数):32C:盘 DBR 扇区由结构如下:20482812保留扇
20、区32 FAT1=9997 FAT2=9997 DATA 剩余扇区根据公式换算:根目录的起始逻辑扇区DBR 起始扇区号DBR 占用扇区FAT2(起始簇号2)每簇扇区数根目录起始逻辑扇区为:633299972(22)1620089跳到 20089 扇区,查看:(从这儿看出 FAT 表没有参与编簇)对照 FDT 参数含义,我们如到如下参数:80-89:文件名我扩展名 file.txtBA:属性字节:存档94-95 起始簇高 16 位:00029A-9B 起始簇低 16 位:0036则计算出 file.txt 的起始簇号为:00020036(131126)即 131126 簇起始扇区为:633299
21、972(1311262)162118073跳到 2118073 扇区,找到 file.txt 文件如图所示:这就是我们要找的文件,查找成功。找 file.txt 在 FAT 表的入口地址:第 131126 簇的偏移地址:1311264524504 十六进制为 800D8偏移扇区:524504/5121024.421875 取整为:1024FAT 文件起始扇区:633295 查到 FAT 起始地址为:00000BE00File.txt 文件在 FAT 表的入口地址所在扇区为: 9510241119 扇区文件偏移地址 524504 十六进制为 800D8 所以file.txt 在 FAT 表的入口
22、地址为:00000BE00800D88BED8跳到 1119 扇区,找到 8BED8 地址,如图所示:取出其值为 0FFFFFFF,它表示文件的结束,至此 file.txt 文件查找全部完成。五、子目录下的文件查找举例我们要找出 download 子目录下 sonfold.txt 文件。子目录结构如图示:根据上面的计算 FDT 的起始扇区为:20089,在这个扇区找到download 这个目录,如下图所示:由上图我们可以得到如下信息:C00-C0A:目录名 CB:属性, “10”表示目录D04-D05 目录高 16 位:0002 D0A-D0B 目录低 16 位:2252D0C-D0F:目录的
23、大小,固定为 0 值所以偏移位置为:022252H 簇,转为十进为 139858,计算出逻辑扇区为:6332(1398582)162257785跳到 2257785 扇区,找到 sonfold.txt 文件的目录项,如图示:由于前面有几个长文件名和一些文件,占用了大量的目录项,直到 2257790 扇区才找到 sonfold.txt 的目录下!找到这个文件的目录项,查出其首簇,其余步骤按找 file.txt 完全一样。六、长文件名的实现及存在的问题因为长文件名需要考虑 Windows95 与 DOS 和 Windows3.X 的兼容问题,所以,Windows 实现的长文件名并不是对 8.3 格
24、式的简单扩展,否则,Windows 中的长文件名就会在 DOS 和 Windows3.X 系统中无法读出。在 Windows 中文件或是目录实际存储着两个名字,一个短文件名和一个长文件名,如果是短文件名,则存储在 8.3 格式的 32 字节的目录中,当创建一个长文件名时,其对应短文件名的存储有以下三个处理原则:(1)Windows 取长文件名的前 6 个字符加上1 形成短文件名。(2)如果已存在这个名字的文件,则符号后的数字自动增加。(3)如有 DOS 和 Window3.X 非法字符,以下划线“_”替代。在 DOS 或 Window3.X 下只能看见其对应的短文件名,完全忽略长文件名。在 W
25、indows95 或以上版本,系统会根据应用程序性质分别给矛不同的文件名:16 位应用程序得到 8.3 格式的文件名,32 位应用程序得到长文件名。长文件名使用目录登记项格式,占用 2 个字节。采用 Unicode 格式(一个字符占两个字节 16 位)一个长文件名需要若干个这样的不登记项,它们的含义表示为:偏移量 长(字节) 含义0 1 顺序字节110 10 长文件名节(5 个字符)11 1 文件属性(3F)12 1 种类13 1 校验和1425 12 长文件名节(6 个字符)2627 2 起始簇号2831 4 长文件名节(2 个字符)所以一个目录登记项可以表示 562 共 13 个字符。第一个字节的低 5 位指明它在文件名中的顺序号,第 6 位为“1 表明它是最后一项” ,第 5,7 位未用置 0。所以一个长文件名最大能用 33 个目录项表示,即最大文件名可表示字符数为:13326422 个字符。七、长文件名查找举例C 盘 download 子目录下有文件 ucosiichinadoc 子目录。由上面所做的工作,我们可直接跳到 2257785 扇区,得到如下图示:图中阴影部分即是 ucosiichinadoc 子目录的长文件名表示实现。