




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据恢复技术(第二版)第二部分目录\h4.3.4GPT磁盘分区丢失的恢复实例\h4.4FAT16文件系统详解\h4.4.1FAT16文件系统结构总览\h4.4.2FAT16文件系统的DBR分析\h4.4.3FAT16文件系统的FAT表分析\h4.4.4FAT16文件系统的FDT分析\h4.4.5FAT16文件系统目录项分析4.4.6FAT16文件系统根目录与子目录的管理4.4.7FAT16文件系统删除文件的分析4.4.8FAT16文件系统误格式化的分析4.4.9FAT16文件系统DBR手工重建的实例4.5FAT32文件系统详解4.5.1FAT32文件系统结构总览4.5.2FAT32文件系统的DBR分析4.5.3FAT32文件系统的FAT表分析4.5.4FAT32文件系统的数据区分析4.5.5FAT32文件系统目录项分析4.5.6FAT32文件系统根目录与子目录的管理4.5.7FAT32文件系统删除文件的分析4.5.8FAT32文件系统删除文件后目录项起始簇号高位清零的分析4.5.9FAT32文件系统误格式化的分析4.5.10FAT32文件系统DBR破坏的恢复实例4.5.11FAT32分区文件乱码的手工恢复实例4.5.12FAT32分区被苹果电脑误格式化后的完美恢复实例4.6NTFS文件系统详解4.6.1NTFS文件系统基本介绍4.6.2NTFS文件系统结构总览4.6.3NTFS文件系统引导扇区分析4.6.4元文件$MFT分析4.6.5文件记录分析4.6.610H属性分析4.6.720H属性分析4.6.830H属性分析4.6.940H属性分析4.6.1050H属性分析4.6.1160H属性分析4.6.1270H属性分析4.6.1380H属性分析4.6.1490H属性分析4.6.15A0H属性分析4.6.16B0H属性分析4.6.17C0H属性分析4.6.18D0H属性分析4.6.19E0H属性分析4.6.20100H属性分析4.6.21元文件$MFTMirr分析4.6.22元文件$LogFile分析4.6.23元文件$Volume分析4.6.24元文件$AttrDef分析4.6.25元文件$Root分析4.6.26元文件$Bitmap分析4.6.27元文件$Boot分析4.6.28元文件$BadClus分析4.6.29元文件$Secure分析4.6.30元文件$UpCase分析4.6.31元文件$Extend分析4.6.32元文件$ObjId分析4.6.33元文件$Quota分析4.6.34元文件$Reparse分析4.6.35元文件$UsnJrnl分析4.6.36NTFS的索引结构分析4.6.37手工遍历NTFS的B+树4.6.38NTFS的EFS加密分析4.6.39NTFS文件系统删除文件的分析4.6.40NTFS文件系统格式化的分析4.6.41NTFS文件系统DBR手工重建的实例4.7ExFAT文件系统详解4.7.1ExFAT文件系统基本介绍4.7.2ExFAT文件系统结构总览4.7.3ExFAT文件系统的DBR分析4.7.4ExFAT文件系统的FAT表分析4.7.5ExFAT文件系统的簇位图文件分析4.7.6ExFAT文件系统的大写字符文件分析4.7.7ExFAT文件系统的目录项分析4.7.8ExFAT文件系统根目录与子目录的管理4.7.9ExFAT文件系统删除文件的分析4.7.10ExFAT文件系统误格式化的分析4.7.11ExFAT文件系统DBR手工重建的实例4.3.4GPT磁盘分区丢失的恢复实例1.案例基本情况描述用户的一块数据备份硬盘,容量30GB,在WindowsVista系统下使用,被用做GPT磁盘,分两个区,第一个分区作为工具备份区,第二个分区是数据备份区,用户把一些重要数据放在该分区。因为一次突然断电,用户再次启动计算机后发现备份盘的两个盘符都不见了,两个分区内的数据无法访问。把该硬盘接到数据恢复工作机上,工作机安装的是WindowsServer2003SP2系统,能够支持GPT磁盘。进入系统打开磁盘管理,看到硬盘的状态为“没有初始化”,如图4-210中的“磁盘2”所示。图4-210硬盘的状态为“没有初始化”2.数据丢失的原因分析硬盘的状态成为“没有初始化”,自然就无法访问硬盘中的分区了,那么是什么原因使该硬盘变为“没有初始化”的状态呢?这可能是因为用户的计算机在突然断电时,破坏了硬盘的MBR扇区,也就是GPT磁盘的保护MBR,硬盘才会显示为“没有初始化”。用WinHex打开这块硬盘,查看MBR,其内容如图4-211所示。图4-211MBR扇区该硬盘的第一个扇区全部为“00”,而在GPT磁盘中第一个扇区应该是个保护MBR,内部会有磁盘签名、分区表和“55AA”标志。分区表中只使用一个分区表项,描述一个分区类型为“EE”、大小为“FFFFFFFF”的分区。GPT磁盘的第二个扇区应该是GPT头,从第三个扇区开始为分区表,而往下翻动发现该硬盘这几个扇区也都为“00”,说明在计算机断电的瞬间把GPT磁盘前部的一些扇区都清零了,这正是分区丢失的原因。3.数据恢复的思路及方法找到了分区丢失的原因所在,下面开始动手恢复数据。因为GPT磁盘对其内部分区的管理依靠三个部分:保护MBR、GPT头、分区表,保护MBR的作用是告诉计算机系统这是一块GPT磁盘,系统应该遵循GPT磁盘的结构对该硬盘进行访问;GPT头的作用是对GPT磁盘的结构做一个大概描述,包括一些关键结构的位置、大小及校验;而分区表则是直接管理分区的,包括分区的起始地址、结束地址、分区名、校验等。这三部分中,GPT头和分区表又是至关重要的,所以系统对这两个结构都做了备份,放在GPT磁盘的末尾。这些备份轻易不会遭受破坏,那么现在可以跳转到GPT磁盘的最后一个扇区,看看GPT的备份是否还在。用WinHex跳转到硬盘的最后一个扇区,其内容如图4-212所示。图4-212硬盘的最后一个扇区通过分析能够确认这个扇区是一个很完整的GPT头备份,其参数可以通过模板来查看,如图4-213所示。图4-213GPT头备份的模板在GPT头备份扇区内描述了GPT分区表备份的起始扇区,从图4-213中可以看到当前值为60058623,跳转到该扇区看一下,其内容如图4-214所示。图4-21460058623号扇区60058623号扇区内果然是分区表,并且有三个分区表项,第一个是微软保留分区,第二个和第三个是基本数据分区,也就是用户的两个分区了,其参数的模板如图4-215所示。图4-215分区表参数模板第一个分区是微软保留分区,这个分区对用户来讲没有什么用处,从模板中的参数看其大小约为128MB;其后才是用户的数据分区,从模板中看用户的第一个数据分区开始于262178号扇区,目前硬盘数据的破坏应该达不到这个位置。跳转到262178号扇区查看一下,其内容如图4-216所示。图4-216262178号扇区可以看出这是一个NTFS文件系统的DBR,正是分区的开始扇区,说明没有遭受破坏。既然GPT头备份和分区表备份都在,用户的数据分区也没有遭受破坏,那么恢复数据就变得很容易了。有很多种方法可以恢复该硬盘的数据,下面讲解两种直接在原硬盘上修复的方法。(1)创建保护MBR因为目前GPT磁盘的GPT头备份和分区表备份都完好无损地存放在GPT磁盘的末尾,所以只要给GPT磁盘创建一个保护MBR,按照GPT磁盘的管理机制。系统如果读取不到GPT头和分区表,就会自动去读取GPT头备份和分区表备份,也就能够识别分区了。创建保护MBR的方法是用WinHex打开该硬盘,在第一个扇区内填写磁盘签名、类型为“EE”的保护分区及结束标志“55AA”,而不能用磁盘管理将磁盘转换为GPT磁盘的方式创建保护MBR。因为这样做系统不但创建了保护MBR,还会同时创建GPT头、微软保留分区、GPT头备份及分区表备份,就会把原来的备份覆盖了。保护MBR中的磁盘签名可以任意写4字节,保护分区中的数值按照图4-217中的值填写,同时别忘记在扇区末尾写“55AA”。图4-217创建保护MBR数值填写完毕之后存盘,其他结构不用修复,然后重新启动计算机,用户丢失的两个分区就出现了,数据完好无损,如图4-218所示。图4-218丢失的两个分区恢复成功(2)完整修复在方法(1)中利用了GPT磁盘的管理特点,仅仅创建了保护MBR,然后让系统去读取备份的GPT头和分区表获得分区信息,虽然也能让硬盘正常工作,但毕竟缺失了GPT头和分区表还是不太完整的。现在我们来完整修复保护MBR、GPT头和分区表。保护MBR的修复方法与方法(1)中一样,就不再重复了。①修复GPT头。GPT头应该位于GPT磁盘的1号扇区,GPT头备份在GPT磁盘的最后一个扇区,首先把GPT头备份复制到1号扇区,然后修改几个参数即可。GPT头备份的参数模板如图4-219所示。图4-219GPT头备份的参数模板图4-219中圈出了需要修改的参数,修改以后的GPT头参数模板如图4-220所示。图4-220修改以后的GPT头参数模板GPT头的CRC校验和不能直接使用GPT头备份中的数值,可以通过CRC校验算法具体计算该值,也可以随意写4字节。因为该硬盘不是系统引导盘,只是数据存储盘,GPT头的CRC校验和错误对数据不会有什么影响。其他三个参数根据GPT磁盘的结构原理具体修改即可,比较简单就不再重复了。②修复分区表。分区表的修复非常简单,直接把GPT磁盘60058623扇区的分区表备份复制到2号扇区即可,不用做任何修改。全部修复完毕后存盘并重启系统,数据也就恢复成功了。4.4FAT16文件系统详解硬盘是用来存储数据的,为了使用和管理的方便,这些数据以文件的形式存储在硬盘上。任何操作系统都有自己的文件管理系统,不同的文件系统又有各自不同的逻辑组织方式,要对硬盘进行高效的管理并对数据进行有效恢复,就要求用户必须深入了解文件在硬盘上是如何存储的。微软的文件系统主要有FAT、NTFS和ExFAT:FAT文件系统有FAT12、FAT16、FAT32三种类型;NTFS是目前微软系统中主流的文件系统;ExFAT则是微软近期刚推出的一种新的文件系统,主要针对于移动介质。微软各操作系统与文件系统的对应关系见表4-19。表4-19Microsoft操作系统与文件系统对应关系提示Vista系统打上SP1的补丁才能够支持ExFAT;而WindowsXP下也有一个专门针对ExFAT的补丁,该补丁为可选补丁,如果打上这个补丁,也能够支持ExFAT。FAT文件系统所包含的这三种类型是由FAT表中每个FAT项所占的长度来分类的,也就是说,FAT12的FAT表中每个FAT项占用12位,FAT16的FAT表中每个FAT项占用16位,FAT32的FAT表中每个FAT项占用32位。FAT12文件系统主要用于特别小的分区和软盘中,目前已经非常少见,本书就不再介绍了。本书随后的几个小节中将重点介绍FAT16、FAT32、NTFS和ExFAT。4.4.1FAT16文件系统结构总览FAT16文件系统是从微软的DOS3.0系统开始使用的,它能够支持大于16MB小于2GB的分区,Windows2000以上操作系统可以创建4GB的FAT16分区,但与传统的FAT16不兼容。FAT16文件系统由DBR、FAT1、FAT2、FDT、数据区五个部分组成,其结构如图4-221所示。这些结构是在分区被格式化时创建出来的,它们的含义如下。①DBR及其保留扇区。DBR的全称为DOSBootRecord,含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往有一些保留扇区。②FAT1。FAT的全称为FileAllocationTable,含义是文件分配表。FAT16一般有两份FAT,FAT1是第一份,也是主FAT。图4-221FAT16文件系统结构图③FAT2。FAT2是FAT16的第二份文件分配表,也就是FAT1的备份,称为备份FAT。④FDT。FDT的全称为FileDirectoryTable,含义是文件目录表。⑤DATA。DATA也就是数据区,是FAT16文件系统的主要区域。4.4.2FAT16文件系统的DBR分析DBR开始于FAT16文件系统的第一个扇区,计算机启动时首先由BIOS读入主引导盘MBR的内容,以确定各个逻辑驱动器及其起始地址,然后调入活动分区的DBR,将控制权交给DBR,由DBR来引导操作系统。FAT16文件系统的DBR由5部分组成,分别为跳转指令、OEM代号、BPB、引导程序和结束标志,图4-222是一个完整的FAT16文件系统的DBR。图4-222FAT16文件系统的DBR1.跳转指令跳转指令本身占用2字节,它将程序执行流程跳转到引导程序处。例如,当前DBR中的“EB3C”,就是代表汇编语言的“JMP3C”。需要注意该指令本身占用2字节,计算跳转目标地址时以该指令的下一字节为基准,所以实际执行的下一条指令应该位于3E。紧接着跳转指令的是一条空指令NOP(90H)。2.OEM代号OEM代号部分占8字节,其内容由创建该文件系统的OEM厂商具体安排,例如微软的Windows95将此处设置为“MSWIN4.0”,Windows98则设置为“MSWIN4.1”,Windows2000以上的操作系统设置为“MSDOS5.0”。当前DBR中的OEM代号为“MSDOS5.0”,说明这个FAT16分区是由微软的Windows2000以上的操作系统格式化创建的。使用WinHex可以很轻易地改变这个OEM代号,不过即使改动也并不影响文件系统的使用。3.BPB(BIOSParameterBlock,BIOS参数块)BPB是BIOSParameterBlock的缩写,其含义为BIOS参数块。BPB从第DBR的第12(0BH偏移处)字节开始,占用51字节,记录了有关该文件系统的重要信息,其中各个参数的含义见表4-20。表4-20FAT16的BPB参数这些参数也可以使用WinHex中的模板来查看。WinHex的模板管理器中提供FAT16的DBR模板。打开WinHex的模板管理器,选择FAT16的DBR模板,如图4-223所示。图4-223选择FAT16的DBR模板双击模板后就可以查看FAT16的DBR信息了,如图4-224所示。图4-224FAT16的DBR模板下面对这些参数做详细分析。(1)每扇区字节数每扇区字节数记录每个逻辑扇区的大小,其常见值为512字节,但512并不是固定值。该值可以由程序定义,合法值包括512、1024、2048和4096字节。(2)每簇扇区数每簇扇区数记录着文件系统的簇大小,即由多少个扇区组成一个簇。“簇”是FAT12、FAT16以及FAT32文件系统下数据的最小存储单元,一个“簇”由一组连续的扇区组成,簇所含的扇区数必须是2的整数次幂,如1、2、4、8、16、32、64或128。在Windows2000系统之前,簇的最大值为64扇区;从Windows2000系统开始,簇的最大取值可以达到128扇区。在FAT文件系统中,所有的簇从2开始进行编号,每个簇都有一个自己的地址编号,但所有的簇都位于数据区内,在数据区之前是没有簇的。(3)DBR保留扇区数DBR保留扇区数是指DBR本身占用的扇区以及其后保留扇区的总和,也就是DBR到FAT1之间的扇区总数,或者说是FAT1的开始扇区号。提示对于FAT16文件系统来说,DBR保留扇区数的取值范围是1扇区到8扇区之间。(4)FAT个数FAT个数描述了该文件系统中有几个FAT表,一般在FAT文件系统中都有两个FAT,即FAT1和FAT2,FAT2是FAT1的备份。但依照微软的规定,一些小的存储介质可以只有一个FAT表。(5)根目录项数根目录项数是指在FAT16的FDT中最大所能容纳的目录项数,这个数值一般都是512,也就是说FDT中只能存放512个目录项,而每个目录项的大小为32字节(目录项的结构后面会详细分析),这样算下来FDT的扇区数为32个。(6)分区总扇区数小于32MB的分区记录在这里,因为这个位置只有2字节,也就是16位,所以能管理的最大分区为216×512=33554432Byte=32MB。对大于32MB的分区,用32位记录在20H~23H偏移处。(7)介质描述符介质描述符是描述磁盘介质的参数,根据磁盘性质的不同,取不同的值。具体取值见表4-21。表4-21磁介质描述符(8)每FAT扇区数每FAT扇区数是指每个FAT表包含的扇区数,FAT2是FAT1的镜像,两个FAT一样大。(9)每磁道扇区数这是逻辑C/H/S中的一个参数,其值一般为63。(10)磁头数这也是逻辑C/H/S中的一个参数,其值一般为255。(11)隐藏扇区数隐藏扇区数是指本分区之前使用的扇区数,该值与分区表中所描述的该分区的起始扇区号一致,对于主磁盘分区来讲,是MBR到该分区DBR之间的扇区数;对于扩展分区中的逻辑驱动器来讲,是其EBR到该分区DBR之间的扇区数。(12)分区总扇区数对大于32MB的分区,其扇区总数记录在这个位置。(13)BIOS驱动器号这是BIOS的INT13H所描述的设备号码,一般把硬盘定义为8xH。(14)扩展引导标记扩展引导标记用来确认后面的三个参数是否有效,一般值为29H。(15)卷序列号卷序列号是格式化程序在创建文件系统时生成的一组随机数值。曾经的Windows98是把文件系统的创建时间中的月、日、时、分、秒和十分之一秒值都换算成一字节的十六进制值,把年份换算成两字节的十六进制值,将时和分组成一个二字节数值,时为高位,分为低位,然后将这个数值与年的二字节值相加,得到的十六进制值作为32位卷序号的高16位。将月和日组成一个二字节十六进制值,时为高位,日为低位;将秒和十分之一秒组成一个二字节十六进制值,秒为高位,十分之一秒为低位,然后将这两个值相加,得到的十六进制值作为卷序号的低16位,最后就产生了一个4字节的卷序列号。但是从Windows2000以后,卷序列号就不再这样计算了。(16)卷标卷标是由用户在创建文件系统时指定的一个卷的名称。原来的系统把卷标记录在这个地址处,现在的系统已经不再使用这个地址记录卷标,而是由一个目录项来管理卷标。(17)文件系统类型BPB的最后一个参数,直接用ASCII码记录下当前分区的文件系统类型。4.引导程序FAT16的DBR引导程序占用448字节(3EH~1FDH)。在Windows98之前的系统之下,这段代码负责完成DOS三个系统文件的装入;在Windows2000之后的系统中,其负责完成将系统文件NTLDR装入。对于一个没有安装操作系统的分区来讲,这段程序没有用处。5.结束标志DBR的结束标志与MBR、EBR的结束标志都相同,为“55AA”。以上5个部分共占用512字节,正好是一个扇区,因此称它为DOS引导扇区。该部分的内容中除了第5部分结束标志是固定不变之外,其余4个部分都不是完全确定的,因操作系统版本的不同而不同,也因硬盘的逻辑盘参数的变化而变化。4.4.3FAT16文件系统的FAT表分析1.FAT表的作用及结构特点FAT(FileAllocationTable)即文件分配表,对于FAT文件系统来讲是至关重要的一个组成部分,其主要作用及结构特点如下(如果没有特别说明,以下的作用和特点适用于FAT12、FAT16及FAT32文件系统中的FAT表)。(1)FAT文件系统一般有两份FAT,它们由格式化程序在对分区进行格式化时创建,FAT1是活动FAT,FAT2是备份FAT。(2)FAT1跟在DBR之后,其具体地址由DBR的BPB参数中偏移量为0EH~0FH的两字节描述;FAT2跟在FAT1之后,其地址可以用FAT1的所在扇区号加上每个FAT所占的扇区数获得。(3)FAT表是由FAT表项构成的,我们把FAT表项简称为FAT项。每个FAT项的大小有12位(相当于1.5字节)、16位(相当于2字节)和32位(相当于4字节)三种情况,对应的分别是FAT12、FAT16和FAT32三种文件系统。(4)每个FAT项都有一个固定的编号,这个编号从0开始,也就是说,第一个FAT项是0号FAT项,第二个FAT项是1号FAT项,以此类推。(5)FAT表的前两个FAT项有专门的用途:0号FAT项通常用来存放分区所在的介质类型,例如硬盘的介质类型为“F8”,那么硬盘上分区的FAT表第一个FAT项就以“F8”开始;1号FAT项则用来存储文件系统的肮脏标志,表明文件系统被非法卸载或者磁盘表面存在错误。(6)分区的数据区中每一个簇都会映射到FAT表中的唯一一个FAT项。因为0号FAT项和1号FAT项有特殊用途,无法与数据区中的簇形成映射,所以从2号FAT项开始跟数据区中的第一个簇映射,正因为如此,数据区中的第一个簇也就编号为2号簇,这也是没有0号簇和1号簇的原因,然后3号簇跟3号FAT项映射,4号簇跟4号FAT项映射,以此类推,直到数据区中的最后一个簇。(7)分区格式化后,用户文件以簇为单位存放在数据区中,一个文件至少占用一个簇。当一个文件占用多个簇时,这些簇的簇号不一定是连续的,但这些簇号在存储该文件时就确定了顺序,即每个文件都有其特定的“簇号链”。在分区上的每一个可用的簇在FAT中有且只有一个映射FAT项,通过在对应簇号的FAT项内填入“FAT项值”来表明数据区中的该簇是已占用、空闲或是坏簇三种状态之一,这三种状态的表项取值范围见表4-22。表4-22FAT表中每个FAT项可取的表项值及其含义其中损坏的簇可以在格式化过程中,由格式化程序发现并记录在相应的FAT项中。在一个簇中,只要有一个扇区有问题,该簇就不能使用。(8)FAT16文件系统的FAT项是16位的,也就是说每个FAT项占2字节。16位的FAT项最多可管理65535个簇。在Windows2000系统之前簇大小最大为64个扇区(32KB),这样,采用16位FAT的系统最多只能管理32×65535=2097120KB=2048MB=2GB的分区,对于容量超过2GB的硬盘,必须将其划分成多个不超过2GB的分区。从Windows2000系统开始,簇大小可以达到128个扇区(64KB),FAT16文件系统就可以管理4GB的分区了,但这种分区在Windows2000之前的系统中不可访问。(9)综合上面的说明可以看出,FAT表的功能主要有如下三点:①表明分区所在介质类型。FAT表的0号FAT项用来表明分区所在介质类型,该FAT项的首字节与BPB中介质描述符所对应的介质类型相同。②表明一个文件所占用的各簇的簇链分配情况。每个簇在FAT表中映射一个FAT项,FAT项以指针的方式记录文件的簇链。③标明坏簇和可用簇。以FAT16为例,如果分区格式化时发现坏扇区,即在相应簇的表项中写入FFF7H,表明该簇的扇区不能使用,系统就不会将它分配给用户文件。分区上未用但可用的“空簇”的FAT项值为0000H,当需要存放新文件时,系统按一定顺序将它们分配给新文件。2.FAT表的实际应用要分析FAT表,就需要找到FAT表,下面模拟一下操作系统定位FAT表的方法。首先定位FAT1,这里以图4-222中的DBR所在分区为例,定位FAT1的步骤如下。①系统通过该分区的分区表信息,定位到其DBR扇区;②读取DBR的BPB,主要读取“DBR保留扇区数”这个参数,它在DBR的0EH~0FH偏移处,当前值为6(具体参数可以查看图4-224中的DBR模板);③读取到“DBR保留扇区数”这个参数的值为6之后,跳转到该分区的6号扇区,这里就是FAT1的开始。下面就跳转到6号扇区,具体分析这个扇区的数据结构。该分区是刚格式化的一个分区,把分区格式化为FAT16文件系统时,格式化程序会把分配给FAT表的所有扇区都清零,然后写入0号FAT项和1号FAT项,其内容如图4-225所示。图4-225FAT16文件系统的FAT1可以看出每个FAT项占用2字节:其中0号FAT项描述介质类型,其首字节为“F8”,表示介质类型为硬盘;1号FAT项为肮脏标志。从2号FAT项开始往后都是空FAT项,表示它们对应的簇为可用簇。分析完FAT1,再来看看它的备份——FAT2。还以图4-222中的DBR所在分区为例,系统定位FAT2的步骤如下:①系统通过该分区的分区表信息,定位到其DBR扇区;②读取DBR的0EH~0FH偏移处,得到“DBR保留扇区数”的值为6;③读取DBR的16H~17H偏移处,得到“每FAT扇区数”的值为141;④用“DBR保留扇区数”加上“每FAT扇区数”,结果等于147,跳转到该分区的147号扇区,这里就是FAT2的开始。FAT2的内容与FAT1完全一样,如图4-226所示。图4-226FAT16文件系统的FAT2除了0号FAT项和1号FAT项以外,如果一个FAT项为非零值,那么可能有三种情况:①该FAT项映射的簇是一个不可用的坏簇,那么该FAT项中的值为坏簇标志(对于FAT16来说为FFF7H);②该FAT项映射的簇是某个文件的最后一个簇,那么该FAT项中的值为结束标志(对于FAT16来说为FFFFH);③该FAT项映射的簇被某个文件占用,但并不是文件的最后一个簇,那么该FAT项中的值是文件下一个簇的簇号。举例来说,假设某个文件被分配到数据区的2、3、4三个簇中存放,第一个簇号“2”这个数值会在该文件的目录项中记录(这个后面会讲到),3和4两个簇号则在FAT表中记录。记录的方法是:在2号簇所映射的2号FAT项中记录簇号“3”,在3号簇所映射的3号FAT项中记录簇号“4”,在4号簇所映射的4号FAT项中记录结束标志“FFFF”,具体情况如图4-227所示。图4-227FAT项实例注意这里的数值字节序为“Little-Endian”,比如2号FAT项中的值从高位往低位读取应该是“0003”,也就是十进制的“3”。那么如何定位每一个FAT项在FAT表中的具体地址呢?这个很简单,在FAT16文件系统中,因为每个FAT项占用2字节,所以只要把FAT项号乘以2,得到的结果就是该FAT项在FAT表中的起始偏移地址。例如,想知道100号FAT项在FAT表中的具体地址,用100乘以2得到结果为200,那么从FAT表的开始处算起的200号偏移,就是100号FAT项在FAT表中的起始偏移地址。另外也可以用WinHex方便地找到每一个FAT项的起始地址,菜单栏的“位置”→“转至FAT记录”命令就可以实现这个功能,如图4-228所示。例如,想找100号FAT项在FAT表中的地址,打开菜单“位置”→“转至FAT记录”命令后输入“100”,并单击“确定”按钮即可,如图4-229所示。图4-228“转至FAT记录”菜单图4-229转至100号FAT项单击“确定”按钮之后光标就会停在FAT表中100号FAT项的首字节处了。4.4.4FAT16文件系统的FDT分析1.FDT的位置FDT的含义为文件目录表,它在一个文件系统中的具体位置是紧跟在FAT2之后。下面模拟一下操作系统定位FDT的方法。这里依然以图4-222中的DBR所在分区为例,定位FDT的步骤如下:①系统通过该分区的分区表信息,定位到其DBR扇区;②读取DBR的0EH~0FH偏移处,得到“DBR保留扇区数”的值为6;③读取DBR的16H~17H偏移处,得到“每FAT扇区数”的值为141;④用“DBR保留扇区数”加上2倍的“每FAT扇区数”,结果等于288,跳转到该分区的288号扇区,这里就是FDT的开始。2.FDT的数据内容在“1.FDT的位置”中通过模拟操作系统定位FDT的方法,确定了FDT开始于分区的288号扇区。现在跳转到288号扇区,其内容如图4-230所示。可以看见FDT所在的288号扇区完全为“00”,这是因为该分区是一个新格式化的分区,分区被格式化为FAT16文件系统后,其FDT所在区域都要被清零。那么FDT区域占用多少扇区呢?这个在前面提到过,FDT是用来存放根目录下的文件的目录项的,DBR中11H~12H偏移处的两个字节的含义为“根目录项数”,该值一般为512,也就是说FDT中只能存放最多512个目录项,而每个目录项的大小为32字节(目录项的结构4.4.5节会详细分析),这样算下来FDT的扇区数为32个。如果在分区的根目录项存入文件,FDT区就会有数据了。现在在该分区下存入一个文件,然后再查看一下FDT,其内容如图4-231所示。图4-230FDT扇区图4-231存入数据后的FDT扇区4.4.5FAT16文件系统目录项分析1.目录项的作用及结构特点目录项对于FAT文件系统来讲也是很重要的一个组成部分,其主要作用及结构特点如下(如果没有特别说明,以下的作用和特点适用于FAT12、FAT16及FAT32文件系统中的目录项)。(1)分区中的每个文件和文件夹(也称为目录)都被分配一个大小为32字节的目录项,用以描述文件或文件夹的属性、大小、起始簇号和时间、日期等信息,当然还会把文件名或目录名也记录在目录项中。(2)在FAT文件系统中,目录被视为特殊类型的文件,所以每个目录也跟文件一样有目录项。(3)在FAT16文件系统下,分区根目录下的文件及文件夹的目录项存放在FDT中,分区子目录下的文件及文件夹的目录项存放在数据区相应的簇中。(4)根据目录项的作用和结构特点,可以把目录项分为四类:①短文件名目录项;②长文件名目录项;③“.”目录项和“..”目录项;④卷标目录项。2.短文件名目录项所谓短文件名是指DOS和Windows3.x时代文件名的传统格式,即“8.3”格式。在这种格式的限制下,用户在给文件起名时,主文件名不能超过8个字符,并且不能支持中文;扩展名不能超过3个字符,所以称为“8.3”格式。在这种格式下,文件目录项中只需要8+3=11字节就可以记录文件名了(主文件名和扩展名之间的“.”是默认的,不用记录),这种格式的目录项也就称为短文件名目录项。下面看一个具体的短文件名目录项,如图4-232所示。图4-232短文件名目录项图4-232所示是两条文件目录项,每条目录项占32字节,从WinHex中看也就是两行数据。短文件名目录项的含义见表4-23。表4-23FAT16短文件名目录项的含义另外WinHex的模板管理器中也提供模板可以查看文件目录项的结构。这里以图4-232中的第二条目录项为例,将光标放在第二条目录项的第一字节上,然后打开模板管理器,选择短文件名目录项的模板,如图4-233所示。图4-233选中短文件名目录项的模板双击选中的模板,就能看见该目录项各字节的含义了,如图4-234所示。图4-234短文件名目录项的模板下面对这些参数做详细分析。(1)主文件名(00~07H)这是主文件名,共占8字节,如果文件名用不完8字节,后面用空格(十六进制数值为20H)填充。在当前例子中,主文件名为“FAT16”。另外该位置的第一字节也用来表示目录项的分配状态:当这个字节是“00”时,表示该目录项从未使用过;当这个字节是“E5”时,表示该目录项曾经使用过,但目前已经被删除。(2)文件的扩展名(08H~0AH)文件的扩展名共占3字节,对于文件夹来说没有扩展名,那么这三个字节用空格填充。在当前例子中扩展名为“TXT”。(3)文件属性(0BH~0BH)文件属性占1字节,可以表示文件的各种属性,表示的方法是按二进制位定义,最高两位保留未用,0~5位分别是只读位、隐藏位、系统位、卷标位、子目录位、存档位。在当前例子中属性值为“20H”,换算为二进制等于“00100000”,所以该文件为存档属性。(4)未用(0CH~0CH)该字节不使用。(5)文件创建时间精确到10ms的值(0DH~0DH)文件在创建时的时间值中精确到10ms的值用该字节表示。在当前例子该值为“86H”,换算为十进制等于134,所以文件的创建时间为1340ms,也就是1.34s。(6)文件创建时间(0EH~0FH)这是文件创建的时、分、秒的数值,用十六位二进制记录文件创建时间,时、分、秒三个部分的表达方法如下:①0~4位,这5位记录“秒”值,单位是2s,也就是把这四个位的值乘以2才是文件创建时间的“秒”值,其取值范围是0~29。②5~10位,这6位记录“分”值,其取值范围是0~59。③11~15位,这5位记录“时”值,其取值范围是0~23。在当前例子中该值为“27H98H”,这是Little-Endian的字节序,从高位往低位写应为“98H27H”,将其换算为二进制,结果为“1001100000100111”。具体时间表达方式如图4-235所示。图4-235时间表达方式经过计算其时间为19时01分14秒,再加上其毫秒值1340,所以该文件最终的创建时间为19时01分15秒340毫秒。这个时间可以通过查看文件的属性获得,如图4-236所示。图4-236“fat16.txt”的属性信息在属性信息中文件的创建时间精确到秒,所以是19时01分15秒。(7)文件创建日期(10H~11H)这是文件创建的年、月、日的数值,用十六位二进制记录文件创建日期,年、月、日三个部分的表达方法如下:①0~4位,这5位记录“日”值,其取值范围是1~31。②5~8位,这4位记录“月”值,其取值范围是1~12。③9~15位,这7位记录“年”值,其值是相对于1980年开始计数的,必须加上1980才是正确的年份,其取值范围是0~127,也就是可以从1980年记录到2107年。在当前例子中该值为“52H3BH”,这是Little-Endian的字节序,从高位往低位写应为“3BH52H”,将其换算为二进制,结果为“0011101101010010”。具体日期表达方式如图4-237所示。图4-237日期表达方式(8)文件最近访问日期(12H~13H)这是文件最后访问的年、月、日的数值,用十六位二进制记录文件最后访问日期。其表达方式与文件创建日期一致,不再重复。(9)未用(14H~15H)这两个字节FAT16不用。(10)文件修改时间(16H~17H)这是文件最后修改的时、分、秒的数值,用十六位二进制记录文件最后修改时间。其表达方式与文件创建时间一致,不再重复。(11)文件修改日期(18H~19H)这是文件最后修改的年、月、日的数值,用十六位二进制记录文件最后修改日期,其表达方式与文件创建日期一致,不再重复。(12)文件起始簇号(1AH~1BH)文件起始簇号占用2字节,文件起始簇号是指文件的内容在数据区中存放的地址中的第一个簇号。当前值为5,说明文件开始于5号簇。(13)文件大小(1CH~1FH)文件大小占用4字节,记录着文件的总字节数。当前值为“01H40H”,换算成十进制就是320,说明文件大小为320字节。文件大小也可以通过查看文件的属性获得,如图4-238所示。图4-238文件大小的信息到此一个FAT16的短文件名目录项也就分析完了。3.长文件名目录项从在Windows95开始,文件名“8.3”格式的限制被打破了,文件名可以超过8个字符,并且可以使用中文了,扩展名也可以超过3字节,这种格式的文件名就称为长文件名。不过在Windows95以上的系统中创建的长文件名需要考虑与DOS和Windows3.x的兼容问题,所以在Windows95以上的系统中,超过8.3格式的文件或目录实际存储着两个名字,一个短文件名和一个长文件名。如果是短文件名,则存储在短文件名目录项中。当创建一个长文件名时,其对应短文件名的存储有以下三个处理原则。①系统取长文件名的前6个字符加上“~1”形成短文件名,其扩展名不变;②如果已存在这个名字的文件,则符号“~”后的数字自动增加;③如果有DOS和Windows3.x非法的字符,则以下画线“_”替代。每个长文件名目录项也占用32字节,一个目录项作为长文件名目录项使用时,其属性字节值为0FH,能够存储13个字符,如果文件名很长,一个长文件名就需要多个目录项,这些目录项按倒序排列在其短文件名目录项之前。长文件名目录项的具体结构见表4-24。表4-24FAT长文件名目录项的含义下面看一个具体的实例,一个文件的名称为“shu-ju-hui-fu-ji-shu-shen-du-jie-mi.txt”,它共有4个目录项:1个短文件名目录项、3个长文件名目录项,如图4-239所示。图4-239长文件名目录项图4-239中的“①”是一条短文件名目录项,文件名为“shu-ju~1.txt”,这是系统自动生成的,其结构在前面分析过,不再重复。图4-239中的“②、③、④”是三条长文件名目录项,它们以倒序的方式排列在其短文件名目录项之前。另外WinHex的模板管理器中也提供模板可以查看长文件目录项的结构。这里以图4-239中的“②”号目录项为例,将光标放在“②”号目录项的第一个字节上,然后打开模板管理器,选择长文件名目录项的模板,如图4-240所示。图4-240选中长文件名目录项的模板双击选中的模板,就能看见该目录项各字节的含义了,如图4-241所示。图4-241“②”号长文件名目录项的模板下面对这些参数做详细分析。(1)序列号(00)序列号占1字节,该参数用来描述长文件名目录项的排序。在这个字节的8位当中,0~4位这5位描述长文件名目录项的顺序号,从1开始编号。6位(也就是第7位)如果为“1”表明该目录项是最后一项。如果文件删除,该字节也会改为“E5”。在当前例子中的值为“01”,说明这是第一个长文件名目录项。(2)文件名的第1~5个Unicode码字符(01H~0AH)该参数长度为10字节,使用UTF-16编码存储5个Unicode字符的文件名,每个字符占用两字节。如果文件名已经记录完,但该参数的空间中还有未用的字节,就会在文件名最后一个字符后填充两个字节的“00”,随后未用的字节用“FF”填充。在当前例子中该位置记录了5个字符:shu-j。(3)长文件名目录项的属性标志(0BH~0BH)该参数长度为1字节,是属性字节。当属性的只读位、隐藏位、系统位、卷标位全为1,其他位全为0时,该值就为十六进制的“0FH”,表示该目录项为长文件名记录项。(4)未用(0CH~0CH)该字节不使用。(5)短文件名校验和(0DH~0DH)该参数长度为1字节,是一个校验和,长文件名目录项通过这个校验和将其与相应的短文件名目录项关联起来。校验和的数值是使用短文件名计算得到,同一文件的长文件名目录项的校验和必须是相同的。校验和的计算方法是依次将短文件名的各个字符对应的二进制值相加,在每一步相加前要先将二进制的结果值依次向右移动一位,最右边的位循环移动到最左边,然后再加上下一个字符所对应的二进制值,直到把最后一个字符加完,结果就是校验和的数值。(6)文件名的第6~11个字符(0EH~19H)该参数长度为12字节,使用UTF-16编码存储6个Unicode字符的文件名,每个字符占用2字节。如果文件名已经记录完,但该参数的空间中还有未用的字节,就会在文件名最后一个字符后填充两个字节的“00”,随后未用的字节用“FF”填充。在当前例子中该位置记录了6个字符:u-hui-。(7)始终为0(1AH~1BH)该参数长度为2字节,始终都为0。(8)文件名的第12~13字符(0EH~19H)该参数长度为4字节,使用UTF-16编码存储2个Unicode字符的文件名,每个字符占用两字节。该参数的空间中未用的字节用“FF”填充。在当前例子中该位置记录了2个字符:fu。图4-239中的“②”号长文件名目录项就分析完了。下面继续分析“③”号和“④”号长文件名目录项,它们的模板如图4-242和图4-243所示。图4-242“③”号长文件名目录项的模板图4-243“④”号长文件名目录项的模板“④”号长文件名目录项的首字节为“43H”,换算为二进制等于“01000011”,其0~4位的值为“00011”,说明这是第三个长文件名目录项,6位上的值是“1”,说明这是最后一项长文件名目录项。“②、③、④”三条长文件名目录项的结构完全一样,以倒序的方式排列在其短文件名目录项之前,完整地记录了文件名“shu-ju-hui-fu-ji-shu-shen-du-jie-mi.txt”。4.“.”目录项和“..”目录项在子目录所在的文件目录项区域中,总有两个特殊的目录,它们就是“.”目录和“..”目录。这两个目录可以用DOS命令“DIR”查看到,如图4-244所示。图4-244“DIR”命令查看“.”目录和“..”目录使用DIR列目录后,可以看到前两个就是“.”目录和“..”目录,其中:①“.”表示当前目录。②“..”表示上级目录。打开WinHex查看“.”目录和“..”目录的目录项,其内容如图4-245所示。图4-245“.”目录和“..”目录的目录项其中“①”号目录项是“.”目录的目录项,“②”号目录项是“..”目录的目录项,它们的模板如图4-246和图4-247所示。图4-246“.”目录的目录项模板图4-247“..”目录的目录项模板从这两个目录项的实际数据可以得到以下结论:①“.”目录项所描述的“起始簇号”是子目录本身所在的簇号。当前值为7,说明“.”目录项所在的簇就是7号簇。②“..”目录项所描述的“起始簇号”是上一级目录的起始簇号,如果上一级目录是根目录,则该簇号值被置成0。当前值为0,说明该子目录的上级目录就是根目录。③“.”目录和“..”目录的“文件大小”都是0,这同所有的目录一样,不记录大小。系统利用“.”目录和“..”目录来实现目录之间的双向联系,从而把整个文件系统联系在一起。5.卷标目录项卷标就是一个分区的名字,可以在格式化分区时创建,也可以随时修改。在DOS时代,卷标记录在DBR的BPB中,目前的系统则把卷标当作文件,用文件目录项进行管理,系统为卷标建一个目录项,放在根目录区中,对于FAT16来说,就是放在FDT中。当前有一个卷标为“1234567890”的分区G,如图4-248所示。图4-248卷标为“1234567890”的分区G其卷标所在目录项如图4-249所示。图4-249卷标的目录项卷标的目录项属于短文件名目录项,它有如下特点:①对于FAT格式的分区,卷标的长度最多允许达到11字节,如果卷标为中文,则最多支持5个字符。②卷标的目录项中不记录起始簇号和大小。③卷标的目录项中不记录创建时间和最后访问时间,只记录修改时间。4.4.6FAT16文件系统根目录与子目录的管理FAT16文件系统对于根目录下文件的管理,统一在FDT区为这些文件创建目录项,并由FAT为文件的内容分配簇存放数据。具体看一个例子,目前在G盘根目录下有一个文件“fat16.txt”,我们看FAT16文件系统如何管理这个文件。第1步定位DBR。通过分区表定位到G盘的开始位置,在63号扇区,这个扇区就是G盘的DBR扇区。第2步定位FDT。访问DBR扇区的BPB,通过“DBR保留扇区数”、“每FAT扇区数”两个参数的值便可计算出FDT的开始扇区,具体算法在前面讲解过。第3步定位目录项。找到FDT后,通过文件名定位到目标文件的目录项,其目录项如图4-250中的阴影部分所示。图4-250目标文件的目录项该目录项的模板如图4-251所示。图4-251目录项的模板从模板中可以看到文件开始簇号为5,文件大小为320字节。第4步定位FAT。因为文件开始于5号簇,其下一簇的簇号在FAT表中5号FAT项里存放着,所以通过DBR的BPB参数“DBR保留扇区数”定位FAT1的开始扇区,并跳转过去,找到5号FAT项,其数值如图4-252所示。图4-252FAT1的开始扇区图4-252中阴影部分就是FAT1的5号FAT项,数值为“FFFF”,说明是个结束标志,所以文件“fat16.txt”只占用1个簇,就是5号簇。第5步定位数据区。确定了文件存放在数据区的5号簇,最后就该去5号簇查看数据了。因为数据区中的簇从2开始编号,所以5号簇所对应的扇区号计算方法如下:DBR保留扇区数+2×每FAT扇区数+FDT占用扇区数(一般为32)+(5−2)×每簇扇区数计算出结果后跳转过去,内容如图4-253所示。图4-253文件的内容因为文件大小是320字节,所以从5号簇的第一个字节起,连续的320字节就是文件“fat16.txt”的内容,即图4-253中的阴影部分。以上就是FAT16文件系统根目录的管理,其子目录的管理与FAT32文件系统类似,请读者参见FAT32部分的4.5.6节的“2.子目录的管理”。4.4.7FAT16文件系统删除文件的分析1.文件删除前的底层分析首先来从文件系统底层了解一下FAT16文件系统中文件各部分结构的管理。现在以FAT16分区中的文件“kuihua.jpg”为例,讲解文件的各部分结构,文件如图4-254所示。图4-254FAT16分区中的文件“kuihua.jpg”这是一个图片文件,打开该文件其画面如图4-255所示。图4-255文件“kuihua.jpg”的画面该文件在FAT16文件系统中由三部分结构进行管理,分别为文件目录项、FAT表和数据区。文件目录项的内容如图4-256所示。图4-256文件“kuihua.jpg”的文件目录项从目录项中可看出该文件开始于02H(十进制值为2)簇,文件大小为03BD00H(十进制值为244992)字节,图4-257是该文件在FAT表中的簇链。图4-257文件“kuihua.jpg”在FAT表中的簇链FAT16文件系统的FAT表是16位的,每个FAT项占用2字节,可以看出该文件是连续存放的,共占用4个簇。然后再用WinHex跳转到分区的2号簇,其部分内容如图4-258所示。图4-2582号簇的部分内容从2号簇所在扇区开始,往后连续的244992(“kuihua.jpg”文件的大小)字节,就是这个文件的所有数据。2.文件删除后的底层分析为了学习文件删除后恢复的方法,还需要从文件系统级别了解一下文件删除时在FAT16文件系统中发生的变化。查看了“kuihua.jpg”文件的各部分结构后,现在把此文件彻底删除,然后再对其各部分结构进行分析,并讲解恢复的思路。首先将文件“kuihua.jpg”删除(彻底删除,不是放入回收站),如图4-259所示。图4-259删除文件“kuihua.jpg”“kuihua.jpg”文件删除后其目录项如图4-260所示。图4-260“kuihua.jpg”文件删除后的目录项从图4-260中可以看出“kuihua.jpg”文件目录项的第一个字节已经被改为“E5”了,而文件名的其他字节没有变化,文件开始簇号02H(十进制值为2)没有改变,文件大小03BD00H(十进制值为244992)字节也没有改变。“kuihua.jpg”文件删除后其FAT表的簇链如图4-261所示。图4-261“kuihua.jpg”文件删除后其FAT表的簇链很明显“kuihua.jpg”文件删除后其FAT表的簇链已经全部清零。下面再来看数据区,跳转到“kuihua.jpg”文件的开始位置:2号簇,其部分内容如图4-262所示。图4-262“kuihua.jpg”文件的部分数据内容从图4-262中看,数据区的内容并没有改变。3.文件删除后的恢复将这个被删除的文件的数据区的内容全部选中,并另存为一个新文件,如图4-263所示。图4-263将“kuihua.jpg”文件的数据区选中并另存将该文件的数据区中这些十六进制值保存到D盘根目录下,并命名为“123.jpg”。保存后在D盘根目录下可以看到“123.jpg”文件,如图4-264所示。图4-264D盘根目录下的“123.jpg”文件这个文件就是用WinHex从FAT16分区中恢复出来的被删除的“kuihua.jpg”文件的数据区的内容,双击打开这个文件,可以看到如图4-265所示的图片。图4-265被恢复出来的文件打开后的画面很明显,这个文件的画面就是被删除的“kuihua.jpg”文件,以上的过程也就是恢复被删除的文件的过程。另外,删除的文件也可以用数据恢复软件,如FinalData、EasyRecovery、R-Studio等,这些工具使用方法很简单,读者可以自行尝试。4.4.8FAT16文件系统误格式化的分析1.格式化的底层分析格式化其实就是给分区创建一个文件系统,首先看一个有数据的FAT16分区,然后将其格式化,并分析格式化后原来数据的改变。图4-266是一个FAT16分区“J”中的数据,一个文件“kuihua.jpg”和一个文件夹“123”。图4-266一个FAT16分区“J”中的数据文件夹“123”下有一个文件“123.jpg”,如图4-267所示。图4-267文件夹“123”下的文件“123.jpg”该分区的FAT表的部分内容如图4-268所示。图4-268FAT16分区“J”的FAT表的部分内容该分区的FDT的部分内容如图4-269所示。图4-269FAT16分区的FDT的部分内容FDT中是文件夹“123”及文件“kuihua.jpg”的目录项。文件夹“123”下的文件“123.jpg”的文件目录项如图4-270所示。图4-270文件夹“123”下的文件“123.jpg”的文件目录项文件“123.jpg”的文件目录项之前还有两个目录项,它们是“.”目录和“..”目录的目录项。现在将这个FAT16分区“J”格式化,如图4-271所示。图4-271格式化FAT16分区格式化后再来看这个分区的FAT表,发现FAT表除了0号FAT项和1号FAT项以外,已被完全清空,如图4-272所示。图4-272格式化后FAT表被清零跳转到FDT区,看到FDT也被完全清零,如图4-273所示。图4-273格式化后FDT被清零再跳转到子目录区,发现文件夹“123”下的文件“123.jpg”的目录项还在,如图4-274所示。图4-274文件夹“123”下的文件“123.jpg”的目录项依然存在2.格式化之后文件的恢复从前面的分析可以看出来,FAT16文件系统格式化之后,FAT表的簇链全部清零,FDT区中的文件目录项也被清零,所以根目录下的文件就很难被恢复了,因为没有目录项就无法知道这些文件名及它们存放的地址。子目录的目录项还保存着,没有被清零,所以子目录下的文件是有机会恢复的,如“123.jpg”这个文件,从图4-274中可以看出文件开始簇号为07H,文件大小为03BD00H(十进制值为244992),跳转到7号簇,其部分内容如图4-275所示。图4-275文件“123.jpg”的数据只要从7号簇所在扇区开始,连续选中244992字节,并另外保存,就可以将文件恢复。具体做法在前面讲过,这里就不再演示。注意这种方法只适用于文件连续存放的情况,如果文件不连续,这样恢复出来的数据就是不完整的。4.4.9FAT16文件系统DBR手工重建的实例一个FAT16分区“K”双击打开时出现如图4-276所示的提示信息。这个分区“K”所在的硬盘没有任何物理故障,显然是文件系统遭到破坏,所以系统会提示分区未格式化,用WinHex打开分区“K”,出现如图4-277所示的信息。图4-276打开分区“K”时出错图4-277用WinHex打开分区“K”出错看来WinHex也无法打开分区“K”,可以断定DBR一定有错误,只能用WinHex打开分区“K”所在的硬盘,然后跳转到“K”盘的DBR扇区,如图4-278所示。从图4-278中可以看到“K”盘的DBR扇区已经被完全破坏。DBR是文件系统中的一个非常重要的扇区,这个扇区被破坏了,分区当然无法打开。下面来修复DBR扇区。图4-278“K”盘的DBR扇区DBR扇区的结构分为以下几个部分:跳转指令、OEM代号、BPB参数、引导代码和结束标志。同一文件系统类型的DBR扇区,除了BPB参数有部分不一样以外,其他各部分都是一样的,所以恢复DBR的方法是从同一文件系统类型的分区中复制一个DBR,然后再对BPB参数进行修改,就可以了。现在将另外一个FAT16分区的DBR扇区复制到“K”盘DBR所在的扇区,覆盖原来的数据,如图4-279所示。图4-279临时复制的一个DBR其BPB参数的模板如图4-280所示。因为同样是FAT16文件系统的DBR扇区,所以大部分BPB参数的值都是一样的,只有个别参数的值可能不一样,需要修改,这几个参数是每簇扇区数、保留扇区数、分区大小、FAT表大小,其他的都不用修改。下面对这些值进行验证并修改。第1步验证“保留扇区数”。保留扇区数也就是DBR与FAT1之间的扇区数,用WinHex搜索FAT1,搜索的设置如图4-281所示。搜索发现4号扇区就是FAT1,所以“保留扇区数”的值应该为“4”。图4-280复制过来的DBR扇区的BPB参数模板图4-281搜索FAT1第2步验证“分区大小”。因为该分区的分区表是完好的,所以可以从分区表中获得该分区的大小,其分区表如图4-282所示。图4-282该分区的分区表图4-282中选中的4个字节就是这个分区的总扇区数,值为22514DH,转换为十进制等于2249037,所以分区大小为2249037个扇区。第3步验证“FAT表大小”。因为FAT1开始于4号扇区,在随后搜索找到FAT2开始于142号扇区,所以可以确定FAT表大小为138个扇区。第4步验证“每簇扇区数”。每簇扇区数这个参数需要通过计算获得,计算方法如下:①算出该分区中数据区的大小。计算方法:分区总扇区数−DBR保留扇区数−2×每FAT扇区数−FDT占用的扇区数,即2249037−4−2×138−32=2248725。②算出该分区的FAT表中记录的FAT项的个数。计算方法:(FAT表大小×512)/2,FAT表大小乘以512是FAT表的总字节数,除以2是因为FAT16每个FAT项占16位,即2字节,结果为138×512/2=35328。③用①的结果除以②的结果就得到每簇扇区数为32。这种算法一般不会刚好得到整数,需要四舍五入取整数。BPB的参数都已计算完毕,用模板填入DBR即可,如图4-283所示。图4-283修改后的BPB参数填完后,存盘,分区就可以打开了,如图4-284所示。图4-284修复后的“K”盘4.5FAT32文件系统详解4.5.1FAT32文件系统结构总览FAT32文件系统是从微软Windows95系统的OSR2版本开始使用的,它能够支持大于32MB小于32GB的分区。虽然第三方的格式化程序可以把超过32GB的分区格式化为FAT32,但微软自身的系统不允许将大于32GB的分区格式化为FAT32文件系统。FAT32文件系统由DBR及其保留扇区、FAT1、FAT2、DATA区四个部分组成,其结构如图4-285所示。图4-285FAT32文件系统结构图这些结构是在分区被格式化时创建出来的,它们的含义如下:①DBR及其保留扇区。DBR的全称为DOSBootRecord,含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往有一些保留扇区。②FAT1。FAT的全称为FileAllocationTable,含义是文件分配表,FAT32一般有两份FAT,FAT1是第一份,也是主FAT。③FAT2。FAT2是FAT32的第二份文件分配表,也就是FAT1的备份,称为备份FAT。④DATA。DATA也就是数据区,是FAT32文件系统的主要区域,其中也包含目录区。4.5.2FAT32文件系统的DBR分析FAT32文件系统的DBR与FAT16的DBR很类似,也由5部分组成,分别为跳转指令、OEM代号、BPB、引导程序和结束标志,图4-286所示是一个完整的FAT32文件系统的DBR。图4-286FAT32文件系统的DBR1.跳转指令跳转指令本身占用2字节,它将程序执行流程跳转到引导程序处,比如当前DBR中的“EB58”,就是代表汇编语言的“JMP58”。需要注意该指令本身占用2字节,计算跳转目标地址时以该指令的下一字节为基准,所以实际执行的下一条指令应该位于5A。紧接着跳转指令的是一条空指令NOP(90H)。2.OEM代号这部分占8字节,其内容由创建该文件系统的OEM厂商具体安排。当前DBR中的OEM代号为“MSDOS5.0”,说明这个FAT32分区是由微软的Windows2000以上的操作系统格式化创建的。3.BPBFAT32的BPB从第DBR的第12(0BH偏移处)个字节开始,占用79字节,记录了有关该文件系统的重要信息,其中各个参数的含义见表4-25。表4-25FAT32的BPB参数这些参数也可以使用WinHex中的模板来查看,WinHex的模板管理器中提供FAT32的DBR模板。打开WinHex的模板管理器,选择FAT32的DBR模板,如图4-287所示。双击模板后就可以查看FAT32的DBR信息了,如图4-288所示。图4-287选择FAT32的DBR模板图4-288FAT32的DBR模板下面对这些参数作详细分析。(1)0BH~0CH:每扇区字节数记录每个逻辑扇区的大小,一般为512字节,但512并不是固定值,该值可以由程序定义,合法值包括512、1024、2048和4096字节。(2)0DH~0DH:每簇扇区数每簇扇区数记录着文件系统的簇大小,即由多少个扇区组成一个簇。FAT32最大支持128扇区的簇。在FAT32文件系统中所有的簇从2开始进行编号,每个簇都有一个自己的地址编号,并且所有的簇都位于数据区内,在数据区之前是没有簇的。(3)0EH~0FH:DBR保留扇区数DBR保留扇区数是指DBR本身占用的扇区以及其后保留扇区的总和,也就是DBR到FAT1之间的扇区总数,或者说是FAT1的开始扇区号。对于FAT32文件系统来说,该值的取值范围是32扇区到38扇区之间。(4)10H~10H:FAT个数FAT个数描述了该文件系统中有几个FAT表,一般在FAT文件系统中都有两个FAT,即FAT1和FAT2,FAT2是FAT1的备份。(5)11H~12H:未用这两个字节在FAT16中用来表示FDT中最大所能容纳的目录项数,FAT32没有固定的FDT,所以不用这个参数。(6)13H~14H:未用这两个字节在FAT16中用来表示小于32MB的分区的扇区总数,FAT32的总是大于32MB,所以不用这个参数。(7)15H~15H:介质描述符介质描述符是描述磁盘介质的参数,根据磁盘性质的不同,取不同的值。具体取值见表4-21。(8)16H~17H:未用这两个字节在FAT16中用来表示每个FAT表包含的扇区数,FAT32不用这个位置。(9)18H~19H:每磁道扇区数这是逻辑C/H/S中的一个参数,其值一般为63。(10)1AH~1BH:磁头数这也是逻辑C/H/S中的一个参数,其值一般为255。(11)1CH~1FH:隐藏扇区数隐藏扇区数是指本分区之前使用的扇区数,该值与分区表中所描述的该分区的起始扇区号一致。对于主磁盘分区来讲,是MBR到该分区DBR之间的扇区数;对于扩展分区中的逻辑驱动器来讲,是其EBR到该分区DBR之间的扇区数。(12)20H~23H:扇区总数扇区总数是指分区的总扇区数,也就是FAT32分区的大小。(13)24H~27H:每FAT扇区数这四个字节用来记录FAT32分区中每个FAT表占用的扇区数。(14)28H~29H:标志这两个字节用于表示FAT2是否可用,当其二进制最高位置1时,表示只有FAT1可用,否则FAT2也可用。(15)2AH~2BH:版本这两个字节通常都为0。(16)2CH~2FH:根目录首簇号分区在格式化为FAT32文件系统时,格式化程序会在数据区中指派一个簇作为FAT32的根目录区的开始,并把该簇号记录在BPB中。通常都是把数据区的第一个簇分配给根目录使用,也就是2号簇。(17)30H~31H:文件系统信息扇区号FAT32文件系统在DBR的保留扇区中安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个空闲簇的簇号,该扇区一般在分区的1号扇区,也就是紧跟着DBR后的一个扇区,其内容如图4-289所示。图4-289文件系统信息扇区该扇区具体结构参数见表4-26。表4-26文件系统信息扇区的参数文件系统信息扇区的参数模板如图4-290所示。图4-290文件系统信息扇区的参数模板(18)32H~33H:DBR备份扇区号FAT32文件系统在DBR的保留扇区中安排了一个DBR的备份,一般在6号扇区,也就是分区的第7个扇区。该备份扇区与原DBR扇区的内容完全一样,如果原DBR遭到破坏,可以用备份扇区修复。(19)34H~3FH:未用这12个字节保留不用。(20)40H~40H:BIOS驱动器号这是BIOS的INT13H所描述的设备号码,一般把硬盘定义为8xH。(21)41H~41H:未用这一个字节不使用,为0。(22)42H~42H:扩展引导标记扩展引导标记用来确认后面的三个参数是否有效,一般值为29H。(23)43H~46H:卷序列号卷序列号是格式化程序在创建文件系统时生成的一组4字节的随机数值。(24)47H~51H:卷标卷标是由用户在创建文件系统时指定的一个卷的名称,原来的系统把卷标记录在这个地址处,现在的系统已经不再使用这个地址记录卷标,而是由一个目录项来管理卷标。(25)52H~59H:文件系统类型BPB的最后一个参数,直接用ASCII码记录当前分区的文件系统类型。4.引导程序FAT32的DBR引导程序占用420字节(5AH~1FDH),在Windows98之前的系统之下,这段代码负责完成DOS三个系统文件的装入,在Windows2000之后的系统中,其负责完成将系统文件NTLDR装入,对于一个没有安装操作系统的分区来讲,这段程序没有用处。5.结束标志DBR的结束标志与MBR、EBR的结束标志都相同,为“55AA”。以上5个部分共占用512字节,正好是一个扇区,因此称它为DOS引导扇区。该部分的内容中除了第5部分结束标志是固定不变之外,其余4个部分都是不完全确定的,都因操作系统版本的不同而不同,也因硬盘的逻辑盘参数的变化而变化。4.5.3FAT32文件系统的FAT表分析1.FAT表的作用及结构特点FAT32的FAT表与FAT16的FAT表作用和结构大同小异,详细内容可以参见4.4.3节中的讲述,这里只强调一下针对FAT32文件系统FAT表的特点。①FAT32的FAT表也是由FAT表项构成的,每个FAT项的大小有32位(相当于4字节)。②虽然FAT32文件系统的FAT项是32位的,但是Windows系统只能用到26位。26位的FAT项最多可管理67108863个簇。③从Windows2000系统开始,系统能管理的簇大小可以达到128个扇区(64KB),而FAT32最多可管理的簇数为67108863,那么理论上FAT32能够管理的分区大小为64×67108863=4294967232KB=4096GB=4TB。但这只是理论数值,实际上FAT32只能管理32GB的分区,原因就是Windows系统用26位的寄存器寄存文件系统中簇的个数,那么同时也就用26位的寄存器来寄存分区访问的扇区数,这样分区能够管理的扇区总数就是2的26次方,也就是67108864个扇区,换算一下刚好等于32GB,所以在Windows系统下不可能把一个大于32GB的分区格式化为FAT32文件系统,但第三方工具不是用26位寻址,当然可以把大于32GB的分区格式化为FAT32文件系统。④FAT32文件系统的FAT表中,未使用的簇对应的FAT项用“00000000”这4字节表示;一个已分配的簇号对应的FAT项取值范围是十六进制的“00000002~0FFFFFFE”;十六进制“0FFFFFF0~0FFFFFF6”这个范围的取值是保留的;坏簇对应的FAT项用“0FFFFFF7”这4字节的十六进制值表示;文件结束簇对应的FAT项取值范围是十六进制的“0FFFFFF8~0FFFFFFF”,一般都取“0FFFFFFF”这个值,按照LittleEndian的字节序来写就是“FFFFFF0F”。2.FAT表的实际应用这里再模拟一下操作系统定位FAT32文件系统FAT表的方法,首先定位FAT1,这里以图4-286中的DBR所在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 代销意向合同范本
- 二手车线上交易合同范本
- 众筹股东合同范本6
- 买卖带表格合同范例
- 加工中心保养合同范本
- 兄弟共同承包土地合同范本
- 办公电脑合同范本
- 代理执行合同范本
- 共同买地皮合同范本
- pc吊装合同范本
- 人教版区域地理课件世界地理之中亚五国【公开课教学PPT课件】高中地理
- 人教版九年级下册初中英语全册作业设计一课一练(课时练)
- 2021新版GJB9001C-2017体系文件内审检查表
- 风筛式清选机的使用与维护
- 《计算流体力学CFD》
- 马克思主义宗教观课件
- 语文版九年级下册课外阅读练习
- 【课件】第11课+美术的曙光-史前与早期文明的美术+课件高中美术人教版(2019)美术鉴赏
- 乐沛LOTSPLAY德国HABA逻辑思维课程介绍手册
- 高中化学人教版一轮复习-晶体结构与性质(复习课件)
- GB/T 22919.3-2008水产配合饲料第3部分:鲈鱼配合饲料
评论
0/150
提交评论