上一篇文章中提到,MBR磁盘通过扇区零即主引导记录中的分区表管理磁盘分区,但是这仅限于主分区和扩展分区,但是很多时候,我们需要创建的分区不止4个,所以就需要在扩展分区中创建逻辑分区。

MBR磁盘上,每个逻辑分区都对应有一个数据结构,它类似于主引导记录MBR,占用一个扇区的空间,通常称为EBR。在EBR中,只有分区表中的前两项以及结束标志0xAA55有效。EBR分区表的第一项表明当前逻辑分区的偏移地址,第二项表明下一个逻辑分析EBR的开始位置。逻辑分区的管理类似于数据结构中的链表,第一个节点由链表头指定,即MBR分区表中的扩展分区指定了第一个逻辑分区EBR的开始位置,之后每个节点中都有一个属性表明下一个节点的地址。EBR的原理如下图所示。

152102104.jpg

如上图所示的3个逻辑分区中,如果需要读取分区3中的数据,系统会采取如下流程:

1:读入磁盘MBR扇区,查找分区表中是否存在类型为5的扩展分区,并记录扩展分区的偏移地址;

2::跳转到扩展分区的第一个EBR扇区,该EBR的第二项记录了第二个逻辑分区EBR的地址;

3:读取第二个EBR扇区,该EBR的第二项记录了第三个逻辑分区的EBR地址;

4:跳转到第三个EBR扇区处,读取第一个分区表项,该项中分区开始偏移记录了该逻辑分区到本EBR之间的偏移距离。

5:读取第三个逻辑分区的内容。

在这个过程中,必须要注意的是, EBR 中分区表项开始地址是相对地址,而 MBR 中的分区开始地址则是相对于磁盘扇区 0 的绝对偏移地址。例如,对于上图中的第一个逻辑分区 EBR ,其中的第一项表示当前逻辑分区,其开始偏移指的是相对于该 EBR 的偏移,如 EBR 的地址是 0x10000 ,且 EBR 指定逻辑分区开始偏移为 0x800 ,那么该逻辑分区相对于磁盘扇区 0 的绝对开始位置为 0x10800 。另外, EBR 中的第二个分区表项指向下一个逻辑分区 EBR 的地址,它和第一项有所不同,它是相对于主扩展分区的开始偏移的相对位置。如 MBR 中记录了扩展分区的开始位置为 0X100000 ,且 EBR 中第二项开始偏移为 0x10000 ,那么下一个逻辑分区 EBR 相对于磁盘扇区 0 的绝对偏移为 0X110000 。只要注意 EBR 中两个分区表项的开始位置的计算方式不同,就能够很容易的获取每个逻辑分区的地址和大小。