服务器 频道

岳雷:解读分区表的秘密

  三 扇区定位

  硬盘中有数以亿计的扇区,如何才能准确定位到每一个扇区呢?一般用C/H/S和LBA两种方法。这两种定位方法都很重要,我们来好好看看。

  C/H/S指的是利用柱面/磁头/扇区这三个参数来定位扇区,有的资料说C/H/S指的是磁道,磁头和扇区,这就不准确了。磁道是硬盘盘体上的同心圆,每个磁道上排列了63个扇区,盘体最外圈为0磁道,从外圈向内圈编号逐步加大。由于一块硬盘有多块盘体,因此硬盘可以看作是一个圆柱体。这时就看出用磁道定位不妥的地方了,磁道显然是只适合在二维空间定位,不适合在三维空间中表示准确的坐标。柱面就没有这个问题了,柱面是所有盘体上磁道的集合,例如0柱面指的是所有盘体上的0磁道所组成的一个圆柱体。这下您肯定明白了,原来磁道是二维的圆,柱面是三维的圆柱。

  一个柱面包含了若干磁道,如何来准确表示柱面中的具体磁道呢?这时就可以使用磁头参数了。每个磁头负责读取柱面中的处于不同高度的磁道,我们只要给出具体的磁头数值,就知道对应柱面中的哪个磁道了。这样我们根据柱面和磁头两个参数就可以准确地定位到盘体中的某个磁道,一个磁道上有63个扇区,我们只要再知道扇区的编号,就可以完成在三维空间中定位扇区的任务了,C/H/S三个参数就是这样定位扇区的。

  柱面编号从0开始,每个柱面有255个磁头,编号从0到254,每磁道有63个扇区,编号从1到63。有朋友问:难道硬盘中真的有255个磁头吗?当然不是,硬盘中的磁头很少会超过4个,真正硬盘的每个磁道也不是都有65个扇区。每柱面255磁头每磁道63扇区这种模型只是为了研究问题方便而人为规定出来的,就象我们规定每小时有60分钟而每分钟有60秒那样。虽然柱面中的磁头数量和实际不符,但由于硬盘中有一个地址翻译器,可以将标准模型中的CHS参数转换为硬盘实际的CHS参数,因此我们用C/H/S定位扇区是没有问题的,这就象可以从阴历的日期转换为阳历的日期。

  柱面是研究分区非常重要的一个参数,分区以柱面为粒度。这话怎么理解?操作系统分区时要考虑柱面因素,分区总是结束在柱面的最后一个扇区,也就是说分区总是结束在某个柱面的254磁头63扇区。这就解释了为什么你要求的分区大小和实际分区大小总是有些小小的误差,例如你要分一个区是200M,操作系统在分区时考虑的是这个分区到到哪个柱面结束离你的要求误差最小。这种以柱面为粒度的分区方式肯定会有误差,误差不会超过半个柱面,一个柱面的大小是 255磁头×63扇区×512字节=7.8M

  LBA定位扇区的方式就简单多了,LBA方法是把硬盘当作一个扇区集合,LBA给硬盘中的每个扇区都赋予一个唯一的编号,只要你说出扇区编号就可以定位出扇区位置。LBA只用了一个参数,而C/H/S用了三个参数,两种方式可以相互转换。就象我们习惯用年月日来表示历史上的某一天,但其实也可以直接说今天是公元某某天。硬盘上的第一个扇区用C/H/S表示是0/0/1,0柱面0磁头1扇区,用LBA表示就是0号扇区。C/H/S和LBA之间有转换公式,但我很少会手工计算,我一般都利用Winhex帮忙,例如我想知道950/254/63对应的LBA是多少,我就在Winhex中选择转到扇区,如下图所示,输入C/H/S参数。(图2)

  Winhex转到指定扇区后会同时显示显示C/H/S和LBA参数,如下图所示,Winhex告诉我们950/254/63对应的LBA参数是15277814。从LBA转换C/H/S也可用同样方法。(图3)

  好了,掌握了这些基础知识,我们就可以来分析分区表了。分区表在硬盘的第一个扇区,0柱面0磁头1扇区,这个扇区也被称为MBR,主引导记录。MBR有512个字节,分为三部分内容,第一部分是个引导程序,446字节;第二部分是分区表,64字节;第三部分是结束标志,内容是55AA,2字节。如下图所示就是MBR的内容,绿色部分为分区表。(图4)

  分区表有64个字节,可以表示4项分区,每项分区为16个字节。我们只要把16个字节的内容搞清楚了,分区表就不再神秘了。上图所使用的计算机硬盘分了四个区,如下图所示,是大家常用的分区方法,一个主分区,一个扩展分区,扩展分区内分了三个逻辑分区。(图5)

  这四个分区在分区表中如何表现呢?我们从图中可以看出分区表中只有两项内容,分别是

  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。

 

0
相关文章