由于MBR仅仅为分区表保留了64字节的存储空间,而每个分区的参数占据16字节,所以MBR扇区中总计可以存储4个分区表项的数据。如果说逻辑磁盘就是分区,则硬盘最多只能分出4个逻辑磁盘。对于具体的应用,4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用,系统引入了扩展分区的概念。
所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个用来定义分区的参数的指针,这种指针结构形成一个单向链表。这样在主引导扇区中除了主磁盘分区外,仅需要存储一个被称为扩展分区的分区信息,通过这个扩展分区的信息就可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。
无论系统中建立多少个逻辑磁盘,在主引导扇区中通过扩展分区参数就可以逐个找到每一个逻辑磁盘。
扩展分区中的每个逻辑驱动器的分区信息都存在一个类似于MBR的扩展引导记录(Extended Boot Record,EBR)中,如图4-23所示,扩展引导记录包括分区表和结束标志“55 AA”,没有引导代码部分。
EBR中分区表的第一项描述第一个逻辑驱动器,第二项指向下一个逻辑驱动器的EBR。如果不存在下一个逻辑驱动器,第二项就不需要使用。其结构如图4-24所示。
来看一个实际的例子,首先看图4-25所示“磁盘1”的分区情况。
可以看出这块硬盘分了5个区,1个主磁盘分区、4个逻辑驱动器。用WinHex查看该盘的MBR扇区,如图4-26所示。
在分区表部分可以看到两个分区表项,用WinHex的模板看看分区表项的具体值,如图4-27所示。
从第一个分区表项可以看到,主分区为FAT32格式,分区开始于63号扇区,大小是1 638 567个扇区,也就是800MB。第二个分区表项描述的是一个扩展分区,因为其类型为05H,该扩展分区开始于1 638 630号扇区,大小为6 763 365扇区。该扩展分区并不是一个可用的驱动器,而只是对一段空间的描述,在其内部可以进一步划分逻辑驱动器。为了便于表述,称该扩展分区为“主扩展分区”。
下一步跳转到主扩展分区的开始扇区1 638 630,用WinHex查看这个扇区,其内容如图4-28所示。
这是一个什么扇区呢?很明显,这就是EBR扇区,也就是说主扩展分区的开始扇区其实就是EBR,其由分区表和结束标志“55 AA”构成。这是该硬盘的第一个EBR ,我们称它为EBR1。用WinHex的模板查看分区表的数值,EBR扇区和MBR扇区使用同一个模板,如图4-29所示。
第一个分区表项是用来管理第一个逻辑驱动器的,也就是902MB的这个驱动器。从分区表项中具体来看,该驱动器类型是0BH,为FAT32分区,开始于63号扇区,这个值就不是绝对值了,而是一个相对值,也就是说该值是以EBR1的开始扇区1 638 630作为起始扇区来定位的。该分区表项最后一个值记录这个逻辑驱动器的大小,为1 847 412扇区,即902MB。
再看第二个分区表项,分区类型为05H,是一个扩展分区,为什么在扩展分区中还有扩展分区呢?因为扩展分区是用一种链式结构来管理的,EBR扇区中第一个分区表项总是描述当前的逻辑驱动器,第二个分区表项则链接到下一个EBR扇区,以引出下一个逻辑驱动器。我们称这样的扩展分区为“子扩展分区”,并把这个子扩展分区命名为“子扩展分区1”,因为后面还会有子扩展分区,以示区别。
具体分析这个分区表项中的关键值,刚才说过了,该分区类型为05H,表示扩展分区,分区开始位置在1 847 475扇区,这也是个相对位置,是以EBR1所在扇区为起始点来定位的。分区大小为2 040 255扇区,这是指子扩展分区1的大小。
分区表项三和分区表项四都是空的,没有数据,这是EBR扇区的固定结构,分区表项三和分区表项四总是不用的。
接下来要看一看子扩展分区1的开始位置是什么结构。子扩展分区1的相对起始位置是1 847 475,需要计算出这个相对值所对应的绝对值,也就是在该硬盘中的绝对扇区号,只要用1 847 475加上EBR1所在的扇区号1 638 630就是了,结果为3 486 105。
通过WinHex跳转到3 486 105号扇区,看到如图4-30所示的结构。
很明显这也是一个EBR扇区,有两个分区表项及结束标志“55 AA”,我们称它为EBR2。用WinHex的模板具体看一看,如图4-31所示。
分析一下EBR2扇区的分区表项。
第一个分区表项是用来管理第二个逻辑驱动器的,也就是996MB的这个驱动器。从分区表项中具体来看,该驱动器类型是07H,为NTFS分区,开始于63号扇区,这个值也是一个相对值,它是以EBR2的开始扇区3 486 105作为起始扇区来定位的。该分区表项最后一个值记录这个逻辑驱动器的大小,为2 040 192扇区,即996MB。
再看第二个分区表项,分区类型为05H,是一个扩展分区,它的作用也是链接到下一个EBR扇区,以引出下一个逻辑驱动器。我们把这个扩展分区定义为“子扩展分区2”。
具体分析这个分区表项中的关键值,该扩展分区开始位置在3 887 730扇区,这也是个相对位置,是以EBR1所在扇区为起始点来定位的,而不是EBR2,这一点很重要,一定不要搞错。分区大小为1 220 940扇区,这是指子扩展分区2的大小。
分区表项三和分区表项四都是空的,没有数据。
然后看一看子扩展分区2的开始位置是什么结构。子扩展分区2的相对起始位置是3 887 730,需要计算出这个相对值所对应的绝对值,也就是在该硬盘中的绝对扇区号,只要用3 887 730加上EBR1所在的扇区号1 638 630就是了,结果为5 526 360。
通过WinHex跳转到5 526 360扇区,看到如图4-32所示的结构。
乍一看这不太像是一个EBR扇区,这主要是因为在分区表前有一些无用的数据。这些数据是以前的分区中的数据,硬盘重新分区时把该扇区安排为EBR了,而EBR扇区并不会清除这些无用的数据,所以被遗留下来。
这个EBR扇区的分区表中使用了两个分区表项,扇区末尾是结束标志“55 AA”,我们称它为EBR3。用WinHex的模板具体看一看,如图4-33所示。
再分析一下EBR3扇区的分区表项。
第一个分区表项是用来管理第三个逻辑驱动器的,也就是596MB的这个驱动器。从分区表项中具体来看,该驱动器类型是0BH,为FAT32分区,开始于63号扇区,这个值也是一个相对值,它是以EBR3的开始扇区5 526 360作为起始扇区来定位的。该分区表项最后一个值记录这个逻辑驱动器的大小,为1 220 877扇区,即596MB。
再看第二个分区表项,分区类型为05H,是一个扩展分区,它的作用也是链接到下一个EBR扇区,以引出下一个逻辑驱动器。我们把这个扩展分区定义为“子扩展分区3”。
具体分析这个分区表项中的关键值,该扩展分区开始位置在5 108 670扇区,这也是个相对位置,是以EBR1所在扇区为起始点来定位的,而不是EBR3,这一点很重要,一定不要搞错。分区大小为1 654 695扇区,这是指子扩展分区3的大小。
同样,分区表项三和分区表项四都是空的,没有数据。
然后看一看子扩展分区3的开始位置是什么结构。子扩展分区3的相对起始位置是5 108 670,需要计算出这个相对值所对应的绝对值,也就是在该硬盘中的绝对扇区号,只要用5 108 670加上EBR1所在的扇区号1 638 630就是了,结果为6 747 300。
通过WinHex跳转到6 747 300号扇区,看到如图4-34所示的结构。
这也是一个EBR扇区,但分区表中只有一个分区表项被使用,结束标志依然是“55 AA”,我们称它为EBR4。用WinHex的模板具体看一看,如图4-35所示。
再分析一下EBR4扇区的分区表项。
第一个分区表项是用来管理第四个逻辑驱动器的,也就是808MB的这个驱动器。从分区表项中具体来看,该驱动器类型是07H,为NTFS分区,开始于63号扇区,这个值也是一个相对值,它是以EBR4的开始扇区6 747 300作为起始扇区来定位的。该分区表项最后一个值记录这个逻辑驱动器的大小,为1 654 632扇区,即808MB。
第二个分区表项没有数据,说明这是主扩展分区中的最后一个EBR扇区。因为是最后一个,所以就没有下一个子扩展分区了,第二个分区表项自然就不再使用。
同样,分区表项三和分区表项四都是空的,没有数据。
这就是整块硬盘的分区结构。为了便于理解,再用结构图的方式把这块硬盘的分区情况描述出来,如图4-36所示。
图4-36中的数值单位都是扇区。大家通过前面的学习,再对照该图,就应该对分区结构有一个清楚的认识了。