|
作者:GuCuiwen email:[email protected]
注意:*************************************************
我把含图片的文章打包后放在了公社软件下载区,搜索“linux文档”就可以找到!需要的读者请自行下载。**************************************************
版权声明:
本文档可以在网络上在非商业范围内自由转载,转载请注明出处
如果转载版面包含商业广告,请向作者支付至少每千字100园的稿费
以书面,书籍形式转载和出版请按至少每千字100园人民币的标准向作者支付稿费
首先我想说明一下我写这篇文档的原因.我很喜欢在各种linux讨论社区里看文档,有一个经常被问及的问题就是:我为什么不能分区了?或者我为什么只能分两个分区? 进去一看,几乎清一色全都是因为不懂得硬盘分区的知识不理解硬盘分区的概念造成的.对于一些非计算机专业的业余linux爱好者来说,这尚可原谅,但是发现身边很多计算机专业出生,学过微机原理,懂得PC结构的朋友也会有这样的问题.每次看到这样的问题,我都会回答一下,但是我不能给每个人回答一次.我的精力有限,而且我的忍受能力也有限,有时候在回答这些一经重复过几十次的问题后,再看到这些问题,心里就忍不住在骂,你他妈的为什么不去看看相关的教材或者上精华区看看呢!!于是我想以比较详悉的方式来介绍一下关于硬盘分区的知识.我将尽量多的插图来解释硬盘的结构以及分区的时候在他上面发生了什么.
一,一个硬盘只能分四个分区!
有人看到这个标题可能会嗤之以鼻,他会说:你看,我的硬盘从C盘到N盘,有N个分区.这个家伙井然说一个硬盘只能分四个分区!! 我想告诉这些人,当我还是一个菜鸟的时候,看到这个概念的时候也是这样的反应.但是很快为我的无知感到羞愧. 在PC行业标准中一个硬盘只能分四个分区.这样的四个分区在不同的操作系统中被冠以不同的名称他可能叫partition ,primary partition 或者slice ,但是无论他们怎么叫,这些系统都支持这样的四个分区,都可以识别分区的起始位置和大小等信息.这里我把这样的分区用一个最常用的词来命名:主分区(primary partition).为什么一个硬盘只能分四个主分区呢?这是由个人计算机初期的设计架构决定的.一开始,PC被设计成这样的启动过程,开机时主板BIOS进行自检,当一切OK后,就开始读取硬盘的第一个扇区,一个扇区的大小是512字节,这是计算机工业里的标准,无论什么硬盘,一个扇区的大小都是512字节.BIOS把这512字节的内容读出来并执行.这512字节被叫做MBR(master boot record)主引导记录(有的书籍上说是major boot record) .这512自己包含了硬盘最重要的信息:分区表.由于空间只有区区512字节,所以分区表的大小就有很大限制,他被设计成十分小但是又足够描述硬盘的分区情况.包括分区的开始扇区,结束扇区,引导标志,分区类型等等.每个分区信息用16个字节表示,四个分区就用掉了16X4=64个字节,
这64个字节分布在MBR的第467-510字节,后面紧接着两个字节AA和55被称为幻数(Magic Number),BOIS读取MBR的时候总是检查最后是不是有这两个幻数,如果没有就被认为是一个没有被分区的硬盘.尽管分区表中明明有数据,也会报错,告诉你系统不存在.所以,对硬盘加密的简单办法就是从MBR中察掉这两个字节.那么这个硬盘挂到任何电脑上都会显示为一个没有分区的空白硬盘.但是只要把这两个字节重新写上,数据又能读出.当然,你得知道怎么重新写上.可用以下的方法验证以上说的知识.(如果没有特别说明,以下操作都在linux和unix类系统下,所有的数字都是16进制.在windows下你可以用debug工具查看这些内容,很多杀毒软件也提供备份MBR的功能,可以利用杀毒软件把MBR取出来,再用16进制编辑器查看.)
图一,MBR的获取和显示
在上面的命令中,先用dd命令把hda上的MBR取出来,并以文件名mbr.dat以文件的方式存放在硬盘上.因为mbr不是纯文本文件,你用文本编辑器看的时候看到的是乱码,所以需要一个能把二进制转化为16进制数据输出的工具hexdump .以下是用hexdump输出后的MBR内容.我个人还强烈的推荐使用KDE自带的16进制编辑工具KHEXedit,这个工具十分好用,大家可以试一下.可惜,在写一个文档的时候手头没有这个工具.
上图中粉红色的就是分区表数据,绿色的就是幻数.可以看到,这块硬盘只分了两个主分区,因为分区表的最后32字节为空.每个分区表条目的第二字节是引导标记,如果这个字节是80,说明这个字节可以引导.上图中的第一行红色数据 0180中的80,表示这是一个可以引导的主分区.
第二个主分区的引导标记为00(第二行红色数据最后),说明这个主分区不可引导.一个硬盘只能把一个主分区标记为可引导,如果你用某些非常规手段,比如用 dd取出MBR把每个主分区标记为可引导,再用 dd写回去,那么当你用PQ等分区工具分区的时候会报错.值得题一下的是linux的fdisk工具有一个小小的BUG,就是你可以把每个主分区标记为可引导.而一般的分区工具都是不允许的. 另外,每个分区表项的第六字节表示这个分区的类型.可以看到第一个分区的第六字节(第二行红色数据第二段)是83,这是linux分区的分区标识.而第二个分区为0F,这是windows扩展分区的分区标识别.
利用partitionmagic 隐藏分区的原理就是修改这个字节,使系统不能识别,这样在系统下就看不到该分区了.
分区条目的其他字节表示分区的开始位置,结束位置,总大小等等.MBR的其余446个字节是一段很小的程序.他的作用就是我将在下面讲的.
二,操作系统的引导过程.
系统引导在计算机英语中被称为bootstrap 就是长统靴的靴带,如果你把自己想像成一只掉进一只长统靴子的小老鼠,然后想像你顺着靴子的靴带慢慢从很深靴筒里面爬出来,然后见到了广阔的天空,你就明白了计算机系统引导为说明叫bootstrap,因为计算机系统的引导也是这么一个慢慢爬出来的过程,最后导入整个系统.
(搞计算机的老外真有想像力).
首先,BIOS把MBR读出来并放入内存运行,MBR中的前446个字节开始运行,他读取分区表并判断哪个分区是主分区,然后在读取主分区的引导记录,就是某一个主分区的第一个扇区.请注意他和MBR的区别.为了说明方便,我把他称做PBR(partition boot record) ,这个概念是我为了说明方便自创的,在其他文档中是没有的.PMR中也有一段小程序,他负责定位操作系统内核在该主分区上的位置并将内核载入内存运行.因为PMR也只有512字节,他的能力也十分有限,所以通常情况下操作系统内核并不是直接由他引导的,他可能先装入一个系统引导程序到内存运行,然后由系统引导程序把系统内核装入内存.所以在很多引导程序中才有stage1,stage2,stage3的过程,MBR中的前446字节是操作系统在安装的时候装入的,现在的操作系统在安装的时候都会现检查MBR中是否已经存在了引导记录,如果已经有了就问讯是否覆盖.但是有的系统不管三七二十一就直接覆盖掉了,windows98就是这样霸道的系统.这就是为什么有人重装系统后发现不能引导其他系统的原因.以lilo为例,装在MBR中的446字节是lilo引导程序的第一步就是stage1,然后以stage2去引导stage2的程序,stage2引导stage3.这几个stage体积一个比一个大,功能一个比一个强,到最后一个stage的时候他已经有足够的能力引导系统内核,就这样系统内核就被装入内存运行了.注意stage2并不是装在PMR中的,他只在硬盘的某个位置.具体的引导过程因具体的引导工具而略有不同,而基本原理都是一样的,特别是在stage1,都是MBR中的446字节.
Tip: 你可以用 dd if=/dev/hda1 of=pbr1.dat bs=512 count=1 来获取第一个主分区的内容.
三,硬盘分区结构
windows系统总是屏蔽计算机的技术细节,因此用长时间用windows的人都不知道关于硬盘分区的一些基本概念,除了C盘D盘这样的说法,他们对于自己的硬盘知之甚少.通常windows用户的硬盘分区情况如下图:
图四,一般windows用户的硬盘分区方法
其中浅蓝色表示整个硬盘,红色表示MBR,绿色表示PBR深蓝色表示主分区,黄色表示扩展分区中的逻辑分区,逻辑分区数据不限定,上图中象征性的画了4个.特别强调一下,windows的扩展分区也是一个主分区,所以这里用蓝色表示.这个主分区在其他操作系统中可被识别,但是却看不到里面的逻辑分区(D盘,E盘...),因为这个概念是windows系统所定义的,不是PC工业标准,linux系统为了和windows系统兼容,也支持这种逻辑分区.但是大部分的操作系统是不认这种分区的,比如freeBSD,上图中的这块硬盘在freeBSD中,就是两个主分区.
上面的硬盘只用掉了两个主分区,查看MBR中的分区表时分区表最后32个字节都为00.这样的分区方法如果只装windows系统那么一经足够了.如果你要windows+linux那么只能把linux装在逻辑分区中,linux是可以装在逻辑分区中的.通过LILO和GRUB可以将逻辑分区中的系统内核引导.而windows必需装在主分区中,也许有人会疑问:为什么我可以在C盘装windows98在D盘装windowsXP呢?windowsXP不是能装在逻辑分区中吗? Windows系统文件是能装在了逻辑分区,但是启动他所必需的引导文件还是装在C盘这个主分区中的,而且windows的引导程序NTLoader必需是在分区被标记为活动的时候才能装上,这就是为什么你格式化C盘后WindowsXP就不能启动,需要光盘修复的原因.但是假如你分了两个独立主分区,下面那张图那样;
图五,有两个主分区和一个扩展分区的硬盘 |
|