硬盘内部结构:
硬盘分区表、文件分配表探秘
一、分区表
硬盘只有经过物理格式化、分区、逻辑格式化后才能使用,在进行分区时,FDISK会在硬盘的0柱面0磁头1扇区建一个64字节的分区表,在分区表的前面是主引导记录(MBR),
后面是两个字节的有效标志55h、AAh(h表示16进制)。此扇区被称为主引导扇区,
也是病毒最爱侵袭的地方,它由主引导记录+分区表+有效标志组成。分区表对于系统自举十分重要,它规定着系统有几个分区;每个分区的起始及终止扇区、大小以及是否为活动分区等重要信息。分区表由4个表项组成,每个表项16个字节,各字节含义如表1:
表1
字节
含 义
第0字节
是否为活动分区,13、
是则为80h,
否则为00h
第1字节
该分区起始磁头号
第2字节
该分区起始扇区号(低6位)和起始柱面号(高2位)
第3字节
该分区起始柱面号的低8位
第4字节
系统标志,00h表该分区未使用,06h表高版本DOS系统,05h扩展DOS分区、65h表Netware分区
第5字节
该分区结束磁头号
第6字节
该分区结束扇区号(低6位)和结束柱面号(高2位)
第7字节
该分区结束柱面号的低8位
第8~11字节
相对扇区号、该分区起始的相对逻辑扇区
号,
高位在后低位在前
第12~15字节
该分区所用扇区数,高位在后、低位在前
注意:
分区表有四个表项,表示硬盘最多只能容纳四个分区。
磁盘的各个面称为磁头,软盘只有两个磁头,而硬盘往往有多个。各个磁头相同半径的磁道合称为柱面。
高位在后,低位在前是一种存储数字方式,读出时应对其进行调整,如两字节12h、34h,应调整为3412h。
现在举例说明,有如下一分区表(16进制):
80 01
01 00 06 0B 23 9B 23 00 00 00 CD FF 00 00 00 00
01 9C 05 0B E3 DB F0 FF 00 00 00 55 05 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 AA
此分区表两个表项已被使用,说明此硬盘上存在两个分区(DOS主引导分区和扩展DOS分区),还有两个表项未用,最后是2个字节的有效标志。现以第一个表项为例说明各字节作用。
第0字节80h表明此分区为活动分区,系统启动时将从此分区读取系统文件,当硬盘上存在一个以上分区时,只能有一个是活动的。
第1字节01h表明此分区起始于第1磁道。
第2个字节01h用二进制表示为00000001,低6位为000001,合十进制为1,表此分区起始扇区为1。
第3字节00h,用二进制表示为00000000,加上第2个字节的高2位00作为高位,表示为0000000000,合十进制0,表此分区起始柱面为0。
第4字节06h表此分区为基本DOS分区。
第5字节0Bh表示该分区结束在第11磁头。
第6字节23h合二进制00100011,低6位100011合十进制35,此分区结束扇区则为35。
第7字节9Bh合二进制10011011,加上第6字节的高2位00作为高位,表示为0010011011,合十进制155,表此分区结束在第155柱面。
第8~11字节为23h,表此分区从相对逻辑35扇区开始。
第12~15字节为FFCDh,表此分区共有65985个扇区。综上所述,此分区为活动的基本DOS分区,分区从0柱面1磁头1扇区开始,即相对逻辑35扇区,终之于155柱面11磁头35扇区。硬盘自举时,先将主引导扇区的主引导记录读入内存,主引导记录将检查结束标志是否为55AAh,并在分区表中找到唯一的一个活动分区,并根据该分区表项记载的起始扇区地址读入引导文件,完成启动过程。
要注意用PCTOOLS等一般软件无法访问主引导记录,因为它的磁盘编辑功能只能访问到逻辑0扇区,即BOOT扇区。但我们可以通过KV300或Norton的主引记录导出功能,观察自己的磁盘的分区表。也可对它进行修改,实现在不破坏原有数据的情况下增加分区、对某个分区加锁等功能,但用户最好谨慎行事,分区表可是“军事禁区”。
二、文件分配表
当一个磁盘Format后,在其逻辑0扇区(即BOOT扇区)后面的几个扇区中存在着一个重要的数据表--文件分配表(FAT),文件分配表一式两份,占据扇区的多少凭磁盘类型大小而定。顾名思义,文件分配表是用来表示磁盘文件的空间分配信息的。它不对引导区、文件目录表的信息进行表示,也不真正存储文件内容。
我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位的,哪怕这个文件只有1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,每个表项占1?5个字节(磁盘空间在10MB以下)或2个字节(磁盘空间在10MB以上)。为了方便起见,以后所说的表项都是指2个字节的。
文件分配表结构如表2(h表示16进制)。
注意:
1.不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。
2.高字节在后,低字节在前是存储数字的一种方式,读出时应进行调整,如两字节12h,34h,实际应为3412h。文件分配表与文件目录表(FDT)相配合,可以统一管理整个磁盘的文件。它告诉系统磁盘上哪些簇是坏的或已被使用哪些簇可以用,并存储每个文件所使用的簇号。它是文件的“总调度师”。
当DOS写文件时,首先在文件目录表中检查是否有相同文件名,若无则使用一个文件目录表项,然后依次检测FAT中的每个表项,找到第一个为0000h的表项后,将文件写入与该表项相对应的簇中,同时将该簇号写入文件目录表项的第26-27字节,如文件长度不止一簇,则继续向后寻找可用簇,找到后将其簇号写入上一次找到的表项中,如此直到文件结束,在最后一簇的表项里填上FFF8h,形成一个单向链表。
DOS删除文件时只是把文件目录表中的该文件的表项第0个字节改为E5h,表此表项已被删除,并在文件分配表中把该文件占用各簇的表项清0,以释放空间。其实文件的内容仍在盘上,并没有被真正删除,这就是undelete.exe、unerase.exe等一类恢复删除工具能起作用的原因。文件分配表在系统中的地位十分重要,用户最好不要去修改它以免误操作带来严重的后果。
表2
字
节
含
义
第0字节
表头,表磁盘类型。
FFh 双面软盘 每磁道8扇区
FEh 单面软盘 每磁道8扇区
FDh 双面软盘 每磁道9扇区
FCCh 单面软盘 每磁道9扇区
FC8h 硬盘
第1~2字节(表项号1) 表示第一簇状态,因第一簇已被系统占据,
故此两字节为FFFFh
第3~4字节(表项号2) 表示第二簇状态,
若为FFFTh表此簇为坏
的,
DOS已标记为不能用;0000h表示此簇为空,可以用;FFF8h表示该簇为文件的最后一簇
;其余数字表示文件的下一个簇号,注意高字节在后,低字节在前第5~6字节(表项号3) 表示第三簇状态,同上.
Windows
98 支持大分区(一般是指大于2GB的分区)的功能,解决了以前的
DOS 分区空间的限制,并且,使用了FAT32
的格式,为我们广大的用户腾出了更多的硬盘空间。
虽然
,Windows
98 的大分区给用户带来了不少的好处,但是,它的最大缺点是:用
Windows 98 的
Fdisk 分区以后,如果用老版本的
MS~DOS 引导计算机的话,它将无法识别用
Windows 98 分的分区。比如:你的C驱动器
(C盘)
是用
Windows 98 的 Fdisk 软件进行分区的,当用
KV300 软盘引导计算机进行查毒或者是杀毒时,它将无法找到你原来的C
驱动器,因为
KV300 的引导系统是老版本的
DOS ,它是无法识别
Windows 98 的主分区和扩展分区的。像这种情况,您恐怕只能找到一张
Windows 98 的启动盘来引导计算机了,然后再用
KV300 进行查、杀病毒。要不然您就用老版本
DOS 下的
Fdisk 软件进行分区,然后,您再安装
Windows 98 ,只不过分出来的分区将无法大于2GB。(好惨呀!!!)
为什么用
Windows 98 的 Fdisk 软件分的分区老版本的
DOS 会无法识别呢?其实这个问题在于主引导扇区中分区表的分区识别类型。分区表有一个字节是用于表示该分区是何种操作系统的分区,它位于每一个分区表项的第5个字节之中,在以前老版本
DOS (DOS4.xx~6.xx)下,当此字节为06H时表示此分区为DOS主引导分区;为05H表示此分区为DOS扩展分区;若为其他的十六进制数,DOS就将其识别为其他系统的分区。当用
Windows 98 的 Fdisk 软件进行了分区以后,此字节所表示的则为:为0BH时是FAT32的DOS主引导分区;为0FH时则是FAT32的DOS扩展分区。正是由于此表示数字不同而导致DOS无法识别Windows
98的Fdisk分的分区。不是因为Windows
98的Fdisk不用以前的数字来表示,而是因为就算DOS能识别也无法管理使用FAT32格式,因此Win98要用新的数字来表示。为了能够兼容,它还是保留了以前的数字来表示,只是要用以前的数字,就只能用DOS的Fdisk来分区,而且FAT也只有16位,分区空间将无法大于2GB,但Windows
98 还是照常能够识别并正常运行,所以在前面的例子中就提到用DOS的Fdisk进行分区再装Win98可以解决问题。
另外,还有一个问题,那就是主引导程序了。以前DOS主引导程序的有效代码段长度为:240个字节;由于Windows
98主引导程序要支持FAT32格式,所以其有效代码段为:392个字节长(其实Windows
95 OSR 2.1 版的主引导程序和Windows
98的完全一样。);由于它们的代码长度不相同,并且有很多代码是不一样的,因此,以前一些老的杀毒软件(如KV200等。)总是把它误认为是主引导扇区病毒。这已经是以前用
Windows 95 OSR 2.1 时碰到的老问题了,在此只提一下。
《返回》