对linux档案系统以及磁盘管理的一点总结(二)

       下面谈谈硬盘的分区。首先应明白的是为什么要分区,一个硬盘作为整体使用不挺好吗?何必非要分成类似于windows系统下的C盘、D盘等等呢?参见这里:http://bj.xlysoft.net/jc11.html 。

    分区实际上是以磁柱为单位进行存储空间的规划,一个磁盘分区(partition)是位于两个不同的磁柱之间连续存储空间。这里要注意的是:分区的最小粒度是磁柱,即一个磁柱不可能同时属于两个分区。所以在分区的时候如果输入的空间不是磁柱容量的整数倍,那么余数会单独占用一个磁柱,而这个磁柱剩余的空间是不参与分区的。换句话说,我们无法利用这块空间,显然这造成了浪费。然而这些空间很可能会被病毒利用,作为藏身之所。
  从上面可以看出,对分区而言,最重要的是记录一个分区的起始磁柱和结束磁柱。这些信息放在哪里呢?从这里就引出了重量级概念——MBR。MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁柱0磁头1扇区。不过,在总共512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。主引导记录中包含了硬盘的一系列参数和一段引导程序。其中的硬盘引导程序的主要作用是检查分区表是否正确并且在系统硬件完成自检以后引导具有激活标志的分区上的操作系统,并将控制权交给启动程序。MBR是由分区程序(如Fdisk.exe)所产生的,它不依赖任何操作系统,而且硬盘引导程序也是可以改变的,从而实现多系统共存。
  这里我们的重点是DPT的64个字节——存放分区信息的地方。维基百科说:由于每个分区信息需要16个字节,所以对于采用MBR型分区结构的硬盘,最多只能识别4个主要分区(Primary partition)。所以对于一个采用此种分区结构的硬盘来说,想要得到4个以上的主要分区是不可能的。这里就需要引出扩展分区了。扩展分区也是主要分区的一种,但它与主分区的不同在于理论上可以划分为无数个逻辑分区。
    从而,当我们想要4个以上的分区时,就必须把最后一个主分区改造成扩展分区。注意,扩展分区只是一个概念,具体的实现方式是逻辑分区。所有的逻辑分区合起来称作扩展分区。扩展分区可以看成是特殊的主分区,而且往往排在主分区的最后面。


我们需要了解一下描述分区信息的16个字节的具体含义(编号从0开始,第16个编号为15)
(1)第1个:  引导标志。80表示活动分区,00表示非活动分区。
    所谓活动分区在我看来是装有操作系统的分区,如果电脑安装了多系统(如windows和linux)那么就会有多个活动分区,但是每次只能选择一个。这就是在开机启动后尚未进入操作系统前,会出现操作系统选择菜单的原因。
(2)第2、3、4个:  分别是本分区起始磁头号、扇区号、柱面号。
  这里需要注意一下,第2个字节全部用来表示磁头号,一个字节是8位,从0000 0000到1111 1111,可以表示2的8次方即256个号码。这就意味着磁头的最大数量是256(也就是盘片的最大数量是128),这个限制是由MBR决定的。而磁头号从0开始计数,于是磁头号的上限就是255。
  第2个字节没有全部用来表示扇区号,而是这样分成了两部分:00 000000,其中后六位专门表示扇区号,而前两位和后面一个字节连起来表示磁柱号。这么做的原因是扇区的数量比较少而磁柱的数量比较多。
  从000 000到111 111共可以表示2的6次方即64个号码,但实际上只用了63个。因为扇区是从1开始计数的,于是舍弃了000 000这个号码,你会发现在扇区的物理地址都是从01(省略前面四个0)开始的,没有00这一说。那么扇区号的上限就是63,按照这个说法,我的上一篇文章的疑问似乎得到了解答:每个磁道的扇区数量是相等的,而且都是63。
  第3个加上第2个字节的前两位共10位,从00 0000 0000到11 1111 1111,可以表示2的10次方即1024个号码。磁柱号从0开始计数,于是磁柱号的上限就是1023。但是实际的磁柱数量远多于1024,从而造成一个问题:编号大于1023的磁柱如何被识别?下面会谈到这个问题。  
(3)第5个: 文件系统标识。用来描述这个分区的文件系统类型,见下图:


    我们要关注的是扩展分区:0x05H,0x0FH。正是这个标志把扩展分区和其他主分区区别开来:其他主分区在这个位置直接标示了分区的文件系统类型,但是扩展分区却是一个专门用来表示该分区是扩展分区的标志——即该分区没有文件系统类型。这是因为扩展分区下面有至少一个逻辑分区,而每个逻辑分区的文件系统类型可以是不一样的,从而作为逻辑分区总和的扩展分区自然就不知道到底该用哪个文件系统类型的标示。
第6、7、8个:  本分区结束磁头号,扇区号,柱面号。
   与第(2)部分类似,不再详述。需要注意的是,很多情况下它并不准确,原因见(2)。
(5)第9到12个: 可以理解为从对应的分区表所在扇区到本分区的第1个扇区的距离(以扇区为单位)。
  对于主分区而言,对应的分区表就是主分区表,其所在扇区是(0磁柱0磁头1扇区);对于逻辑分区而言,由于每个逻辑分区都有自己的分区表,于是就是逻辑分区的起始扇区到自己的分区表所在扇区的间隔(下面会详述)。这个距离因为是绝对距离,所以往往用来确定分区起始扇区的准确位置。
  需要注意的是,这四个字节转换成十进制的时候需要倒序,如7E 04 7D 00要先换成00 7D 04 7E才能转换十进制,具体原因涉及到大端小端,不再详述。
第13到16个:  本分区总扇区数,即分区大小。
  同上,也需要转换的时候采用倒叙。结合起始位置就能得到准确的结束位置。


下面就谈谈扩展分区的实现。
  从上面的叙述可知,在主分区表里,扩展分区有个特殊的标记,除了这个标记以外,描述扩展分区的16个字节与其他主分区是类似的。现在假设我们想要五个分区,那么主分区表就有三个主分区一个扩展分区,而不能容纳更多的分区信息了,这是MBR决定的。容纳不了的那部分信息只能放到扩展分区内部,于是就有了EBR,Extended Boot Record(扩展引导记录)。
  EBR模仿了MBR,共512字节分为三部分:前446字节置0(这一点我还不确定,但是这一点很重要,因为涉及到了双系统问题,以后研究);中间64字节为分区表;最后2个字节为结束标志。其中分区表也是分为4个项,每项16个字节:第一项指向它对应的分区,第二项指向下一个逻辑分区的EBR。如果不存在进一步的逻辑驱动器,第二项就不会使用,而且被记录成一系列零。分区表的第三项和第四项永远都不会被使用。
  下面有两个图可以凑活看看,虽然不太精确,请忽略引导扇区。
  
  
  EBR位于每个逻辑分区起始磁柱的0磁头1扇区,而逻辑分区本身却起始于同一磁柱的1磁头1扇区。其实MBR和EBR一样,虽然本身只有一个扇区的容量,但是却霸占了整个磁道(即分区起始磁柱的0磁头),该磁道的其他扇区就算空着(好像也不空,但我还没研究这块)也不给分区用,因而操作系统无法对这些扇区进行读写,分区只能从下个磁道(即同一磁柱的1磁头)开始。
  扩展分区被分成两个逻辑分区,那么扩展分区实际上包括四部分:EBR1,逻辑分区1,EBR2,逻辑分区2。两个以上的逻辑分区也是类似的这种架构。
  主分区表中第四项描述了关于扩展分区的整体信息,包括起始扇区,终止扇区,扇区总数以及起始扇区到(0磁柱,0磁头,1扇区)的距离。其中起始扇区就是EBR1所在的扇区,这样我们根据主分区表找到了第一个扩展分区表EBR1,然后根据EBR1找到第一个逻辑分区和EBR2,然后根据EBR2找到第二个逻辑分区。这样看来,从主分区表到EBR2就是一个单链表,他们用“指针”联系起来。我们总可以根据前面的分区表找到后面的分区表,从而找到相应逻辑分区的地址,但是不能从后往前寻找,于是如果前面的EBR坏了,后面的也就都报废了。
  总体来看,逻辑分区1虽然是扩展分区的第一个逻辑分区,但是二者的起始扇区并不一致,而是相差63个扇区,正好背对背(分别在同一磁柱的0磁头1扇区和1磁头1扇区);但是呢,最后一个逻辑分区的终止扇区一定是扩展分区的终止地址,这样才能保持一致。
  
  写到这里,我们仍没有进入文件系统级别,亦即上面所有的这些东东全部或者是在操作系统(以及文件系统)建立以前就存在的,或者是随着操作系统的安装一起出现的,他们跟操作系统无关(这个我还不太确定)。其他该说的都说完了,还有一些细节看一看百度百科硬盘分区表词项。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值