📄 519.html
字号:
16、40H 该处为磁盘BIOS信息,第一块硬盘为“80H”,一般软盘为“00H”<br>
17、47H~51H 用户设置的卷标,如果没有卷标此处常为字符串“NO NAME ”<br>
18、52H~59H 文件系统,对于FAT32文件系统此处常为“FAT32 ”<br>
19、1FEH~1FFH 结束标识,和上文提到的主引导区的结束标识一样为“55H AAH”<br>
<br>
以上是引导扇区的一些信息,在上面我们可以获得一些有用的信息,我们也可以想象一下为什么当我们在分区上单击右键在分区属性中可以看到一些分区信息,比如分区大小,文件系统等等,知道原理,你也可以直接调用这些参数了。<br>
<br>
(三)磁盘文件分配表(FAT)<br>
在介绍FAT之前,我们要先了解有关簇的概念,簇(Cluster)是文件数据区被划分成的具有大小相等的区域用于磁盘文件的计量分配单位。一个簇可能有1、2、4、8、16、32、64或128(必须是2的幂)个扇区构成,但对于一种磁盘系统是其值往往是一定的,比如FAT16中每簇一般为32K(占64个扇),FAT32中每簇一般为4K(占8个扇)。<br>
要理解操作系统为什么要用簇对磁盘进行管理,还是得学习FAT,FAT32磁盘中在系统引导区之后有一些保留未用的扇区,再后面有一个以 F8H FFH FFH 0FH 开始的FAT表,(对于FAT16是以F8H FFH开始的),每个FAT项占32位(4个字节),FAT16的每个FAT项占16位(2个字节),不同的FAT值有不同的含义:<br>
<br>
FAT12的表项值 FAT16的表项值 FAT32的表项值 值的含义<br>
000H 0000H 00000000H 未用的空簇<br>
001H~FEFH 0001H~FFEFH 00000001H~0FFFFFEFH 文件已使用的簇<br>
FF0H~FF6H FFF0H~FFF6H 0FFFFFF0H~0FFFFFF6H 系统保留簇<br>
FF7H FFF7H 0FFFFFF7H 坏簇<br>
FFF8H~FFFH FFF8H~FFFFH 0FFFFFF8H~0FFFFFFFH 文件的最后一簇<br>
<br>
注意:在FAT表项中的16进制码总是从高向底排列的。<br>
<br>
我们再来看看系统是如何利用FAT表来管理和访问文件的。系统在创建一个新文件时,逐一扫描FAT,跳过已经分配的簇,将该簇分给文件,其簇号作为该文件的起始簇号被放在该文件的文件目录项中(关于文件目录项我们将在后面详谈),如果此文件的大小只需要一个簇就可以放下的话,在该簇对应的FAT项中将放文件最后一簇的标志(一般是FFH FFH FFH F0H,即其值为0FFFFFFFH),如果文件大小一个簇放不下,系统就会在继续寻找FAT表中未用的簇,找到后将该簇的簇号写到上一簇对应的FAT项中,如果此时已经可以存下该文件的数据,系统就会在此簇对应的FAT中记上最后簇的标志,否则就继续找下一空簇......<br>
也就是说FAT和簇是一一对应的关系,对于FAT32的FAT来说每4个字节为1个FAT项(对于FAT16的FAT每2个字节为一个FAT项),从0~N个FAT项分别对应0~N个簇,在我们对文件进行访问时,总是先访问文件的目录项,找到首簇簇号,再找到该簇号对应的FAT项,在其中找到下一簇的簇号,再在下一簇对应的FAT项中找到再下一簇的簇号......一直到在FAT项中找到有文件最后一簇的标志,我们对该文件的查找才结束。(当然也可能在首簇对应的FAT中该文件就结束了)这样就形成了一个链,我们把它称为盘簇链。<br>
简要介绍一下FAT12系统,FAT12现在只用于软盘,因为是每个FAT占12位所以是每2个字节含有3个FAT项,我们来看看FAT12系统在寻找簇链的过程:将10进制簇号*1.5并取整,该值为FAT相对位移,在该处存放的是下一簇的簇号,以此类推。<br>
一个问题:到底每簇占多少扇区合适?文件所占簇数为:<br>
文件占用的簇数=[文件长度/每簇所占空间]取整+1<br>
文件在最后一个簇存放的时候不可能刚好放满,没有放满的空间就浪费了(就好象我们打电话不可能每个电话都打到X分59.99秒,即使你通话时间为X分1秒你也要付出X+1分的电话费),我们可以来计算一下你的FAT系统磁盘空间浪费的大小:<br>
浪费的空间大小=文件个数/2*每簇字节数(平均每个文件浪费半个簇的空间)<br>
这样看来好象簇越小浪费的空间也越小,但是有个矛盾的地方是簇越小FAT所用的空间就会越大,同时簇小了,簇链就越长,访问文件的时间就会加长,这又是一种资源上的浪费,因此,簇的大小应该是以提高文件的访问时间和充分利用磁盘空间为原则的。<br>
<br>
(三)目录项的结构<br>
在第2个FAT表(系统一般有两个同样的FAT表)后我们可以找到该分区的根目录区,在上面有许多目录项(注意:目录项并非根目录才有),让我们先来复习一下FAT16的目录项各个字节的含义:<br>
由32个字节构成:<br>
00H~07H 文件的文件名,其中00H为以下值时有些特定含义:<br>
00H 表项为空表项<br>
E5H 文件已被删除<br>
05H 实际该字节为的值为E5H<br>
08H~0AH 文件的扩展名<br>
0BH 文件属性 8位文件属性字节含义如下:<br>
B7~B6 未用<br>
B5 归档位<br>
B4 子目录(代表该文件是一个目录或叫文件夹)<br>
B3 卷标(卷标也解释为一种特殊的文件)<br>
B2 系统文件<br>
B1 隐藏文件<br>
B0 只读文件<br>
0CH~15H FAT16系统保留未用<br>
16H~17H 系统最后修改时间,其中:<br>
16H字节的0~4位是以2秒为增量的秒<br>
16H字节的5~7位和17H字节的0~2位是分钟<br>
17H字节的3~7位是小时<br>
18H~19H 文件最后修改的日期,其中:<br>
18H字节0~4位是天号<br>
18H字节5~7位和19H字节0位是月份<br>
19H字节的1~7位为年号,0~119分别代表1980~2099<br>
1AH~1BH 文件的起始簇号(我们在之前已经介绍了)<br>
1CH~1FH 文件的长度(单位为字节)<br>
我们知道用在FAT16系统下的文件名有一些弊端,如:文件名最多只能有8个字符(或4个汉字),扩展名最多有3个字符,不分大小写,不能用一些特殊字符等。在FAT32系统这些问题已经得到解决,我们来看看FAT32系统是如何解决长文件名问题的。假如在你的电脑中有一个文件名为abcdefghijklmnopqrstuvwxyz111111.txt的文件名,那么该文件在磁盘目录中就占用了4个已32字节为单位的目录项,其中有3个目录项是用来描述长文件名的,有1个目录项是用来兼容老的FAT系统的,我们来看看例子中前3个用于描述长文件名的目录项:<br>
<br>
43H 31H 00H 31H 00H 31H 00H 31H 00H 31H 00H 0FH 00H 27H 31H 00H<br>
2EH 00H 74H 00H 78H 00H 74H 00H 00H 00H 00H 00H FFH FFH FFH FFH<br>
<br>
02H 6EH 00H 6FH 00H 70H 00H 71H 00H 72H 00H 0FH 00H 27H 73H 00H<br>
74H 00H 75H 00H 76H 00H 77H 00H 78H 00H 00H 00H 79H 00H 7AH 00H<br>
<br>
01H 61H 00H 62H 00H 63H 00H 64H 00H 65H 00H 0FH 00H 27H 66H 00H<br>
67H 00H 68H 00H 69H 00H 6AH 00H 6BH 00H 00H 00H 6CH 00H 6DH 00H<br>
<br>
不难看出描述长文件名的目录项中的一些规则:<br>
在每个目录项的32个字节中,(1)、偏移0H处:代表了长文件描述目录项的序号,其中高4位如果为0100则表示此项为最后一个目录项,低4位表示此长文件名的目录项的序号。如果此长文件名描述目录只用到了1个目录项,则此值为41H,如果此值为E5H代表此文件已被删除;(2)、偏移0BH~0CH处:其值总为0FH 00H;(3)、偏移0D处:该长文件目录项的标号,同一个长文件目录的不同目录项该值总相同(比如本例中3个目录项该值都为27H);(4)、偏移1AH~1BH处:该值总为00H 00H;(5)从偏移01H~1FH跳过前4项提到的字节,总是一个文件名的ASCII码接一个00H排列的,如果文件名的ASCII码在一个目录项还未写完,则会接到下一个目录项(实际上这些目录项都是从高到低排列的)同样的位置继续写,如果已经写完,则系统会在最后一个ACSII码后写00H,最多写3个00H,如果3个00H写完后,目录项还有空余位置,则系统会把这些位置全部写上FFH。<br>
同时FAT32系统还有一个类似与FAT16的目录项(紧接着长文件名的目录的后面),同样占32个字节:<br>
00H~07H 文件的文件名<br>
08H~0AH 文件的扩展名<br>
0BH 文件属性<br>
0CH 保留未用<br>
0EH~0FH 文件创建时间<br>
10H~11H 文件最后访问日期<br>
12H~13H 文件创建日期<br>
14H~15H 文件起始簇号的高16位<br>
16H~17H 系统最后修改时间,其中:<br>
16H字节的0~4位是以2秒为增量的秒<br>
16H字节的5~7位和17H字节的0~2位是分钟<br>
17H字节的3~7位是小时<br>
18H~19H 文件最后修改的日期,其中:<br>
18H字节0~4位是天号<br>
18H字节5~7位和19H字节0位是月份<br>
19H字节的1~7位为年号,0~119分别代表1980~2099<br>
1AH~1BH 文件的起始簇号的低16位<br>
1CH~1FH 文件的长度(单位为字节)<br>
<br>
注意:其中文件名为DOS兼容文件名,比如上例中在DOS下的文件名为ABCDEF~1.TXT;其首字节含义同FAT16系统;文件属性字节含义同FAT16系统;在FAT32系统中增加了最后访问日期和文件创建时间日期,其计算原理同FAT16中的最后修改的时间和日期。<br>
<br>
(四)扩展分区表<br>
我们已经学习了在主引导扇区中的分区表的偏移04H,是分区系统标志,当该值为05H或0FH表示该分区为扩展分区,其实它并非一个真正意义上的分区项,此分区项只是指向一个扩展分区表,这样做是为了解决分区表中最多只能有4个分区项的问题,扩展分区表也是从扩展分区表所在的扇区偏移1BEH~偏移1FD,该扇区0H~1BDH一般为1BEH个00H,同样要以结束标志55H AAH结束。<br>
同样,在扩展分区表中也可能存在指向下一个扩展分区表的分区项。<br>
<br>
二、手工恢复篇<br>
学习了有关的理论知识之后我想你一定和我现在一样头晕眼花了,如果你已经掌握了相关理论,就该和我一起来实战数据恢复了。<br>
<br>
(一)重建硬盘分区表<br>
总有些这样的时候,你的系统不能够引导了,你连忙用软区引导,键入C:,电脑却无情的告诉你“Invalid drive specification”,打开FDISK你发现你的分区表项已经全部消失,你几乎要哭了,你在想这一切是病毒、无聊的骇客还是自己的误操作造成的,但是不管此时你在想什么,都没什么意义了,你正打算重新分区重装系统,这时你要是刚好遇到我,或是象我一样热心的朋友,就会问你:“你难道就这样甘心和你多年来下载的资料说88么?”你此时肯定是象落水者抓住了一根救命稻草,说:“不啊,我希望能拯救硬盘数据,求求你帮我恢复好么?”此时,我会笑笑说:“不好,我不想帮你恢复数据,但是我会教你如何来恢复你的硬盘数据的,呵呵!”<br>
首先,得找到一块被病毒或是恶意程序破坏的硬盘,可是这样一块硬盘并非马上就能找到的啊!怎么办?为了能够写完这篇文章,为了那位朋友能够恢复自己的数据,我只能用我自己的硬盘来做这个实验了(不禁想起了当年释加摩尼以身喂虎的故事),所谓我不入地狱谁入地狱。首先,把我的一块40G的硬盘主引导扇区备份一下,以防不测(关于如何备份主引导扇区,看我在11月份的《黑客X档案》中的文章),然后,将我的硬盘主引导区包括分区表给完全清零,(旁白:这样做非常危险,希望广大小朋友不要效仿!)然后干什么呢?大厨师回答:“备用。”<br>
好了,先来介绍两个磁盘编辑工具,一个是Norton utility 8.0工具包中的Diskedit.exe,一个不错的老牌磁盘编辑工具,在DOS下执行,可惜用的是磁头(Heads),柱面(Cylinders),扇区(Sectors)方式对硬盘进行访问的,所以只能访问最多8G的磁盘空间,如果你的磁盘小于8G或是你只需要对8G内的磁盘进行访问,可以用它,但如果你需要访问8G以上的空间就推荐你用另一个工具:WinHex V10.47 SR1 汉化版,这个工具可能大家较为熟悉(在第5期《黑客X档案》光盘中可以找到),是一个不错的16进制文件编辑与磁盘编辑软件,磁盘编辑支持FAT16、FAT32和NTFS,可以在WIN9X和WIN2K、WINXP下运行,并且它的使用非常简单。<br>
不再多说了,赶快拯救我的硬盘吧,上面还有MM发给我的照片呢!对了还有我写个MM的信还赶着发呢!幸好我还有一块小点的硬盘,用它作成主盘,把那块可怜的40G的硬盘挂上,启动成功!看看“我的电脑”里有没有我那块40G硬盘的分区?(画外音:做梦!),找到第5期《黑客X档案》光盘,安装WinHex V10.47 SR1 汉化版,打开WINHEW,刚启动会有一个“启动中心”的东西,选择“物理驱动器“中的”硬盘2“(标号为81H),(如果你在这都找不到你需要修复的硬盘的话,十有八九会是硬件问题,这时你要检查一下硬盘的数据线和电源线是否没接好,如果不是这些原因,我想你的硬盘不是需要修复数据了,而是需要真正物理意义上的修理了。)<br>
此时你已经看到了被我完全清零的主引导区了,不用再复习主引导区的结构吧(什么老师没教过?这位同学你可以下课了),让我先回忆一下我的分区的大致情况吧,分了4个区,第一个区装的是WIN98,FAT32系统,大约5G;第二个区装的是WINXP,NTFS系统,大约5G;第三个区是FAT32系统,大约15G;第四个区是FAT32系统,大约15G。<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -