一、分区表

硬盘只有经过物理格式化、分区、逻辑格式化后才能使用,在进行分区时,FDISK会在硬盘的0柱面0磁头1扇区建一个64字节的分区表,在分区表的前面是主引导记录(MBR) 后面是两个字节的有效标志55hAAh(h表示16进制)。此扇区被称为主引导扇区, 也是病毒最爱侵袭的地方,它由主引导记录+分区表+有效标志组成。分区表对于系统自举十分重要,它规定着系统有几个分区;每个分区的起始及终止扇区、大小以及是否为活动分区等重要信息。分区表由4个表项组成,每个表项16个字节,各字节含义如表1
1
 字节       含  义
0字节 是否为活动分区,13 是则为80h 否则为00h
1字节 该分区起始磁头号
2字节 该分区起始扇区号(6)和起始柱面号(2)
3字节 该分区起始柱面号的低8
4字节 系统标志,00h表该分区未使用,06h表高版本DOS系统,05h扩展DOS分区、65hNetware分区
5字节 该分区结束磁头号
6字节 该分区结束扇区号(6)和结束柱面号(2)
7字节 该分区结束柱面号的低8
811字节 相对扇区号、该分区起始的相对逻辑扇区
号, 高位在后低位在前
1215字节 该分区所用扇区数,高位在后、低位在前
注意:

分区表有四个表项,表示硬盘最多只能容纳四个分区。

磁盘的各个面称为磁头,软盘只有两个磁头,而硬盘往往有多个。各个磁头相同半径的磁道合称为柱面。

高位在后,低位在前是一种存储数字方式,读出时应对其进行调整,如两字节12h34h,应调整为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个字节的高200作为高位,表示为0000000000,合十进制0,表此分区起始柱面为0
4字节06h表此分区为基本DOS分区。
5字节0Bh表示该分区结束在第11磁头。
6字节23h合二进制00100011,低6100011合十进制35,此分区结束扇区则为35
7字节9Bh合二进制10011011,加上第6字节的高200作为高位,表示为0010011011,合十进制155,表此分区结束在第155柱面。
811字节为23h,表此分区从相对逻辑35扇区开始。
1215字节为FFCDh,表此分区共有65985个扇区。综上所述,此分区为活动的基本DOS分区,分区从0柱面1磁头1扇区开始,即相对逻辑35扇区,终之于155柱面11磁头35扇区。硬盘自举时,先将主引导扇区的主引导记录读入内存,主引导记录将检查结束标志是否为55AAh,并在分区表中找到唯一的一个活动分区,并根据该分区表项记载的起始扇区地址读入引导文件,完成启动过程。
要注意用PCTOOLS等一般软件无法访问主引导记录,因为它的磁盘编辑功能只能访问到逻辑0扇区,即BOOT扇区。但我们可以通过KV300Norton的主引记录导出功能,观察自己的磁盘的分区表。也可对它进行修改,实现在不破坏原有数据的情况下增加分区、对某个分区加锁等功能,但用户最好谨慎行事,分区表可是军事禁区

二、文件分配表
当一个磁盘Format后,在其逻辑0扇区(BOOT扇区)后面的几个扇区中存在着一个重要的数据表--文件分配表(FAT),文件分配表一式两份,占据扇区的多少凭磁盘类型大小而定。顾名思义,文件分配表是用来表示磁盘文件的空间分配信息的。它不对引导区、文件目录表的信息进行表示,也不真正存储文件内容。
我们知道磁盘是由一个一个扇区组成的,若干个扇区合为一个簇,文件存取是以簇为单位的,哪怕这个文件只有1个字节。每个簇在文件分配表中都有对应的表项,簇号即为表项号,每个表项占1?5个字节(磁盘空间在10MB以下)2个字节(磁盘空间在10MB以上)。为了方便起见,以后所说的表项都是指2个字节的。
文件分配表结构如表2(h表示16进制)
注意:
1.
不要把表项内的数字误认为表示当前簇号,而应是该文件的下一个簇的簇号。
2.
高字节在后,低字节在前是存储数字的一种方式,读出时应进行调整,如两字节12h34h,实际应为3412h。文件分配表与文件目录表(FDT)相配合,可以统一管理整个磁盘的文件。它告诉系统磁盘上哪些簇是坏的或已被使用哪些簇可以用,并存储每个文件所使用的簇号。它是文件的总调度师
DOS写文件时,首先在文件目录表中检查是否有相同文件名,若无则使用一个文件目录表项,然后依次检测FAT中的每个表项,找到第一个为0000h的表项后,将文件写入与该表项相对应的簇中,同时将该簇号写入文件目录表项的第2627字节,如文件长度不止一簇,则继续向后寻找可用簇,找到后将其簇号写入上一次找到的表项中,如此直到文件结束,在最后一簇的表项里填上FFF8h,形成一个单向链表。
DOS
删除文件时只是把文件目录表中的该文件的表项第0个字节改为E5h,表此表项已被删除,并在文件分配表中把该文件占用各簇的表项清0,以释放空间。其实文件的内容仍在盘上,并没有被真正删除,这就是undelete.exeunerase.exe等一类恢复删除工具能起作用的原因。文件分配表在系统中的地位十分重要,用户最好不要去修改它以免误操作带来严重的后果。
2

0字节 表头,表磁盘类型。
FFh
双面软盘 每磁道8扇区
FEh
单面软盘 每磁道8扇区
FDh
双面软盘 每磁道9扇区
FCCh
单面软盘 每磁道9扇区
FC8h
硬盘
12字节(表项号1) 表示第一簇状态,因第一簇已被系统占据,      
 故此两字节为FFFFh
34字节(表项号2) 表示第二簇状态,       若为FFFTh表此簇为坏
 的,    DOS已标记为不能用;0000h表示此簇为空,可以用;FFF8h表示该簇为文件的最后一簇       ;其余数字表示文件的下一个簇号,注意高字节在后,低字节在前第56字节(表项号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时是FAT32DOS主引导分区;为0FH时则是FAT32DOS扩展分区。正是由于此表示数字不同而导致DOS无法识别Windows 98Fdisk分的分区。不是因为Windows 98Fdisk不用以前的数字来表示,而是因为就算DOS能识别也无法管理使用FAT32格式,因此Win98要用新的数字来表示。为了能够兼容,它还是保留了以前的数字来表示,只是要用以前的数字,就只能用DOSFdisk来分区,而且FAT也只有16位,分区空间将无法大于2GB,但Windows 98 还是照常能够识别并正常运行,所以在前面的例子中就提到用DOSFdisk进行分区再装Win98可以解决问题。

  另外,还有一个问题,那就是主引导程序了。以前DOS主引导程序的有效代码段长度为:240个字节;由于Windows 98主引导程序要支持FAT32格式,所以其有效代码段为:392个字节长(其实Windows 95 OSR 2.1 版的主引导程序和Windows 98的完全一样。);由于它们的代码长度不相同,并且有很多代码是不一样的,因此,以前一些老的杀毒软件(如KV200等。)总是把它误认为是主引导扇区病毒。这已经是以前用 Windows 95 OSR 2.1 时碰到的老问题了,在此只提一下。
  

返回