您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 第4章FAT文件系统数据恢复.
4.1.1FAT文件管理系统的基本思想与发展过程FAT文件管理系统最早是在软盘上实现的,当时为FAT12。随着存储介质容量的加大,微软在FAT12的基础上推出FAT16,FAT16是一个具有高度兼容性的文件系统,目前仍然广泛应用于个人电脑尤其是移动存储设备中。随着存储空间的进一步扩大,微软又推出了FAT32文件管理系统。FAT文件系统之所以有12,16,32不同的版本之分,其根本区别在于FAT表用来记录任意一簇链接的二进制位数。对于FAT12来说,就是用12个二进制位(也就是一个半字节)来表示簇号。其最大可以表示的簇号为0xFFF(十进制为4095)。少于32680个扇区(约为16MB)的分区,系统通常会将其格式化成12位的FAT,FAT12是FAT的初始实现形式,是针对小型介质的。FAT16最大可以表示的簇号为0xFFFF(十进制的65535),以32K为簇的大小的话,FAT16可以管理的最大磁盘空间为:32KB×65535=2048MB,这就是为什么FAT16不支持超过2GB分区的原因。FAT32将记录簇链的二进制位数扩展到了32位,故而这种文件系统称为FAT32。32位二进制位的簇链决定了FAT表最大可以寻址2T个簇。这样即使簇的大小为1扇区,理论上仍然能够寻址1TB范围内的分区。但实际中FAT32是不能寻址这样大的空间的,随着分区空间大小的增加,FAT表的记录数会变得臃肿不堪,严重影响系统的性能。WINDOWS系统自带的分区功能对FAT32支持分区的大小最大为32GB。但通过第三方软件建立的FAT32分区,可以支持大于32G分区的正常读写。FAT文件管理系统磁盘分区大致分为以下几个部分:系统引导保留区、文件链表区、目录区、数据区。不同版本的FAT系统略有不同,FAT32文件系统把目录区与数据区合并在一块。下图为一个FAT32文件管理系统的典型磁盘布局情况。4.2.1DBR作用与形成DBR(DOSBOOTRECORD)即操作系统引导记录的意思,通常占用分区的第0扇区共512个字节(特殊情况也要占用其它保留扇区)。DBR的引导过程:当系统把引导权交给DBR以后,系统首先读取DBR前边的BPB系统参数,并据此参数寻找用于系统进一步启动的IO.SYS、SYSTEM.SYS、NTLDR等文件,把系统引导权移交给相应的程序,完成系统启动。DBR的作用:保证分区文件管理系统的正确加载。DBR的形成:一个分区的DBR是在分区格式化时就产生的。它保证了对本分区文件的读写管理,都按指定的系统参数统一进行。对于不同的文件系统来说,系统引导保留区是不同的,FAT12没有保留区,只有引导扇区,而FAT16除引导扇区以外,还有一个扇区作为系统的保留区。FAT32,除了系统引导扇区以外,还会有31~37个系统保留扇区。其中,有第6扇区有系统引导扇区(DBR)的一个完整备份。从中,我们可以看到,这一扇区的数据结构大致分为以下几个部分:1.跳转指令跳转指令本身占用2个字节,它将程序执行流程跳转到引导程序处,比如当前DBR中的“EB58”,就是代表汇编语言的“JMP58”。需要注意该指令本身占用2个字节,计算跳转目标地址时以该指令的下一字节为基准,所以实际执行的下一条指令应该位于5A。紧接着跳转指令的是一条空指令NOP(90H)。2.OEM代号这部分占8个字节,其内容由创建该文件系统的OEM厂商具体安排。3.BPB(BIOSParameterBlock)参数表FAT32的BPB从DBR的第12(0BH偏移处)个字节开始,占用79个字节,记录了有关该文件系统的重要信息,其各个参数的含义见表4.1。.4.引导程序FAT32的DBR引导程序占用420个字节(5AH~1FDH),在Windows98之前的系统之下,这段代码负责完成DOS三个系统文件的装入,在Windows2000之后的系统中,其负责完成将系统文件NTLDR装入,对于一个没有安装操作系统的分区来讲,这段程序没有用处。5.结束标志扇区的最后两个字节与我们所熟悉的MBR、EBR相同,55AA——引导扇区有效标志。以上5个部分共占用512个字节,正好是一个扇区,因此称它为DOS引导扇区。该部分的内容中除了第5部分结束标志是固定不变之外,其余4个部分都是不完全确定的,都因操作系统版本的不同而不同,也因硬盘的逻辑盘参数的变化而变化。1.FAT32分区的BPB字段一个FAT32分区“J”双击打开时出现如图4-3所示的提示信息。一般情况下,用户会选择“是”,格式化分区,带来的后果是分区下的文件全部丢失,这时用户想要得到原来的文件只能采取分区格式化后的恢复方法(此方法后续介绍),此方法相对复杂,且不能100%恢复。而实际上出现此种提示,绝大多数情况下是由于DBR遭到破坏引起的,此时我们应该点“否”,然后重构DBR。DBR扇区的结构分为以下几个部分:跳转指令、OEM代号、BPB参数、引导代码和结束标志。同一个文件系统类型的DBR扇区,除了BPB参数有部分不一样以外,其他各部分都是一样的,所以重构DBR的方法是从同一个文件系统类型的分区中复制一个DBR,然后再对BPB参数进行修改。图4-4是J盘遭到破坏的DBR扇区,现在我们将另外一个FAT32分区的DBR复制到J盘DBR所在的扇区,覆盖原来的数据,如图4-5所示。覆盖后的DBR扇区其BPB参数的模板如图4-5所示。因为同样是FAT32文件系统的DBR扇区,所以大部分BPB参数的值都是一样的,只有个别参数的值可能不一样,需要修改,这几个参数是:每簇扇区数(Sectorspercluster)、保留扇区数(Reservedsectors)、每个FAT表扇区数(SectorsperFAT)、分区扇区总数(Sectors)、隐含扇区数(分区前已经使用的扇区数,Hiddensectors)下面对这些值进行验证并修改。第1步验证“保留扇区数”。保留扇区数也就是DBR与FAT1之间的扇区数,用WinHex搜索FAT1,FAT1标志是F8FFFF0F,搜索的设置如图4-6所示。搜索发现38号扇区就是FAT1,所以“保留扇区数”的值应该为“38”。第2步验证“分区大小”。因为该分区的分区表是完好的,所以可以从分区表中获得该分区的大小,其分区表如图4-7所示。图4-7中选中的4个字节就是这个分区的总扇区数,值为1F2180,转换为十进制等于2040192,所以分区大小为2040192扇区。第3步验证“FAT表大小”。因为FAT1开始于38号扇区,在随后搜索找到FAT2开始于2027号扇区,所以可以确定FAT表大小为1989个扇区。第4步验证“每簇扇区数”。设S为某目录当前目录项所在簇,C为该簇所对应扇区号。根据当前目录项特征值“2E2020”查找两个目录项的S值和C值,然后用S2-S1除以C2-C1,结果即为“每簇扇区数”。例如某目录项所在扇区号为19164,簇号为4,另一个目录项所在扇区号为19132,簇号为3,那么簇大小=(19140-19132)/(4-3)=8。另外,FAT文件系统在默认情况下,分区大小与每簇扇区数是有一定的对应关系的,如表4-1、4-2所示。因此,我们也可以根据分区大小估算“每簇扇区数”。第5步验证“隐含扇区数”。隐含扇区数一般为63,我们可以从整个磁盘的开始位置向后查看,在63号扇区或其前后会有一个扇区其数据明显不同,具体数据内容因DBR遭到破坏的程度而异。经过以上5步BPB的关键参数都已计算完毕,用模板填入DBR即可,如图4-8所示。填完后,存盘,分区就可以打开了,如图4-9所示。4.3.1FAT表的结构FAT(FileAllocationTable)表即文件分配表,它是文件管理系统用来为每个文件分配硬盘物理空间的表格,用于告诉操作系统,文件存放在硬盘的哪个位置。FAT表在硬盘上是紧接DBR之后的,它一般有两个,一个是基本FAT表,另一个是其备份。FAT表的大小根据分区的大小及文件分配单元的大小不同而变化。硬盘上的簇在FAT中的表项占12、16或32位。在FAT16文件系统中,每簇在FAT中所取表项值是占12位还是16位与所用硬盘的容量有关,12位表项值可表示4096个簇,若硬盘的簇数大于4096,则用16位表项值。一般来说,小于20740个扇区(10MB)的硬盘DOS分区可用12位映射一个簇,如多于20740个扇区的硬盘分区,则采用16位的FAT。我们知道FAT文件系统是以簇为单位给文件分配磁盘空间的,每个簇在FAT表中占有一个登记项,所以,在FAT表中,簇编号也是登记项的编号。每一个登记项作为一个簇的标志信息按照FAT12、FAT16和FAT32结构的不同分别为1.5个字节、2个字节和4个字节。该标志信息可取的表项值及其含义如表4-3所示。了解了FAT表的结构和功能后,那么如何寻找文件的簇链呢?这里我们以FAT32文件系统的32位登记项为例,讲解文件寻找簇链的计算步骤:(1)假设已经由文件目录表(FDT)中查得该文件的起始簇号。(2)将该起始簇号换为十进制数a,该十进制数即为查找下一簇号的本簇号。(3)a*4,即得到FAT中的相对位移b,该位置存放的是文件簇链的下一簇号。(4)由b开始读取一个簇。(5)重复以上簇链的查找过程,直至找到其值为0xFFFFFF0F—0xFFFFFFFF的簇号。图4-10为一个FAT32分区下某文件FAT表起始簇号的实例。其起始簇号的高16位为0000,低16位为0006,所以该文件的起始簇号为6号簇。找到起始簇号后,我们跳转到FAT表,如图4-11所示,并查看偏移为6*4=24开始的4个字节的值,确定下一簇号,然后依此类推,直至看到结束标志FFFFFF0F,得到该文件的完整簇链,如表4-4所示。如上表所示,某文件入口簇为6,则下一簇位置为:0x4818(7)→0x481C(8)→0x4820(9)→0x4824(A)→0x4828(B)→0x482C(C)→0x4830(D)→0x4834(E)→0x4838(F)→0x483C(10)→0x4840(11)→0x4844(12)→0x4848(13)→0x484C(14)→0x4850(15)→0x4854(FFFFFF0F)由于硬盘文件分配表很庞大,无法手工修复,只能依靠工具。FAT表记录着硬盘数据的存储地址,每一个文件都有一组FAT链指定其存放的簇地址。FAT表的损坏意味着文件内容的丢失。庆幸的是DOS系统本身提供了两个FAT表,如果目前使用的FAT表损坏,可用第二个进行覆盖修复。但由于不同规格的磁盘其FAT表的长度及第二个FAT表的地址也是不固定的,所以修复时必须正确查找其正确位置。如果第二个FAT表也损坏了,则也无法把硬盘恢复到原来的状态,但文件的数据仍然存放在硬盘的数据区中,可采用CHKDSK或SCANDISK命令进行修复,最终得到*.CHK文件,这便是丢失FAT链的扇区数据。如果是文本文件则可从中提取出完整的或部分的文件内容。文件目录表(FileDirectoryTable,FDT),即根目录区,又称为ROOT区、DIR区。在FAT文件系统中,仅有FAT还不能定位文件在磁盘中的位置,FAT还必须和DIR配合才能准确定位文件的位置。DIR记录着每个文件(目录)的起始单元(这是最重要的)、文件的属性等。定位文件位置时,操作系统根据DIR中的起始单元,结合FAT表就可以知道文件在磁盘的具体位置及大小了。在DIR区之后,才是真正意义上的数据存储区,即DATA区。FAT文件系统的文件目录表(FileDirectoryTable),由一系列以每32个字节作为一个目录项的文件目录列表所构成的。FAT16的FDT长度为32个扇区(512个目录项)。如果支持长文件名,则每个表项为32个字节的N倍,其中,前(N-1)*32个字节为长文件链接说明;最后32个字节为文件属性说明,包括文件长度、起始地址、日期、时间等。如不支持长文件名,则每
本文标题:第4章FAT文件系统数据恢复.
链接地址:https://www.777doc.com/doc-2156370 .html