当前位置:Linux教程 - 安装启动 - 安装启动 - 再探安装多操作系统分区,grub的设置问题

安装启动 - 再探安装多操作系统分区,grub的设置问题

再探安装多操作系统分区,grub的设置问题
2004-04-23 15:18 pm
来自:Linux文档
现载:Www.8s8s.coM
地址:无名

从整理论坛的情况来看,还是有弟兄不能搞定GRUB引导多操作系统的问题。看来再次讨论还是有点必要。当然有经验的弟兄,根本就无需看这帖。如果初次安装多操作系统,总是出这样或者那样的问题。这也正常,其实最好的解决办法就是多安装几次,多format几次,这个问题一点也不难。

一。分区:

这也是大家常谈的事了,其实也没有什么难的,但这是最重要的。分区时,最好一次成功。不要给后面安装操作系统带来麻烦。比如空间的大小,分区的个数等。主、扩展以及逻辑分区的个数。这些都是最重要的。

1.硬盘划分为什么很重要?

您可以用dos下的PQ,可能这是最简单的分区工具了。主分区最好只有一个,扩展分区也是一个了。逻辑分区那就根据自己的需要来分。分区要规划好,以防为以后安装操作系统带来麻烦。要有个预期,也就是说,以防您以后安装操作系统,而没有空间。所以我们就要划分硬盘要好好的规划。以满足我们未来不可预期情况的需要。

2.我应该把硬盘划分为多少个区,每个区应该有多大?

对于这个问题,可能有的弟兄很是疑惑。其实对于我们玩家来说,无非是学习和实践。所以我们要为每个linux划分为一个区,空间大小为6G以上。现在的linux体积都很大,如果是初次玩linux,我还是建议完全安装,这样便于您的学习,否则少东少西的,自己都不知道为什么。等玩的技术差不多时,你再拫据自己的需求来选择安装组件。

举个例子,比如我想在一块硬盘上安装两个linux和一个windows,那我就可以这样来划分硬盘。把windows的分区放在硬盘的第一个分区。这个分区大家常用来安装windows系统。如果您还想为windows划分应用程序的分区以及备份文件的分区,那就把第二个和第三个等分区做为windows的分区。linux分区要放在windows的分区的后面,应该避免把windows和linux的分区交叉。我们可以用PQ把linux分区分好。为每个linux分一个大一点的分区6G以上,这里,我们将要在每个分区里,要安装一个linux,其实每个6G左右的分区,就是我们要安装linux的根分区。然后再划分一个小一点的分区,大小为内存的两倍就行。如果用PQ来划分。linux的分区格式,可以不用指定。因为安装系统时,也会有相关的步骤来格式化磁盘。

仔细看一下下面的例子:
在这里,我把安装了,两个linux和一个windows,分区情况如下。主分区是hda1,格式为ntfs,系统是XP,hda2是扩展分区,hda5是逻辑分区,格式为nfts,是windows的安装应用软件的磁盘,hda6,hda7是逻辑分区,格式为fat32的,也是windwows用的,我用来备份和存放常用程序和文档的磁盘。hda8和hda9是linux的磁盘。看一下应该能看得出来,大小为6-7G左右吧。在hda8和hda9,我每个区都安装了一个linux,也就是说,这两个分区是不同的linux的/根分区。hda10也是linux的磁盘,大小是内存的1.5倍,如果您的内存为512M或者以上的,交换分区和内存大小一样就行,格式为/swap。也就是linux的交换分区。

linux的分区,没有windows下面的C盘和D盘的概念。这一点大家应该明白。

一块磁盘最多只能分4个主分区。扩展分区也算一个主分区,所以为了简便 ,我们一块硬盘就分一个主分区,一个扩展分区,其它的都是逻辑分区。下面的例子就是。这样做的好处就是在安装linux的时候,分区表不会错,也不会出现这样或者那样危机windows分区的情况。

在linux中,逻辑分区是从hda5开始的,当然这是说一台机器中只有一个硬盘的情况来说的。如果有两个硬盘,可能就是从hdb5开始,以此类推。如果您不知道,是怎么回事,就要用fdisk -l来查看。要安装系统的时候,也会有相应的让您选择安装位置 ,也是hdaX或者 hdbX分区之类的,没有WIN的C和D盘的概念。

[root@linuxsir01 root]# fdisk -l

Disk /dev/hda: 255 heads, 63 sectors, 4865 cylinders
Units = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 1147 9213246 7 HPFS/NTFS
/dev/hda2 1148 4864 29856802+ f Win95 Ext'd (LBA)
/dev/hda5 1148 2039 7164958+ 7 HPFS/NTFS
/dev/hda6 2040 2804 6144831 b Win95 FAT32
/dev/hda7 2805 3824 8193118+ b Win95 FAT32
/dev/hda8 3825 3830 7768163+ 83 Linux
/dev/hda9 3831 4799 7783461 83 Linux
/dev/hda10 4800 4864 522081 82 Linux swap

3.硬盘的分区划好后,我如何安装linux呢?

我们可以先安装windows,然后再安装linux,这样做的目的就是用grub能把windows引导起来。如果先安装linux,可能windows就把grub从MBR中删除。我们如果重装windwows经常会出现这样的情况,方法只是把GRUB恢复一下就行了。所以为了方便,我们还是先安装windows。这样就减少不少劳动。呵。。。。。

接着举例:

在这里,我是先安装Mandrake 9.0,到hda8,这样做的,在安装过程中,有个[自定义],在划分硬盘和安装软件时都有[自定义]。我们就选这一项,然后把光标移动到hda8,[编辑,指定分区格式和挂载点。格式为ext3,挂载点为/。OK一下,然后再移动hda10,我们编辑这个分区,格式为/swap。这样就简单了。分区都处理好了,就是选择组件来来装。下面就是点鼠标。应该简单。。。一直到最后。


然后我们安装redhat 8.0到hda9,也就是说,我们要把redhat 8.0的根分区设置为hda9。安装过程也一样的。。在划分磁盘是,要[自定义]用disk druid 来分区。光标移动到hda9,然后[编辑],格式为ext3,挂载点为/,可能会跳出一个对话框,那就anyway.吧。不用再编辑交换区了,因为系统能认得出hda10是交换区,不用我们再设置了。linux的交换区是能共用的。我们把hda9设置好后,确认一下,就进入软件安装的过程了。也是[自定久]。。。下面的就一路下去,不用我多说了。

到GRUB的设置的那一块。我们要把GRUB安装到MBR上。这样就把mandrake的GRUB覆盖。这也没有什么可怕的,我们可以把它加在Redhat 的GRUB中,系统安装好后,我们设置一下就行了。只是修改一个文件/etc/grub.conf

4.如何修改/etc/grub.conf
一般的发行版,GRUB的配置文件都在/etc/grub.conf中,如果我们安装了多个linux,就要修改这个文件。那我们如何修改呢?一般的情况下,windows是自动加载到了grub.conf中,打开grub.conf,就能看到windows的设置情况。可能有时系统会突然出现不能引志windwows的情况,我们就要下面的类似的改动一下。
title DOS
rootnoverify (hd0,0)
chainloader +1

改成
title WinXP在这里,title是必须的,WinXP,您可以用别的名,您喜欢怎么样就怎么样。
root (hd0,0)
chainloader +1

这样就能启动了。

2.如何把其它的linux的引导加入到GRUB来引导呢?我们可以用下面的方法。也是比较简单。GRUB引导linux系统,就是靠三行来定义。

title XXX
在这里,XXX是您要引导的操作系统的名字。可以自己来定。

root (hdX,Y)
在这里,X和Y都代表一个数值。X是linux的根分区在哪个硬盘上。如果您只有一个硬盘。那就是hd0。如果您的linux的一个发行版是安装在第二个硬盘,这个X,就是1。那Y代表什么?Y是代表您所安装的linux是在哪个区。这个数值有点不同。用原理没有办法说清楚。应该用实例来说。比如我把mandrake安装到hda8了。那他的root (hdX,Y),就应该写为root (hd0,7),也是说是linux所在的根分区hdaZ中的Z减去1就是这个Y的数值:在这之中,hdaZ或者 hdbZ中的Z也是一个数值。看一下上面的例子就明白了。
用fdisk -l 或者df -la来查看

kernel /boot/vmlinuz root=/dev/hdaZ
这里中的Z,也是一个数值,接着上面的例子,我们把Mandrake的引导加入到Redhat 的GRUB中。就可以写成如下的样子:


kernel /boot/vmlinuz root=/dev/hda8

通过上面的分析,我们要让Redhat的GRUB来引导Mandrake 9.0,我们要改动Redhat中的GRUB的配置文件,加入下面的一段:

title MD 8.0
root (hd0,7)
kernel /boot/vmlinuz root=/dev/hda8

如果您想加入其它的操作系统到Redhat 中的GRUB中,也不过是如此,如者用其它发行版中的GRUB来引导别的发行版,原理也是一样的。

GRUB是不是很简单???
多谢兄弟这么快就写了出来。照兄弟的意思是,如果hda8,hda9都被第一个安装的linux给格式化了,可以不用理睬,因为作为hda8,它有足够的空间给redhat使用,安装mdk时,格式化hda9是对redhat没有任何影响的,是吗?最多将redhat的fstab改一下,是吗?另外,如果有根分区的话,boot的文件也相应在根分区,如果冒出来一个boot分区,岂不是就比较麻烦了?

其实hda8和hda9是安装两个不同的linux,一个是mandrake和redhat。这两个区就分别是mandrake和redhat 的根分区。他们是相互分开的。把Mandrake安装在hda8时,在安装过程中,只格式化hda8和hda10。hda10也就是交换分区,第一次安装linux时,格式化一次,下次安装就不用管他了。别的linux也是一样能找到。安装时就用自定义。这样就能把按自己的意图放在指定的区里。

等安装linux到hda9时,也是用自定义。在安装过程中,有划分磁盘的项目。就是[编辑]一下hda9,只是指定一下磁盘的格式和挂载点/。这样就是让linux知道她就要住在这个地方了。这次,我们就不要编辑别的分区了,否则就把别的分区给的资料给冲掉了。只要hda9操作一点问题也没有。其实安装好后,也不用管。hda9里面的系统。是能启动的。。

另外,我们这样分区也是有道理的。每个linux占一个区,这个区要大,最好是6G以上,事实上,已经包括boot独立分区的内容。boot做为一个目录,将存在每个linux的分区里。

我也把boot独立过。其实安装其它的linux时,也是一样,也是为每个linux划出一个大一点的分区,并让都占用一个linux分区。然后安装时,把他们[自定义],编辑要安装到分区的格式和挂载点。这样就是把他指定到了这个地方。不用理/boot分区。到时在相应的分区里,还有boot这个目录。这个boot对我们来说,可有可无。如果是服务器的安装,是为了方便管理才把/boot分离出来。如果咱们只是学习,没有必要这样做,这样做,把硬盘分的太散了。


另外我在前面也说过,要为linux留一到两个6G左右大小的分区,事先都分好。如果没有用时,可以放点资料什么的文件。格式可以自己来定。加载这些分区在linux里,只是改一下/etc/fstab,而不是在安装上做这些工作,这些工作是在安装完以后的事。这样我们随时就可以把自己喜欢的系统安装到这个预留的空间上。只是把相应的分区的文件倒到有空间的地方。然后把些分区空出来,然后再安装。这一点和windows是一样的。我们安装windows时,会把C盘用来安装系统,当我们重装系统,其它的盘里的东西还是在的,没有一点损失 。。如果我们把D盘用来安装另外的一个windows,是不是要把D盘的资料备份到别的盘里,然后再操作。。。linux的原理和这个差不多。



上一帖中是我的一台机器的硬盘的分区情况。下面是另外的一台机器的丙个硬盘的情况。第一个硬盘的分区情况和前一帖说的差不多,只是hda8是/boot分区。先看一下再说吧。。我举例来说,我们遇到的情况;


[root@linuxsir02 /]# fdisk -l

Disk /dev/hda: 255 heads, 63 sectors, 4865 cylinders
Units = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hda1 * 1 1147 9213246 7 HPFS/NTFS
/dev/hda2 1148 4864 29856802+ f Win95 Ext'd (LBA)
/dev/hda5 1148 2039 7164958+ 7 HPFS/NTFS
/dev/hda6 2040 2804 6144831 b Win95 FAT32
/dev/hda7 2805 3824 8193118+ b Win95 FAT32
/dev/hda8 3825 3830 48163+ 83 Linux
/dev/hda9 3831 4799 7783461 83 Linux
/dev/hda10 4800 4864 522081 82 Linux swap

Disk /dev/hdb: 255 heads, 63 sectors, 9729 cylinders
Units = cylinders of 16065 * 512 bytes

Device Boot Start End Blocks Id System
/dev/hdb1 1 1201 9647001 83 Linux
/dev/hdb2 1202 2052 6835657+ 83 Linux
/dev/hdb3 2053 2781 5855692+ 83 Linux
/dev/hdb4 2782 9729 55809810 5 Extended
/dev/hdb5 2782 3510 5855661 83 Linux
/dev/hdb6 3511 4239 5855661 83 Linux
/dev/hdb7 4240 4968 5855661 83 Linux
/dev/hdb8 * 4969 5697 5855661 83 Linux
/dev/hdb9 5698 6426 5855661 83 Linux
/dev/hdb10 6427 7155 5855661 83 Linux
/dev/hdb11 7156 7884 5855661 b Win95 FAT32
/dev/hdb12 7885 9729 14819931 83 Linux
[root@linuxsir02 /]#

第一个磁盘中。hda1是主分区,hda2是扩展分区,hda5 hda6 hda 7 hda8 hda9 hda10是逻辑分区。这和第一个例子中的那个磁盘不一样的是,hda8是/boot区。看我前面所说的,如果我们把相应的linux指定到相应的分区里。其实这个/boot是没有用的。现在我这台机器 的boot就是没有用的。可有可无。

看一下第磁盘hdb的分区:
hdb1 hdb2 hdb3是主分区,hdb4是扩展分区,是不是符合一个硬盘只能有四个主分区??当时这样分区,也是为了做实验。。

逻辑分区是hdb5 hdb6 hdb7 hdb8 hdb9 hdb10 hdb11 hdb12,看一下格式,其中只有hdb11是fat32格式的,这个我仅用来中转资料,原来也是linux中的ext3格式的。如果我想用hdb11来安装linux,只是在安装过程中,[自定义]=[编辑] 把格式和挂载点弄一下,就能把别的linux安装上了。如果我们还是接上面的例子,我想用redhat 的GRUB来引导新安装的这个linux,比如是turbo吧。我可以不把turbo的引导程序写到MBR上,有的linux是强制我们把GRUB写到MBR上,可以参考以前的帖子,用安装盘来修昨。安装好后,就是编辑grub.conf,让她来引导任意一个linux。也一样简单。。

再举例:看上面的例子,是我的第二台电脑的Redhat 8.0,我安装在了/dev/hdb2上,那我就用hdb2上的Redhat 8.0来引导这台机器上的上的linux。方法参考前面的。我就把没有必要的linux就不提了,只是写几个具有代表性的。看一下hdb2分区中的Redhat 8.0中的/etc/grub.conf

title Red Hat Linux (2.4.18-14)
root (hd1,1)
kernel /boot/vmlinuz-2.4.18-14 ro root=LABEL=/1234 hdd=ide-scsi
initrd /boot/initrd-2.4.18-14.img

title WinXP
root (hd0,0)
chainloader +1
title RedHat 73
root (hd0,8)
kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda9
title TurbO-80
rootnoverify (hd1,2)
kernel /boot/vmlinuz root=/dev/hdb3
title Red Hat Linux Advanced Server (2.4.9-e.3)
root (hd1,4)
kernel /boot/vmlinuz root=/dev/hdb5
title Mandrake 9.0
kernel (hd1,5)/boot/vmlinuz root=/dev/hdb6
title Slackware 81
rootnoverify (hd1,6)
kernel /boot/vmlinuz root=/dev/hdb7
title TurBo Server 7.0
rootnoverify (hd1,7)
kernel /boot/vmlinuz root=/dev/hdb8

兰色的都是我们要自己来改动的。当然WinXP的那段,有的linux是不需要我们来加的。有的是加好的。

我结合实例来说一下。Redhat 7.3是安装在第一个硬盘hd0上,在hda9分区上;

TurbO-80是安装在第二个硬盘hd1上,所在的分区是hdb3上。

Red Hat Linux Advanced Server 是安装在第二个硬盘hd1上,所在的分区是hdb5。

Mandrake 9.0是安装在第二个硬盘hd1上,所在的分区是hdb6

Slackware 81是安装在第二个硬盘hd1上,所在的分区是hdb7上

TurBo Server 7.0是安装在第二个硬盘hd1上,所在的分区是hdb8

看一下前面我说过的GRUB的语法格式,就不难理解这个例子。

有可能有的弟兄在问,hd2有些分区为什么是空的,这就是我留下为用于安装我喜欢的linux系统的。当然。这些也是不空的。有些分区,我用来装了linux的资料。只是在相应的linux的发行版中的根分区里,编辑/etc/fstab,就能把相应的分区加载上。当然这不是这里讨论的话题。

那就看我的/etc/fstab。我仅是加了几个分区的。

LABEL=/1234 / ext3 defaults 1 1
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /dev/shm tmpfs defaults 0 0
/dev/hda10 swap swap defaults 0 0
/dev/cdrom /mnt/cdrom iso9660 noauto,owner,iocharset=cp936,kudzu,ro 0 0
/dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0

/dev/hda6 /mnt/WinE vfat umask=0,rw,iocharset=cp936 0 0
/dev/hda7 /mnt/WinF vfat umask=0,rw,iocharset=cp936 0 0
/dev/hda1 /mnt/WinC ntfs umask=0,iocharset=cp936 0 0
/dev/hda5 /mnt/WinD ntfs umask=0,rw,iocharset=cp936 0 0
/dev/hdb12 /winlinshare reiserfs defaults 0 0


也不知道我说的对不对。。乱说的一通。。弟兄们如果能看明白,我写这篇文章的目的就达到了

来我的问题主要出现在没有给新的系统预留空间,而是简单的以为安装好之后再缩小(划分)现有的linux分区。看来我要把先前安装好的系统干掉了。另外想问一下, rootnoverify是什么意思,为何有的有,有的没有?

root和rootnoverify都是一样的,把rootnoverify改成root也行。不过经过实践来看。有时引导win时,系统安装好后,是rootnoverify (hdX.Y)这样形式的,这样会出现windows起不来,出现什么windows什么文件损坏的情况。这时,我们就要把在grub中,引导windows的那段中的rootnoverify改为root
root英文的意思就是根的意思,在这里是让linux知道自己所处的位置,也就是我们所安装linux的/根分区所在的位置 。象一个座标一样,通过root (X,Y)来定位。
windows也是一样的,在上面的例子中,WinXP在第一个硬盘的第一个分区,用root (hd0,0)来确定。第一个hd0,就是第一个硬盘,第二个0是第一个硬盘的第一个分区。这个就是这样表示的。如果第一个硬盘是hda,那在root (hdX,Y)中,hda就表示为hd0,第一个分区,从0来计算,以后的每个分区都要减1。可能这个地方比较容易搞头晕掉。WinXP所在的分区是hda1,那就用hda1中的数字减去1,就是root (hdX,Y)中的Y的值。看一下在WinXP那段是不是root (hd0,0)
。引导其它的linux也是如此,也仅为三行。
title 在title后面加上为系统所取的名字
root (hdX,Y)在这之中,X和Y都是数值,按我上面说的来确定X和Y的值。
kernel /boot/vmlinuz root=/dev/hdaZ或者hdbZ
在这里。Z-1=Y。
比如下面的例子。看一下,
hdaZ或者hdbz用fdsik -l 或者用df -la就能知道。
fdisk -l 是要列出所有磁盘的分区。而df -la仅列当前系统加载的磁盘分区。

title TurBo Server 7.0
root(hd1,7)
kernel /boot/vmlinuz root=/dev/hdb8

第一行中的兰色,是我们为启动Turbo写的标签,这个能在启动的时候,的GRUB的菜单上就能看到。

第二行,是确定TURBO SERVER所在的根分区。其中hd1表示在第二个硬盘。看一下hd1后面的那个7,是不是第三行,hdb8中的8-1的值??

第三行,就是确定kernel所在的位置。结合例子不难理解。有问题再讨论吧。

__________________

请问GRUB对多个MS系统如何直接引导?而非选择后跳转到W2000或XP的启动管理器boot.ini

如题,在论坛中搜索过一些文章,关于介绍GRUB的,往往都只推荐装一个MS的WXP,例子也是在基於一个主分区安装WXP的基础上,但是如果想玩成GRUB对多MS系统直接引导(有时要用到实DOS),是否也可直接套用rootnoverify (hdX,Y)?感觉有点不对,可怜短期之内无法有自己的PC,无法实践。

现设想如下:
以在GRUB菜单中能直接选择W98和W2000为题,一个硬盘,利用PQ建立两个主分区,若干逻辑分区,先将第一个主分区/dev/hda1设为活动分区,安装w98,再将第二个主分区/dev/hda2设为活动分区,安装w2000,不知这样W2000的系统管理器是否接管了W98,没试过,那就修改boot.ini或为安全起见,先安装W2000到,再装W98,但是无法确定安装完后活动分区该给谁(这个应该不重要吧?),接下来在逻辑分区中装LINUX,GRUB应该能完成多系统的启动,je le pense.

因未实践过,不知在/etc/grub.conf中是否对两个MS系统都表示为DOS,那就修改为:

title W98
rootnoverify (hd0,0)
chainloader +1

title W2000
rootnoverify (hd0,1)
chainloader +1

不知是否有人实践过,可行的话告诉我一声,先谢谢啦!
从LILO时代就这么想过,唉,要等到暑假才能再有自己的电脑,空想真难受啊

先回答你第一个提出的问题吧!!:“第一个主分区/dev/hda1设为活动分区,安装w98,再将第二个主分区/dev/hda2设为活动分区,安装w2000,不知这样W2000的系统管理器是否接管了W98”!!这样的话你激活那个分区就只可以启动在该分区上安装的系统!!你可心改boot.ini来启动98(当激活hda2时)!!!还有:“但是无法确定安装完后活动分区该给谁”这当然还是你安装前激活那个就是那个拉!
“不知在/etc/grub.conf中是否对两个MS系统都表示为DOS”grub我不知!但在lilo上的话就会是"dos"
选取了以后就由2k的启动工具接管了!!
你也可以按你的改法也是成功的!我是在lilo上试成功!!!

chainloader +1意思是指定此分区上的第一个磁道来启动
还有rootnoverify(hd0,0)是让GRUB不去mount hd0,0分区
据说win98一定要用rootnoverify,不过我没试过。
我还听说,Windows还要用Makeactive在windows分区上设定
active标记,就像

title Win98
rootnoverify (hd0,0)
chainloader +1
makeactive
title RedHat 73
root (hd0,8)
kernel /boot/vmlinuz-2.4.18-3 ro root=/dev/hda9

这些都是以前我在网上看来的,也不知道是不是正确,不过
我用的时候倒是没错。

我装得是RED HAT得7.32
双硬盘,一个40G得为PRI-1,4G得为SLV-1和光驱接在IDE 2口上,PIII 733,128MB
我想把LINUX装在4G得硬盘上,但是在一切安装过程顺利得情况下,现在一旦进入格式化得步骤,就会发现硬盘狂转,进度条不动。现已排除光盘和硬盘质量问题。然后我用fdisk看,发现LINUX得几个分区都已经建立了。
接着试着装在40G得硬盘上,就没有这个问题。对比两个过程,发现装在4G上时,是在进入“处理/BOOT
文件系统”这个提示前一点,进度条不在动得,请问如何解决?
是不是LINUX不能装在第二个硬盘上得?

Linux完全可以装在第二块硬盘上,几年前我就是把Linux装在一个3.2G的小硬盘上。很可能问题还是出在硬盘上,先用PartitionMagic工具把整个硬盘格式化为ext2分区再安装试试。