每块硬盘在使用前都要先进行分区,也就是将硬盘划分为一个个的逻辑区域。每一个分区都有一个确定的起止位置。在起止位置之间的那些连续的扇区都归该分区所有,不同分区的起止位置互不交错。

MBR磁盘的分区形式一般有3种,即主分区、扩展分区和非DOS分区。主分区又称为主DOS分区(Primary DOS Partition),目前也称为主磁盘分区。扩展分区又称为扩展DOS分区(Extended DOS Partition)。非DOS分区(Non-DOS Partition)是一种特殊的分区形式,它是将硬盘中的一块区域单独划分出来供另一个操作系统使用的,如Linux和UNIX等。对主分区的操作系统来讲,非DOS分区是一块被划分出去的存储空间。只有非DOS分区内的操作系统才能管理和使用这块存储区域,非DOS分区之外的系统一般不能对该分区内的数据进行访问。

首先来分析分区表部分。

为了便于用户对磁盘的管理,操作系统引入磁盘分区的概念,即将一块磁盘逻辑划分为几个区域。在分区表的64字节中,以16字节为一个分区表项来描述一个分区的结构。

一块硬盘最多可以有4个主磁盘分区,被激活的主磁盘分区称为主分区,主分区在一块硬盘中只能有一个。

图4-16所示的硬盘有两个主磁盘分区。

主磁盘分区的结构分析-数据恢复迷

图4-16 两个主磁盘分区

用WinHex打开该硬盘,其MBR及分区表信息如图4-17所示。

主磁盘分区的结构分析-数据恢复迷

图4-17 MBR及分区表信息

每个分区表项中相对应的各个字节的含义都是一样的。下面以第一个主磁盘分区的分区表项为例,说明其各字节的含义,这部分的具体含义见表4-1。

表4-1 分区表项的含义

字节偏移 字段长度 字段名和定义
0x01BE 1字节 0x80  引导标志(Boot Indicator):指明该分区是否是活动分区
0x01BF 1字节 0x01  开始磁头(Start Head)
0x01C0 6位 0x01  起始扇区(Start Sector):只用了0~5位,后面的两位(第6位和第7位)被开始柱面字段所使用
0x01C1 10位 0x00  起始柱面(Start Cylinder):共占用10位,最大值为1023
0x01C2 1字节 0x07  分区的类型描述(Partition type indicator):定义了分区的类型,详细定义,请参见表4-2
0x01C3 1字节 0xFE  结束磁头(End Head)
0x01C4 6位 0xFF  结束扇区(End Sector):只使用了0~5位。最后两位(第6、7位)被结束柱面字段所使用
0x01C5 10位 0xFF  结束柱面(End Cylinder):结束柱面是一个10位的数,最大值为1023
0x01C6 4字节 0x0000003F  本分区之前使用的扇区数(Sectors preceding partition):指从该磁盘开始到该分区开始之间的偏移量,以扇区数来表示
0x01CA 4字节 0x01388AFC  分区的总扇区数(Sectors in partition):指该分区所包含的扇区总数

注意

表4-1中的超过1字节的数据都以高位到低位的方式显示,因为Windows系统是运行在x86架构之上的,所以在实际存储时是按低位到高位存储的,两者表现不同,请仔细看清楚。以后出现的表和图均用这种方式描述。

另外也可以通过WinHex的模板管理器中的MBR模板来查看这些参数的意义,对WinHex不熟悉的读者请先学习第3章的“WinHex使用方法详解”。

打开WinHex的模板管理器,选择MBR模板,如图4-18所示。

主磁盘分区的结构分析-数据恢复迷

图4-18 选择MBR模板

双击模板后就可以查看分区表信息了,如图4-19所示。

主磁盘分区的结构分析-数据恢复迷

图4-19 MBR模板

下面对一些重要的信息作进一步的解释:

①分区表项的第一个字节为分区的引导标志,只能是00H和80H。80H为可引导的活动分区,00H为不可引导的非活动分区。其他值对Microsoft而言为非法值。

②再重复非常重要的一点:大于1字节的数值被以低字节在前的存储格式(Little Endian)顺序保存下来。例如,“本分区之前使用的扇区数”字段的值3F000000H就是Little Endian格式的,按照习惯的高位在前的方式表示为0000003FH,这个数值的十进制值为63。

③“本分区之前使用的扇区数”就是该分区的相对起始扇区号,是以LBA值来表示的。这个值也可以称为隐藏扇区数。

④系统在分区时,各分区都不允许跨柱面,即均以柱面为单位,这就是通常所说的分区粒度。有时分区时输入分区的大小为7000MB,结果分出来却是6997MB,就是这个原因。

⑤分区表项的第三和第四个字节的扇区和柱面参数中,扇区占6位(bit),柱面占10位(bit)。以“起始扇区号”为例,其低6位用作扇区数的二进制表示,高两位用做柱面数10位中的高两位。由此可知,实际上用这种方式表示的分区容量是有限的,柱面和磁头从0开始编号,扇区从1开始编号,所以最多只能表示1024个柱面×63个扇区×256个磁头×512Byte=8 455 716 864Byte,即通常的8.4GB(实际上应该是7.8GB左右)限制。实际上磁头数通常只用到255个(由汇编语言的寻址寄存器决定),即使把这3字节按线性寻址,依然力不从心。在后来的操作系统中,超过8.4GB的分区其实已经不通过C/H/S的方式寻址了。而是通过偏移0CH~偏移0FH共4字节32位线性扇区地址来表示分区所占用的扇区总数。可知通过4字节可以表示232个扇区,即2TB=2048GB,目前对于大多数计算机而言,这么大的分区已经够用了。在未超过8.4GB的分区上,C/H/S的表示方法和线性扇区的表示方法所表示的分区大小是一致的。也就是说,两种表示方法是协调的。即使不协调,也以线性寻址为准。超过8.4GB的分区结束C/H/S一般填充为FEH FFH FFH,即C/H/S所能表示的最大值。不过这几个字节是什么其实都无关紧要了。

⑥虽然现在的系统均采用线性寻址的方式来处理分区的大小,但不可跨柱面的原则依然没变。本分区的扇区总数加上与前一分区之间的保留扇区数目依然必须是柱面容量的整数倍。

⑦偏移01C2H处表示该分区的类型,它是操作系统管理分区、组织分区的方式。下面给出一些常见的分区类型,详见表4-2。

表4-2 常见分区类型

00H DOS或Windows不允许使用,视为非法 5CH Priam Edisk
01H FAT12 61H Speed Stor
02H XENIX root 63H GNU HURD or Sys
03H XENIX usr 64H Novell Netware
04H FAT16 小于32MB 65H Novell Netware
05H Extended 70H Disk Secure Mult
06H FAT16 大于32MB 75H PC/IX
07H HPFS/NTFS 80H Old Minix
08H AIX 81H Minix/Old Linux
09H AIX bootable 82H Linux swap
0AH OS/2 Boot Manage 83H Linux
0BH Windows 95 FAT32 84H 0S/2 hidden C:
0CH Windows 95 FAT32 85H Linux extended
0EH Windows 95 FAT16 86H NTFS volume set
0FH Windows 95 Extended(大于8GB) 87H NTFS volume set
10H OPUS 93H Amoeba
11H Hidden FAT12 94H Amoeba BBT
12H Compaq diagnost A0H IBM Thinkpad hidden
16H Hidden FAT16 A5H BSD/386
14H Hidden FAT16小于32MB A6H Open BSD
17H Hidden HPFS/NTFS A7H NextSTEP
18H AST Windows swap B7H BSDI fs
1BH Hidden FAT32 B8H BSDI swap
1CH Hidden FAT32 partition(using LBA-mode INT 13 extensions) BEH Solaris boot partition
1EH Hidden LBA VFAT partition C0H DR-DOS/Novell DOS secured partition
24H NEC DOS C1H DRDOS/sec
3CH Partition Magic C4H DRDOS/sec
40H Venix 80286 C6H DRDOS/sec
41H PPC PreP Boot C7H Syrinx
42H SFS DBH CP/M/CTOS
4DH QNX4.x E1H DOS access
4EH QNX4.x 2nd part E3H DOS R/0
4FH QNX4.x 3rd part E4H SpeedStor
50H OnTrack DM EBH BeOS fs
51H OnTrack DM6 Aux F1H SpeedStor
52H CP/M F2H DOS 3.3+ secondary partition
53H OnTrack DM6 Aux F4H SpeedStor
54H OnTrack DM6 FEH LAN step
55H EZ-Drive FFH BBT
56H Go1den Bow

在一块硬盘中是允许有多个主磁盘分区的,来看一个例子。

图4-20所示是“计算机管理”中的“磁盘管理”界面,其中“磁盘1”是一块2GB的硬盘,从图中可以看到,这块硬盘分为3个区,都为主磁盘分区,没有扩展分区。

主磁盘分区的结构分析-数据恢复迷

图4-20 三个主磁盘分区

用WinHex打开这块硬盘的MBR扇区查看它的分区表,如图4-21所示。

主磁盘分区的结构分析-数据恢复迷

图4-21 三个主磁盘分区的分区表项

再用WinHex的MBR模板看一下它的参数,如图4-22所示。

主磁盘分区的结构分析-数据恢复迷

图4-22 三个主磁盘分区的MBR模板

不知道读者是否看出规律了,如果还没有看出来,我们一起分析一下。

首先做一个说明,前面提到过,分区表中的C\H\S参数基本上不起什么作用,所以在分析分区表时,对其不做分析。

①从每个分区表项的第一个字节可以看到,它们的值都是00H,说明这三个分区都不是活动分区。

②从“分区类型”这个参数可以看到,这三个分区的类型都是0BH,说明它们都是FAT32分区。

③第一个分区的开始扇区为63号扇区,大小为1 028 097个扇区。请注意,这两个值相加得到1 028 160,这个值是什么呢,它就是第二个分区的开始扇区号,这一点可以从第二个分区表项中看到。

④同理,第二个分区的开始位置1 028 160扇区,加上第二个分区的大小1 445 850扇区,得到2 474 010,这个值又是第三个分区的开始扇区号。

我们从中可以发现规律,在这种主磁盘分区中,每个分区的开始扇区号,都是硬盘的绝对扇区号。这一点非常重要,请大家理解并记住。