来源:http://www.ddvip.net/

越来越大的硬盘让人们有了更多的选择,一些玩LINUX的人也开始尝试更多的操作系统,使用UNIX的人也开始尝试使用LINUX,而WindowsXP在做某些工作还是比较方便,本文就是基于这样一个想法,让三种系统共存在一个硬盘里,并很好的工作。本文的主要探讨的内容是硬盘的分区和grub配置安装的一些要点和基础知识的讲解,并不太深入细节,希望本文对大家有帮助。


1.在阅读本文之前,我们有几个约定:

引导程序选用GRUB--这个新的引导程序的强大和灵活不用我来说了,知道的的就知道了,不知道它的建议去找找它的资料,然后把LILO给换了。:)它的功能是我选用它的原因。
我们使用一个硬盘作例子,如果你有多个硬盘,你需要更改文中的一些硬盘名参数。
最后一个约定很重要,那就是你用本文作指导时,请先备份你的资料,尽管我已经很小心并试验了全文中的各个部分,但是仅是在我的机上成功实现,我并不担保在你的机上成功实现。

2.我们先来明确几个概念:

一块硬盘最多可以分成四个主分区,原因是在硬盘的起始引导扇区MBR中只能记录四个分区的信息,其中一个比较让从windows下转过来人容易误解的是扩展分区也是属于一个MBR主记录的分区之一。这也就是说,如果你把一个硬盘分四个主分区,那么就不能分扩展分区了;如果你要分一个扩展分区,那你就只能最多分三个主分区了。

因此,我们只能分四个主分区,并且只有一个分区是活动的,它是系统开机读入MBR之后默认访问的分区,从这个分区的引导扇区读入引导该分区操作系统的信息并引导该系统,但是像LINUX的lilo和GRUB进驻MBR后,MBR的引导方式又多了一种,那就是可以直接指定一个分区,并从中加载指定分区的引导扇区并引导这个分区的操作系统。

顺带说一下扩展分区,众所周知,可以在扩展分区里划分多个逻辑分区。扩展分区的信息由MBR记录,而逻辑分区的信息则是由扩展分区的引导扇区记录的。

这一部分很重要,下面的将重点使用这部分知识
在LINUX中,硬盘的分区是这样命名.
如果你只有一个硬盘,并把它装在IDE1上,那么你的硬盘名在LINUX中称为hda,在硬盘中的分区规则则是:从1开始划分主分区(注意,这里的主分区包括了扩展分区,下面提到的主分区也是如此理解),比如,你在硬盘里划分了三个主分区,第一个称1,第二个称2,第三个称3,以此类推。那逻辑分区呢?因为一块硬盘只能有四个主分区,那命名规则中把1,2,3,4分给了主分区,那么逻辑分区只能从5开始命名,这就是为什么我们看到逻辑分区总是从5开始的原因了。好了,这样,我们就可以唯一的给我们的硬盘命名了,举个例子,你的第一块硬盘的第一个分区称为hda1,第一块硬盘的第二个分区称为hda2........,第二块硬盘的第一个分区称为hdb1,第三块硬盘的第二个分区称hdc3,以此类推。但是如果你的第一块硬盘分二个区,第二个分区(hda2)是扩展分区,并在扩展分区里分了两个逻辑分区,那么你的命名方式将是这样的:
第一分区为:hda1
第二分区(即扩展分区):hda2
第二分区第一逻辑分区:hda5
第二分区第二逻辑分区:hda6
这时你用fdisk -l,查看分区信息时将会有类似如下显示:
Device Boot Start End Blocks Id System
/dev/hda1 * 1 638 5124703+ 83 Linux
/dev/hda2 639 7476 39560062+ 5 Extended
/dev/hda5 7477 2615 514048+ 82 Linux swap
/dev/hda6 2616 3890 10241406 83 Linux

grub的硬盘命名方式和LINUX中稍微有所不同:
对IDE1主盘,IDE1从盘,IDE2主盘,IDE2从盘命名为hd0,hd1,hd2,hd3,也就是用0-3代替了a-d,对每个硬盘里的分区用也是以0开始的数字代替了原本以1开始的LINUX下的命名,而扩展分区的逻辑分区是从4开始命名的,这样,在LINUX下的命名在GRUB可是要减1了,由上举个例子,第三个硬盘的第二个分区将命名为hd2,1上述的例子中的分区对应如下:
/dev/hda1 ------- (hd0,0)
/dev/hda2 ------- (hd0,1)
/dev/hda5 ------- (hd0,4)
/dev/hda6 ------- (hd0,5)

OK,所有的准备知识都已经讲完,要是你对以上内容还有疑问,建议找找其他的相关内容参阅。

3.正式的安装:
3.1 分区考虑:
安装的难点是FreeBSD和WindowsXP都必需要安装在主分区内,这样就需要我们对硬盘的分区有所考虑。
在一块40G的硬盘里作为例子,可以更加的说明问题:
既然FreeBSD和WindowsXP都必须要安装在主分区内,而LINUX可以安装在扩展分区中,也可以安装在主分区中。那么,这意味着我们必须要分至少三个主分区,其中一个为扩展分区,另外两个分区分别给FreeBSD和WindowsXP,扩展分区里的逻辑里安装LINUX。但我不想厚此薄彼,干脆就分四个主分区,其中包括了一个扩展分区,里面分两个逻辑分区,这样,我们的分区方案(以LINUX的命名方式描述)就定下来了:

/dev/hda1 第一主分区
/dev/hda2 第二主分区
/dev/hda3 第三主分区
/dev/hda4 第四主分区(即扩展分区)
/dev/hda5 扩展分区第一逻辑分区
/dev/hda6 扩展分区第二逻辑分区

3.2 对硬盘格式化,使用fdisk进行低级格式化(即常说的分区):
我这里选用Dos下的fdisk,你也可以使用其他的分区工具,比如LINUX下的fdisk,但建议只用一种分区工具对硬盘分区,因为使用多种分区工具的话可能会产生兼容上问题,而使分区表无法使用。你可以根据自己的实际需要划分分区的大小。但有一个比较好的建议是在扩展分区里划分一个小的大约是内存的大小两倍的逻辑分区给LINUX用作SWAP分区,而活动分区随便,不作要求,这全得益于GRUB的引导方式不是只能从活动分区引导操作系统,而是它能定位特定分区并启动该分区的操作系统。这里不打算详细写出分区步骤,这方面的参考资料太多了,用google搜一下,跳出的网页足以让你看上一个星期。(夸张了一点点)

3.3 安装步骤的选择:
可以先安装FreeBSD或是Windows,再安装LINUX,原因是LINUX现在都有自带GRUB的安装,我们要使用GRUB引导三个系统,就可以在最后安装LINUX时把GRUB安装在MBR上,而不会给FreeBSD和Windows的引导程序覆盖掉。在这里我选择先安装FreeBSD.

3.3.1 安装FreeBSD
在FreeBSD下将主分区称为SLICE,命名方式IDE第一块硬盘里的四个主分区称为wd0s1,wd0s 2,wd0s3,wd0s4。
LINUX里的命名方式来述说,把FreeBSD放在/dev/hda1分区里,用光盘安装,插入FreeBSD安装盘,光盘启动之后有一些交互的安装,安装指导请参阅其他相关资料,到了分区界面下时,选择wd0s1安装FreeBSD,然后按T改变这个分区的类型,165是FreeBSD的分区类型FFS的代号,然后按w写入完成,在选择引导程序里,可以选:BOOTMANAGER,最后退出,接下来安装下面的步骤,此处省略。

3.3.2 安装WindowsXP
这个步骤要说明的就是把它安装在第二个主分区,即/dev/hda2中,在分区界面里选择第二个分区,建议使用FAT32格式化该分区,这样可以使LINUX可读可写该分区,用NTFS则在LINUX下不可写入,只能读。下面的安装步骤都不用说了,是地球人都会按NEXT了。

3.3.3 安装LINUX并配置GRUB
这个步骤安装LINUX,安装LINUX的文章更多,有许多非常优秀的文章,如果你还不会安装LINUX,可以先去看这些文章再读本文,我这里只讲一些要点,在分区界面里,把第三个分区,即/dev/hda3用做LINUX的安装分区,同时你在扩展分区里划了准备用作SWAP的分区的话,记得把它一起加上格式化。OK!!,可以了,在下面的步骤里,你要选择把GRUB安装到MBR中,必须要这样做。安装在其他地方是不可以用GRUB来引导的,可能安装这些时GRUB并不能识别你在第一分区的FreeBSD,或者在你硬盘里的其他一些操作系统,不要紧,我们可以对GRUB做一些修改,使它引导这些操作系统。在这里给出在本例中的GRUB配置。
一般来说,Windows是可以被检测到的,但FreeBSD可能会有些问题。

在GRUB的配置中,主要是对/etc/grub.conf作修改:
可能安装好LINUX后的/etc/grub.conf文件和下面的很类似:

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You do not have a /boot partition. This means that
# all kernel and initrd paths are relative to /, eg.
# root (hd0,5)
# kernel /boot/vmlinuz-version ro root=/dev/hda6
# initrd /boot/initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,2)/boot/grub/splash.xpm.gz
title Linux (2.4.20-8)
root (hd0,2)
kernel /boot/vmlinuz-2.4.20-8 ro root=LABEL=/1
initrd /boot/initrd-2.4.20-8.img
title Dos
rootnoverify (hd0,1)
chainloader +1

我对主要的行作一些解释,以#打头的是注释行,可以不用理它。
default=0 是指默认选项是第一个title标记的操作系统将引导,这里是LINUX
timeout=10 指十秒之内用户没有作出选择的话,将以默认的选项操作系统引导
title Linux (2.4.20-8) 这行是title标记,后面的内容在GRUB菜单中被显示
root (hd0,2) 这行是指从哪个分区引导操作系统,即GRUB定位分区操作系统
kernel /boot/vmlinuz-2.4.20-8 ro root=LABEL=/1 这行是从指定分区中给出内核的路径,以便引导系统
rootnoverify (hd0,1)和chainloader +1表示从特定分区使用链式的引导方式,本例来说即GRUB定位hd0,1这个分区里,找到该分区的操作系统的引导程序,启用它,让它来引导该分区的操作系统。一般来说,windows系列就是这样引导的。

另外我们这里title Dos标记引导的是WindowsXP了。

现在这个40G的硬盘里的三个操作系统可以引导两个了(如果你的WindowsXP不能引导的话,把/etc/grub.conf改成上面类似的样子,再进行下面的步骤);
接下来要修改/etc/grub.conf以使它可以引导FreeBSD,
加入下面的内容到/etc/grub.conf中:
title FreeBSD
rootnoverify (hdx,y)
chainloader +1
要是你理解了上面以Dos为标记的引导块的语句,就不难理解这个FreeBSD的引导块的语句了。上面的意思是定位到hdx,y分区(本例中为hd0,0,这正是我们安装FreeBSD的分区),然后启用该分区的引导程序,由该引导程序来引导FreeBSD。
还有一种方法也可以实现FreeBSD的引导,你也可以尝试一下,但不一定都成功。
加入以下几行至/etc/grub.conf
titile FreeBSD
root(hd0,x,y)
kernel /boot/loader
其中,x为你的FreeBSD的分区,y为FreeBSD/所在的SLICE.

OK!保存修改。如果一切顺利的话,重新启动机器,将看见有三个可选项,LINUX,FreeBSD和Dos,试着进入每个系统,所有配置正确的话将看见每个系统都可以进入。如果你发现有某个系统不能进入,请找到一些GRUB的资料,它将给你详细的指导。

如果你对本文的任何错误或是改进,请和我联系huangyiddle@21cn.com,本人将非常的感激。