***************** 初衷和目的********************
初衷:关于双系统引导的帖子和主题已经不少了,我的做法也是跟着各种论坛做的,但是总是有各种各样的问题,由于各种方法说明的不是很详细,对其中的碰到的问题解释不太多,我根据自己碰到的情况写下这篇文章,希望对刚接触linux的朋友安装系统理解linux和win的启动过程还有要装win7和ubuntu的朋友有点帮助我就心满意足了 :)
目的:简单介绍下系统启动和相关的知识,最重要的事要实现方便简捷并且利于日后维护的启动菜单(方便就是开机就显示各个系统可以直接进入,日后维护就是如果哪个系统down了,可以还原并且不影响另一个系统)。
******************基础性知识和安装注意事项***********
1.线说下计算机启动过程吧:开电源=>BIOS=>MBR=>相应的引导程序=>引导系统=>进入系统。(说明下MBR是重要的硬盘区域保持着硬盘的分区状态还有引导程序的信息,通过mbr中的信息选择相应的启动程序来引导系统,明白这个会比较好理解下面的过程)
2.win的启动和linux的引导:win是强制把自己的引导程序安装在MBR的,linux的引导现在主流是grub,grub可以选择安装在mbr,也可以选择安装在/boot,当然也可以选择不安装。
3.win与linux的安装顺序:再次我强烈建议先安装win在安装linux,并且把grub安装在linux的分区。理由是这样的如果先安装linux然后安装win会强制把自己的引导安装到mbr,消除里面的信息从而导致不能启动linux,虽然这样有方法解决引导问题但是却不利于日后的维护,比如那一天windows倒了,我们在安装win的时候还是会把引导装到mbr,这样我们再设置不是很累吗,索性一劳永逸一步代位比较好。于是我们选择先安装win在安装linux,并把自己的grub安装在一个地方(不是MBR的地方,这个地方在安装linux的时候会有选项,通常是在硬盘分区后或者高级选项里,很重要),(再有就是用Ghost恢复win到c盘的时候不能把win的引导装入mbr,这也是不吧linux的grub装入mbr的一个重要理由)。
****************** ** 安装过程和相关解释讨论***************
于是我们选择这样的安装顺序:
1。先安装win7在c盘(hd0,0),并给linux分出一定的空间,注意要把linux的预留分区去除在windows扩展分区之外(这个问题不明白自己找吧)
2.ubuntu(grub安装在/boot)
3.在win7中下载grub4dos ,并把grldr和grldr.mbr复制到c盘根目录,新建boot.ini 加入c:\grldr.mbr="Ubuntu 9.04"(xp是不用加引号的vista和w7必须加,论坛提供的方式是这样的,我开始也是这么做的,但是经过一份斗争和来回捣鼓我明白了很多东西,那么具体这样做的好不好,方便不方便能不能改进,我们下面讨论)
到这里一般情况下可以实现双重启动了(起码大部分论坛是这样写的,之后也没有介绍相应的问题和具体的工作方式,虽然我没有证实过这一点),但是我偏偏不幸,像以上这样操作后,我可以进入ubuntu系统,对于windows虽然可以显示,但是进入不了,这让我不得不研究一下win7启动,grub4dos的启动还有ubuntu的启动逻辑关系是怎么样的,怎么才能协调好他们,如何配置他们,这些研究让我算是较明白直接的关系了(仅对我这种情况,别的情况我也有自信解决 :) 装下b吧 )
*******************引导菜单直接的相互引导和解释(最后给出配置方案)*****************
按照我们这样的安装方式,我们会得到下面的引导关系图,或者说是开机后的引导菜单画面,如下:

较详细解释:
系统经过BIOS后读取mbr的信息从而进入c:寻找引导程序,这里图1显示的图是在C:添加menu.lst文件后的图
(注解:如果没有添加menu.lst这个文件,其实我们之前就没有添加,这样会有一个问题我们下面说,就会显示如下信息
find /menu.lst
find /boot/grub
find /grub
conmandline
reboot
halt ) ******* 这个信息就是我们移动grub4dos的grldr和grldr.mbr后系统引导的第一个画面
然后我们选择第一个会进入可以进入图3所示的画面,然后选择ubuntu可以进入系统,但是我们选择win7的时候就会又回到上面的这个画面,陷入死循环无法进入win7, (win7通常还是被引导程序认成是vista,只有win的引导不会,这里就是个意思不必深究具体显示什么 :) )
为了解决这个问题和寻找更方便的启动菜单,我研究了下 c:盘下的 boot.ini 和menu.lst 还有linux中/boot/grub下的menu.lst,于是得到了上面的这个图,上面的图也有相互关系和过程说明,可以参考看下,看了之后就明白怎么回事了。
*************************最后解决方案********************
到了这里我决心要实现这样的启动方式:开机显示菜单点什么就进什么,于是乎我开始对上面说的三个文件开刀了,针对这三个文件分别这样处理:
1.对于c:/menu.lst : 在c:根目录下建立menu.lst 里面加入要显示的内容(我简单写了),这里完全可以根据自己的需要选择,比如只选择win7和ubuntu9.04的title 灵活性很强 大家可以自己玩 呵呵 :)
default 0
timeout 3
title Windows 7 (boot loader)
root (hd0,0)
chainloader /bootmgr
title Ubuntu 9.04, kernel 2.6.28-15-generic
uuid 831ea729-653b-4a12-ad18-2f08792c0880
kernel /boot/vmlinuz-2.6.28-15-generic root=UUID=831ea729-653b-4a12-ad18-2f08792c0880 ro quiet splash
initrd /boot/initrd.img-2.6.28-15-generic
quiet
title Ubuntu 9.04, kernel 2.6.28-15-generic (recovery mode)
uuid 831ea729-653b-4a12-ad18-2f08792c0880
kernel /boot/vmlinuz-2.6.28-15-generic root=UUID=831ea729-653b-4a12-ad18-2f08792c0880 ro single
initrd /boot/initrd.img-2.6.28-15-generic
title Ubuntu 9.04, kernel 2.6.28-11-generic
uuid 831ea729-653b-4a12-ad18-2f08792c0880
kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=831ea729-653b-4a12-ad18-2f08792c0880 ro quiet splash
initrd /boot/initrd.img-2.6.28-11-generic
quiet
title Ubuntu 9.04, kernel 2.6.28-11-generic (recovery mode)
uuid 831ea729-653b-4a12-ad18-2f08792c0880
kernel /boot/vmlinuz-2.6.28-11-generic root=UUID=831ea729-653b-4a12-ad18-2f08792c0880 ro single
initrd /boot/initrd.img-2.6.28-11-generic
title Ubuntu 9.04, memtest86+
uuid 831ea729-653b-4a12-ad18-2f08792c0880
kernel /boot/memtest86+.bin
quiet
2.对于c:/boot.ini : 其实我们可以发现这个文件完全没必要,它只是个中间环节,我们要实现的是直接进入系统,所以这个文件没用,删掉。
3.对于ubuntu中/boot/grub/menu.lst :
说实话对于c盘根目录下的那个menu.lst我完全是根据ubuntu下的grub写的,至于这里怎么写其实都不重要了,因为我们根本到不了这个画面,有兴趣的可以看看/grub中的menu文件很有意思的,可以明白很多东西。
注:
1.以上方式是比较简单的,虽然文章写的比较长,但是真实实际操作其实非常简单,我只是想尽量把这个过程说明白而已。
2.其实grub4dos这个程序可以认出linux和win,我们就是利用这个简单的配置直接实现引导的,至于别的系统的引导和相应文件我们其实不必太关心。
写了这么多现在有点晕 也不知道说清楚了没有啊



第一次在论坛发这么大的帖子 还请大家留情啊
