我喜欢安装多系统,以前过多的依赖grub,虽然grub是非常好用的多系统引导工具,但相较于windows对mbr的霸道,也许其他的引导方式更方便一些。


大家也许习惯了配置grub.conf,而我要说的是如何用命令的方式启动系统。当然,在进入grub菜单界面时按esc键就可以切换到命令行界面,但一般情况下,很少有人有这样的怪癖,更多的见到grub命令行界面是以前多个系统出了问题,grub无法正常弹出图形菜单时,黑黑的屏幕,一个孤独的grub〉命令提示符告诉我,下面只能靠它来启动系统了。长话短说,我的电脑有三块硬盘,其中一个是串口,在系统中分别是hda、hdb、sda,我的windows安装在hda,我的rh AS4装在hdb,我的freebsd装在sda,若要启动windows,步骤如下:
grub>root (hd0,0)   //hd0代表第一块并口硬盘,也就是hda,0表示第一分区,也就是主引导分区,root命令表示当前的根目录/(与linux的根目录/不是同一概念,这里是grub的当前工作目录的意思)挂载的是hd0的0分区,当然如果不知道具体的配置,可以随时按下tab键,那么grub就会给出可用的信息,比如:

grub>root (<tab>
 hd0 hd1 sd0
 grub>root (hd0,<tab>
 0 ... //具体的信息就不给出了,呵呵。:)
 4 ...
 5 ... 
 6 ...
 7 ...
 8 ...


接下来最简单的方式,就是:
grub>chainloader +1  //不要管具体是什么,就是这句话就对了,它会将启动权交给windows的启动器,术语就是链式装入
然后就是启动了,一句:
grub>boot
就搞定了
若要启动linux或者unix,步骤如下:
grub>root (hd1,0)   //这个大家都熟悉了,0分区是我的boot分区,所以当前的根目录/就是linux系统里的/boot/,不信,那大家看

grub>find /<tab>    //让我们来看看根目录下的文件,是不是/boot/呢:)
 backup_mbr                   initrd-xen                              System.map-2.6.11.4-20a-xen
 boot                         memtest.bin                             vmlinuz
 config-2.6.11.4-20a-default  message                                 vmlinuz-2.6.11.4-20a-default
 config-2.6.11.4-20a-xen      README.vmlinux-2.6.11.4-20a-default.gz  vmlinuz-2.6.11.4-20a-xen
 grub                         README.vmlinux-2.6.11.4-20a-xen.gz      vmlinuz-xen
 initrd                       symvers-2.6.11.4-20a-i386-default.gz    xen.gz
 initrd-2.6.11.4-20a-default  symvers-2.6.11.4-20a-xen-xen.gz         xen-syms
 initrd-2.6.11.4-20a-xen      System.map-2.6.11.4-20a-default


find是什么?find是用来查找某个文件位于什么硬盘上的命令,由于我没有给出文件,所以它就把可用的文件就是当前/下的所有文件和目录列出来了,find与启动无关
第二步是:
grub>kernel /vmlinuz-2.6.11.4-20a-default root=/dev/hdb3   //很明显的这是装载内核,这里面的第一个/就是用root (hd1,0)命令指定的,root=/dev/hdb3是告诉grub系统的根目录/(这里是linux的系统根目录,不是grub的当前目录/,大家要区分)位于什么分区,我的是在hdb3
最后就是启动了:
grub>boot
我们再来看看,还有一些有用的命令:
rootnoverify   //作和root相同的事,但不将后面的分区挂载至grub的当前工作目录/
info grub    //列出所有可用的命令的详细列表
setup (hd0,0)//将grub安装到hda1

下面就自己的使用经验谈谈多系统引导,个人认为如果要windows和linux和unix协同工作在同一台机器上,最好的多系统引导方式就是windows和非win系统采用windows自带的ntldr来引导,linux和unix采用grub引导,这里的grub是安装在非mbr上的,这一点在安装linux时配置grub时不要用默认安装,而要在高级设置时将grub安装到其他非mbr分区来实现,接下来,进入linux或者unix利用如下的命令将grub所在分区的启动信息提取出来:
dd if=/dev/hdb1 of=grub.boot bs=512 count=1 //这里/dev/hdb1是我的grub所在的分区
然后将grub.boot做个备份后拷贝到windows系统下的C盘根目录下,接下来修改windows的boot.ini(系统文件,需要去掉系统和隐藏属性才能看到,使用msdos的attrib -H -S boot.ini实现)文件,添加一行,如下:

[boot loader]
 timeout=30
 default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
 [operating systems]
 multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows XP Professional" /fastdetect
 C:grub.boot="Red Hat Linux AS 4"


如果为了安全,可以为grub.boot加上隐藏和系统属性,在command窗口中输入:

C:>attrib grub.boot
 A    R grub.boot
 C:>attrib +H +S grub.boot C:>attrib grub.boot
 A  SHR grub.boot


这样就将grub.boot保护起来了,一旦你的windows重装了,你只需将备份的grub.boot重新拷贝到新的windows的C盘下重做上述设置即可。
这样在系统启动时,就会使用windows的ntldr进行多系统启动,当你选择Red Hat Linux AS 4选项,系统就会跳到grub启动,从而实现多系统启动,并且不怕因为windows的问题而影响到其他系统,因为你的grub根本不在windows所重写的mbr上。