FAT32与FAT16的区别及FAT32结构Word格式.docx
《FAT32与FAT16的区别及FAT32结构Word格式.docx》由会员分享,可在线阅读,更多相关《FAT32与FAT16的区别及FAT32结构Word格式.docx(15页珍藏版)》请在冰点文库上搜索。
0000000H、00000001H两簇号不使用,其对应的两个DWORD位置(FAT表开头的8个字节)用来存放该盘介质类型编号。
FAT表的大小就由该逻辑盘数据区共有多少簇所决定,取整数个扇区。
(四)FAT32系统一簇对应8个逻辑相邻的扇区,理论上,这种用法所能管理的逻辑盘容量上限为16TB(16384GB),容量大于16TB时,可以用一簇对应16个扇区,依此类推。
FAT16系统在逻辑盘容量介于128MB到256MB时,一簇对应8个扇区,容量介于256MB到512MB时,一簇对应16个扇区,容量介于512MB到1GB时,一簇对应32个扇区,容量介于1GB到2GB时,一簇对应32个扇区,超出2GB的部分无法使用。
显然,对于容量大于512MB的逻辑盘,采用FAT32的簇比采用FAT16的簇小很多,大大减少了空间的浪费。
但是,对于容量小于512MB的盘,采用FAT32虽然一簇8个扇区,比使用FAT16一簇16个扇区,簇有所减小,但FAT32的FAT表较大,占用空间较多,总数据区被减少,两者相抵,实际并不能增加有效存储空间,所以微软建议对小于512M的逻辑盘不使用FAT32。
另外,对于使用FAT16文件系统的用户提一建议,硬盘分区时,不要将分区(逻辑盘)容量正好设为某一区间的下限,例:
将一逻辑盘容量设为1100M(稍大于1024M),则使用时其有效存储容量比分区为950M的一般还少,因其簇大一倍,浪费的空间较多。
还有,使用FDISK等对分区指定容量时,由于对1MB的定义不一样(标准的二进制的1MB为1048576B,有的系统将1MB理解为1000000B,1000KB等),及每个分区需从新磁道开始等因素,实际分配的容量可能稍大于指定的容量,亦需注意掌握。
(五)根目录区(ROOT区)不再是固定区域、固定大小,可看作是数据区的一部分。
因为根目录已改为根目录文件,采用与子目录文件相同的管理方式,一般情况下从第二簇开始使用,大小视需要增加,因此根目录下的文件数目不再受最多512的限制。
FAT16文件系统的根目录区(ROOT区)是固定区域、固定大小的,是从FAT区之后紧接着的32个扇区,最多保存512个目录项,作为系统区的一部分。
(六)目录区中的目录项变化较多,一个目录项仍占32字节,可以是文件目录项、子目录项、卷标项(仅跟目录有)、已删除目录项、长文件名目录项等。
目录项中原来在DOS下保留未用的10个字节都有了新的定义,全部32字节的定义如下:
(1)07字节文件正名
(1)0--7字节文件正名。
(2)8--10字节文件扩展名。
(3)11字节文件属性,按二进制位定义,最高两位保留未用,0至5位分别是只读位、隐藏位、系统位、卷标位、子目录位、归档位。
(4)11--13字节仅长文件名目录项用,用来存储其对应的短文件名目录项的文件名字节校验和等。
(5)13--15字节24位二进制的文件建立时间,其中的高5位为小时,次6位为分钟。
(6)16--17字节16位二进制的文件建立日期,其中的高7位为相对于1980年的年份值,次4位为月份,后5位为月内日期。
(7)18--19字节16位二进制的文件最新访问日期,定义同(6)。
(8)20--21字节起始簇号的高16位。
(9)22--23字节16位二进制的文件最新修改时间,其中的高5位为小时,次6位为分钟,后5位的二倍为秒数。
(10)24--25字节16位二进制的文件最新修改日期,定义同(6)。
(11)26--27字节起始簇号的低16位。
(12)28--31字节32位的文件字节长度。
其中第(4)至(8)项为以后陆续定义的。
对于子目录项,其(12)为零;
已删除目录项的首字节值为E5H。
在可以使用长文件名的FAT32系统中,文件目录项保存该文件的短文件名,长文件名用若干个长文件名目录项保存,长文件名目录项倒序排在文件短目录项前面,全部是采用双字节内码保存的,每一项最多保存十三个字符内码,首字节指明是长文件名的第几项,11字节一般为0FH,12字节指明类型,13字节为校验和,26--27字节为零。
(七)以前版本的Windows和DOS与FAT32不兼容,不能识别FAT32分区,有些程序也依赖于FAT16文件系统,不能和FAT32驱动器一道工作。
将硬盘转换为FAT32,就不能再用双引导运行以前版本的Windows(Windows95[Version4.00.950]、WindowsNT3.x、WindowsNT4.0和Windows3.x)。
硬盘数据恢复知识
数据恢复一直以来都是我们关注的问题,因为你的电脑数据每天都在受着诸如病毒、恶意代码、黑客、误操作等的威胁!
那么如何才能恢复你的数据呢?
希望本文能对你有所帮助!
一、理论篇
要深入学习数据恢复,并非是一件容易的事,要想成为一个数据恢复专家,没有深厚的理论知识是不可能的,你必须了十分了解磁盘的逻辑结构,就让我们来看看需要学习的理论知识吧。
当我们对文件进行访问时,你有没有想过,操作系统是如何对文件进行操作的呢?
这些文件又是如何存放在磁盘当中的呢?
先来看看硬盘的总体结构,在介绍硬盘总体结构之前有必要介绍一下硬盘的参数,硬盘是以磁头(Heads),柱面(Cylinders),扇区(Sectors)进行访问的。
其中:
磁头数(Heads)表示硬盘总共有几个磁头,也就是有几面盘片,最大为255(用8个二进制位存储);
柱面数(Cylinders)表示硬盘每一面盘片上有几条磁道,最大为1023(用10个二进制位存储);
扇区数(Sectors)表示每一条磁道上有几个扇区,最大为63(用6个二进制位存储).每个扇区一般是512个字节,学习过汇编语言的朋友可能想到了,BIOS中断13H的入口参数中,CH是磁道号其值为0H~FEH(最多255个磁道),CL中低6位为扇区号,其值为1H~3FH(最多63个扇区),DH为磁头号的低位,CL中的高2位为磁头号的高位,也就是说,磁头号最多由10位二进制数表示,(1111111111)2=(1023)10,也就是说最多可以表示的磁头数为1024个。
请大家记住这些在我们以后的学习中还会用到的,由此可以看出基于这种访问方式我们最大能访问的磁盘容量为:
255*1023*63*512字节=8414461440/1048576=8024.66M
只有大约8G的空间,这是因为早期磁盘还很小,想想当年你拥有一块200M硬盘时的喜悦心情吧!
就好象当年的科学家们以为1K内存已经很大了一样,让电脑用户很长一段时间都为配置DOS下的内存而烦恼。
而今,你肯定拥有一块大于8G的硬盘了,你能够用她,应该多亏了一种较新的硬盘访问技术——扩展Int13H技术。
采用线性寻址方式存取硬盘,所以突破了8G的限制,而且还加入了对可拆卸介质(如活动硬盘)的支持,因为是谈数据恢复不是谈编程,关于扩展INT13H技术我在此就不详述了。
硬盘数据(基于FAT结构)总体结构如下:
1、主引导扇区(Masterbootsector)(占用一个扇区)
2、第一个分区的引导扇区(Bootsector)(占用一个扇区)
3、第一个分区的FAT1(占用空间由磁盘大小和FAT类型来定)
4、第一个分区的FAT2(占用空间由磁盘大小和FAT类型来定)
5、第一个分区的根目录区
5、第个分区的根目录区
6、第一个分区数据区(用来存放各种文件的数据)
7、扩展分区表(占用一个扇区)
8、第二个分区的引导扇区(Bootsector)(占用一个扇区)
9、第二个分区的FAT1(占用空间由磁盘大小和FAT类型来定)
10、第二个分区的FAT2(占用空间由磁盘大小和FAT类型来定)
11、第二个分区的根目录区
12、第二个分区数据区(用来存放各种文件的数据)
13、扩展分区表
...
注意:
当你的硬盘没有扩展分区的时候,你就没有扩展分区表了;
当你只有一个硬盘分区的时候你的硬盘结构到6就完了。
(一)主引导扇区(Masterbootsector)的结构:
它是硬盘的第一个扇区,由主引导程序(MasterBootRecord简称MBR),硬盘分区表(DiskPartitionTable简称DPT)和结束标识三部分组成。
其结构如下:
1、偏移0H~1BDH主引导程序(占446个字节,但实际可能并没有到这么多的字节)
2、偏移1BEH~1FDH硬盘分区表(占64个字节,每个分区项占16个字节,最多可容纳4个分区项)
3、偏移1FEH~1FFH结束标识(占2个字节,结束标志,总为55HAAH)
主引导程序我在此就不分析了,需要注意的是在主引导程序中有一些出错信息,一些引导型病毒往往会覆盖这些信息来将自己嵌入到主引导程序中去,并将主引导程序开始的几个字节改为一条跳转指令,通过观察主引导程序的变化,往往可以让我们看出自己的电脑是否有引导型病毒,一旦发现异常,我们可以用FDISK/MBR命令来覆盖原有的MBR。
结束标识的两个字节总是55HAAH,该标识只是用于判断这个扇区是否是有效的主引导扇区,如果主引导程序发现没有这个结束标识,将会认为操作系统丢失,并显示“MissingOperatingSystem”。
硬盘分区表:
从偏移1BEH~1FDH的64个字节存放的是硬盘分区表,其中最多包含4个分区项,每个分区项由16个字节构成,其结构如下:
1、1BEH~1CDH分区项1
2、1CEH~1DDH分区项2
3、1DBH~1EDH分区项3
4、1EFH~1FDH分区项4
没有用到的分区项上的记录总是16个十六进制码00H
我们再来看看每个分区项的详细含义,假设我们的一个分区占用的16个字节被标为00H~0FH,其结构如下:
00H引导标识字节,其值只能为00H或80H,为00H时表示该分区不可引导,为80H时表示该分区可用于引导。
在许多诸如BOOTMAGIC之类的软件都是利用了这一原理,实现多操作系统引导的,了解了这一原理,你也可以写出你自己的多操作系统引导程序了。
01H分区起始磁头号
02H其高2位为分区起始柱面号的高位,底6位为分区起始扇区号
03H分区起始柱面号的低位
04H分区系统标志,当该值为00H时,表示此分区为不可识别的系统;
为04H时该分区为FAT16分区;
为05H或0FH该分区为扩展分区;
为0BH时该分区为FAT32分区;
为83H时表示该分区为Linux分区,为07时该分区为NTFS分区等等。
一些如PQMAGIC磁盘软件在隐藏分区操作时就是将此字节的内容保存后在把它改为00H。
05H分区结束磁头号
06H其高2位为分区结束柱面号的高位,底6位为分区结束扇区号
07H分区结束柱面号的低位
08H~0BH此4个字节为在线性寻址方式下的分区的扇区地址。
当分区大于8G时,扩展INT13H是通过该信息进行寻址的,我们可以发现在这种方式下寻址最多可访问的空间为:
FFFFFFFFH扇*512B/扇=2048G,也就是说我们用扩展INT13H最大可以访问的空间为2048G,这个数字现在对我们来说是非常大的,但谁都不能想象计算机的发展之快,到时到底要如何来突破这个限制呢?
现在谁也不知道。
此4个字节是从高位到低位排列的!
例如我的分区表第一个分区项此4字节的内容为“3FH00H00H00H”,它代表该分区是从0000003FH开始的,也就是从线性地址63扇开始的(线性地址把硬盘的第一个扇记为0H扇)
0CH~0FH此4个字节为以扇区为单位的该分区大小(总扇区数),此4个字节同样是从高位到低位排列的!
(二)引导扇区(Bootsector)的结构:
当主引导程序找到了带有引导标识为80H的分区后,就会将该分区的引导扇区读入到内存地址为0000:
7C00处,并把控制权交给引导扇区中的引导程序,让我们来看看其中一些需要了解的地方:
1、0H~02H一条跳转指令,指针指向后面的引导程序
2、03H~0AH厂商名和系统版本
3、0BH~0CH每扇字节数,一般为512字节
4、0DH每簇扇区数(有关簇的概念我们在后面会详细介绍),对于FAT32的磁盘该字节一般为08H,既每簇为8H*512B=4K。
5、0EH~0FH保留扇区数
6、10H磁盘FAT的个数,一般为2个
7、11H~12H对于FAT16的磁盘为根目录的最大目录项,对于FAT32的磁盘该值总为“00H00H”
8、13H~14H对于软盘或早期小硬盘该处为分区总扇区数,对于硬盘一般此值为“00H00H”
9、15H介质描述,对于1.44软盘此处长为“F0H”,对于硬盘此处长为“F8H”
10、16H~17H对于软盘或早期小硬盘该处为每个FAT占用的扇区数,对于硬盘一般此值为“00H00H”
11、18H~19H每道扇区数,一般为“3FH00H”,即每道有63个扇区
12、1AH~1BH磁头数,一般为“FFH00H”,即每个柱面有255个磁头
13、1CH~1FH隐含扇区数
14、20H~23H对于大硬盘来说该处存放的是该分区占用的扇区数
15、24H~27H对于大硬盘来说该处存放的是每个FAT占用的扇区数
16、40H该处为磁盘BIOS信息,第一块硬盘为“80H”,一般软盘为“00H”
17、47H~51H用户设置的卷标,如果没有卷标此处常为字符串“NONAME”
18、52H~59H文件系统,对于FAT32文件系统此处常为“FAT32”
19、1FEH~1FFH结束标识,和上文提到的主引导区的结束标识一样为“55HAAH”
以上是引导扇区的一些信息,在上面我们可以获得一些有用的信息,我们也可以想象一下为什么当我们在分区上单击右键在分区属性中可以看到一些分区信息,比如分区大小,文件系统等等,知道原理,你也可以直接调用这些参数了。
(三)磁盘文件分配表(FAT)
在介绍FAT之前,我们要先了解有关簇的概念,簇(Cluster)是文件数据区被划分成的具有大小相等的区域用于磁盘文件的计量分配单位。
一个簇可能有1、2、4、8、16、32、64或128(必须是2的幂)个扇区构成,但对于一种磁盘系统是其值往往是一定的,比如FAT16中每簇一般为32K(占64个扇),FAT32中每簇一般为4K(占8个扇)。
要理解操作系统为什么要用簇对磁盘进行管理,还是得学习FAT,FAT32磁盘中在系统引导区之后有一些保留未用的扇区,再后面有一个以F8HFFHFFH0FH开始的FAT表,(对于FAT16是以F8HFFH开始的),每个FAT项占32位(4个字节),FAT16的每个FAT项占16位(2个字节),不同的FAT值有不同的含义:
FAT12的表项值FAT16的表项值FAT32的表项值值的含义
000H0000H00000000H未用的空簇
001H~FEFH0001H~FFEFH00000001H~0FFFFFEFH文件已使用的簇
FF0H~FF6HFFF0H~FFF6H0FFFFFF0H~0FFFFFF6H系统保留簇
FF7HFFF7H0FFFFFF7H坏簇
FFF8H~FFFHFFF8H~FFFFH0FFFFFF8H~0FFFFFFFH文件的最后一簇
在FAT表项中的16进制码总是从高向底排列的。
我们再来看看系统是如何利用FAT表来管理和访问文件的。
系统在创建一个新文件时,逐一扫描FAT,跳过已经分配的簇,将该簇分给文件,其簇号作为该文件的起始簇号被放在该文件的文件目录项中(关于文件目录项我们将在后面详谈),如果此文件的大小只需要一个簇就可以放下的话,在该簇对应的FAT项中将放文件最后一簇的标志(一般是FFHFFHFFHF0H,即其值为0FFFFFFFH),如果文件大小一个簇放不下,系统就会在继续寻找FAT表中未用的簇,找到后将该簇的簇号写到上一簇对应的FAT项中,如果此时已经可以存下该文件的数据,系统就会在此簇对应的FAT中记上最后簇的标志,否则就继续找下一空簇......也就是说FAT和簇是一一对应的关系,对于FAT32的FAT来说每4个字节为1个FAT项(对于FAT16的FAT每2个字节为一个FAT项),从0~N个FAT项分别对应0~N个簇,在我们对文件进行访问时,总是先访问文件的目录项,找到首簇簇号,再找到该簇号对应的FAT项,在其中找到下一簇的簇号,再在下一簇对应的FAT项中找到再下一簇的簇号......一直到在FAT项中找到有文件最后一簇的标志,我们对该文件的查找才结束。
(当然也可能在首簇对应的FAT中该文件就结束了)这样就形成了一个链,我们把它称为盘簇链。
简要介绍一下FAT12系统,FAT12现在只用于软盘,因为是每个FAT占12位所以是每2个字节含有3个FAT项,我们来看看FAT12系统在寻找簇链的过程:
将10进制簇号*1.5并取整,该值为FAT相对位移,在该处存放的是下一簇的簇号,以此类推。
一个问题:
到底每簇占多少扇区合适?
文件所占簇数为:
文件占用的簇数=[文件长度/每簇所占空间]取整+1
文件在最后一个簇存放的时候不可能刚好放满,没有放满的空间就浪费了(就好象我们打电话不可能每个电话都打到X分59.99秒,即使你通话时间为X分1秒你也要付出X+1分的电话费),我们可以来计算一下你的FAT系统磁盘空间浪费的大小:
浪费的空间大小=文件个数/2*每簇字节数(平均每个文件浪费半个簇的空间)
这样看来好象簇越小浪费的空间也越小,但是有个矛盾的地方是簇越小FAT所用的空间就会越大,同时簇小了,簇链就越长,访问文件的时间就会加长,这又是一种资源上的浪费,因此,簇的大小应该是以提高文件的访问时间和充分利用磁盘空间为原则的。
(三)目录项的结构
在第2个FAT表(系统一般有两个同样的FAT表)后我们可以找到该分区的根目录区,在上面有许多目录项(注意:
目录项并非根目录才有),让我们先来复习一下FAT16的目录项各个字节的含义:
由32个字节构成:
00H~07H文件的文件名,其中00H为以下值时有些特定含义:
00H表项为空表项E5H文件已被删除05H实际该字节为的值为E5H
08H~0AH文件的扩展名
0BH文件属性8位文件属性字节含义如下:
B7~B6未用B5归档位B4子目录(代表该文件是一个目录或叫文件夹)B3卷标(卷标也解释为一种特殊的文件)B2系统文件B1隐藏文件B0只读文件
0CH~15HFAT16系统保留未用
16H~17H系统最后修改时间,其中:
16H字节的0~4位是以2秒为增量的秒
16H字节的5~7位和17H字节的0~2位是分钟
17H字节的3~7位是小时
18H~19H文件最后修改的日期,其中:
18H字节0~4位是天号
18H字节5~7位和19H字节0位是月份
19H字节的1~7位为年号,0~119分别代表1980~2099
1AH~1BH文件的起始簇号(我们在之前已经介绍了)
1CH~1FH文件的长度(单位为字节)
我们知道用在FAT16系统下的文件名有一些弊端,如:
文件名最多只能有8个字符(或4个汉字),扩展名最多有3个字符,不分大小写,不能用一些特殊字符等。
在FAT32系统这些问题已经得到解决,我们来看看FAT32系统是如何解决长文件名问题的。
假如在你的电脑中有一个文件名为abcdefghijklmnopqrstuvwxyz111111.txt的文件名,那么该文件在磁盘目录中就占用了4个已32字节为单位的目录项,其中有3个目录项是用来描述长文件名的,有1个目录项是用来兼容老的FAT系统的,我们来看看例子中前3个用于描述长文件名的目录项:
43H31H00H31H00H31H00H31H00H31H00H0FH00H27H31H00H
2EH00H74H00H78H00H74H00H00H00H00H00HFFHFFHFFHFFH
02H6EH00H6FH00H70H00H71H00H72H00H0FH00H27H73H00H
74H00H75H00H76H00H77H00H78H00H00H00H79H00H7AH00H
01H61H00H62H00H63H00H64H00H65H00H0FH00H27H66H00H
67H00H68H00H69H00H6AH00H6BH00H00H00H6CH00H6DH00H
不难看出描述长文件名的目录项中的一些规则:
在每个目录项的32个字节中,
(1)、偏移0H处:
代表了长文件描述目录项的序号,其中高4位如果为0100则表示此项为最后一个目录项,低4位表示此长文件名的目录项的序号。
如果此长文件名描述目录只用到了1个目录项,则此值为41H,如果此值为E5H代表此文件已被删除;
(2)、偏移0BH~0CH处:
其值总为0FH00H;
(3)、偏移0D处:
该长文件目录项的标号,