这四个分区在分区表中如何表现呢?我们从图中可以看出分区表中只有两项内容,分别是
80 01 01 00 07 FE FF FB 3F 00 00 00 BD 08 FA 00,00 00 C1 FC 0F FE FF FF FC 08 FA 00 2C CD 05 01。这意味着MBR的分区表中只定义了两个分区,我们一个一个来分析,先分析第一个分区表项,80 01 01 00 07 FE FF FB 3F 00 00 00 BD 08 FA 00,我们先解释一下这16个字节的含义。
第一个字节的内容是分区的引导标志,80表示是引导分区,00表示不是引导分区。第二,三,4字节表示分区的起始磁头,扇区,柱面,本例中三个参数分别是01 01 00,这代表第一个分区从0柱面1磁头1扇区开始。第五个字节表示分区类型,07表示NTFS分区,常用的类型有 0F(扩展分区),0B(FAT32),06(FAT16)。第六,七,八字节分别表示分区的结束磁头,扇区,柱面。注意,这里有些玄机,分区的起始扇区和结束扇区看起来用了一个完整字节,其实不是。由于C/H/S中扇区编号从1到63,因此用一个字节表示有些浪费,一个字节由八个二进制数组成,扇区编号只用了低六位,高2位给柱面用了。因此,表示柱面其实用了10个二进制数,其中高2位是从扇区参数中借来的。结合本例看看,六,七,八参数分别是 FE FF FB,分析一下,FE表示分区的结束磁头是254,FF拆为二进制是11111111,低六位是111111,用来表示分区的结束扇区,也就是说结束扇区是63。FF拆开后高2位11给了柱面用,也就是说分区的结束柱面不是FB,而是3FB,3FB等于十进制的1019。这下子我们明白了,第一个分区开始在0/1/1,结束在1019/254/63。
看到这里有些朋友不禁有些疑问,分区表只用了八个字节就已经表示了起始和结束位置,为什么还需要后八个字节呢?其实后八个字节是用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扇区。
对分区表的第一个项内容总结一下,这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。