服务器 频道

岳雷:解读分区表的秘密

  看到这里有些朋友不禁有些疑问,分区表只用了八个字节就已经表示了起始和结束位置,为什么还需要后八个字节呢?其实后八个字节是用LBA方法来表示分区的起始位置和结束位置,这可不是多此一举,主要是因为CHS对大容量硬盘已经力不从心了。从刚才的参数分析我们可以看出来,CHS表示柱面的参数最多也就是10个二进制数,10个二进制数只能表示1024个柱面,1024柱面才多大?1024×7.8M=8G。看看,C/H/S无法定位8G以后的硬盘空间,这也是当初设计分区表时目光短浅,如果能用两个字节表示柱面,那现在就完全没问题了。由于C/H/S对现在的海量硬盘根本无用武之地,因此表示分区大小的重任就只能落在LBA的肩上了。

  继续分析分区表项的第九,十,十一,十二字节,这四个字节代表分区之前的扇区数,意思是从分区的起始到硬盘的第一个扇区之前有多少扇区,其实是很隐晦地告诉我们分区从哪里起始。本例中这四个字节的内容是3F 00 00 00,首先我们要高低位互换,四个字节的内容是00 00 00 3F,转为10进制是63,这意味着第一个分区之前的扇区数是63,也意味着第一个分区从63扇区开始。为什么?有人这么问,既然第一个分区之前有63个扇区,那第一个分区应该从64扇区开始才对呀?主要是因为LBA表示扇区是从0开始编号而不是从1开始,分区之前有63个扇区意味着分区之前的扇区是从0到62,那分区起始自然应该从63开始。

  分区表的十三,十四,十五,十六字节代表分区的大小,这四个字节表示分区的扇区数。本例这四个参数为BD 08 FA 00,高低位互换一下,分区的扇区数为00 FA 08 BD,换算为10进制为16386237。知道了分区起始在63,大小为16386237,结束位置也就知道了 63+ 16386237-1=16386299。用winhex转到16386299看看,如下图所示,16386299正是1019柱面254磁头63扇区。(图6)

  对分区表的第一个项内容总结一下,这16个参数告诉我们,第一个分区从0/1/1开始,到1019/254/63结束,可以引导系统,分区类型为NTFS,分区起始的扇区数是63,分区大小是16386237扇区。以前有同学提过问题,分区为什么不从第二个扇区开始?主要是因为MBR太重要,操作系统不希望对此扇区进行太多访问,因此干脆把MBR所在的整个磁道都划到分区之外了,这就是为什么第一个分区从0柱面1磁头1扇区开始。

  分析了分区表的第一项,接下来来分析第二项 00 00 C1 FC 0F FE FF FF FC 08 FA 00 2C CD 05 01。第二项前八个字节中我们只要看第一个字节和第五个字节,知道第二个分区是扩展分区,不能引导,这就够了。其余6个字节用C/H/S表示分区的起始和结束就不用再看了,因为8G以后C/H/S已经失去作用了,第二个扩展分区结束的位置远远超过8G,C/H/S肯定无法表示了,主要看看后八个字节的LBA参数就可以了。扩展分区之前的扇区数是FC 08 FA 00,高低位互换后是00 FA 08 FC,也就是扩展分区之前的扇区数是16386300,扩展分区的起始是16386300扇区。扩展分区的大小是2C CD 05 01,高低位互换后再转为10进制是17157420扇区,因此可算出分区的结束是在16386300+17157420-1=33543719扇区。扩展分区的起点和终点都知道了,通过Winhex查询C/H/S参数,可知分区的起始是1020/0/1,结束在2087/254/63。

  分析了MBR的分区表后,我们发现分区表中定义了两个分区,一个是主分区,一个是扩展分区。看到这里,有人要问了,这个硬盘明明有四个分区,怎么在分区表中只定义了两项?到目前为止,只有C分区被定义出来,D,E,F分区在哪里定义呢?答案在扩展分区里,在扩展分区的第一个扇区,有一个分区表,分区表中将定义出主分区D,然后定义出下一个扩展分区。找到下一个扩展分区的起始扇区,又会看到一个分区表,定义出主分区E,然后又定义下一个扩展分区……这种依靠扩展分区的方法被称为链式分区表,其实使用扩展分区也是无奈之举,由于MBR的分区表只有4项,我们如果不使用扩展分区就最多只能使用四个分区。有了扩展分区之后,显然分区的数量就不受限制了,而且现在从分区表的角度来看,分区表中只有主分区和扩展分区,根本没有逻辑分区。我们使用的逻辑分区,不过是在扩展分区的分区表中定义出来的主分区而已。分区拓扑如下图所示。(图7)

  我们转到扩展分区的起始,继续向下分析分区表,扩展分区的起始位置在1020/0/1,分区表内容如下图所示(图8)

0
相关文章