Linux和Windows多系统共存时,引导过程相对来说比较复杂。而且容易引起一些错误概念。比如经常看到有的网友这样问:“我要引导XXX Linux,应该用Lilo,Grub,还是NT OS Loader?”
其实常见的Linux引导途径,只有引导软盘,Lilo,Grub,和在MS-DOS环境下用Loadin.exe引导。而NT OS Loader是不能够引导Linux的。大家“所谓的”用NT OS Loader引导Linux时,中间都要通过Lilo或者Grub这一步。In another word,如果你的Linux安装时候就没有安装引导程序,而是打算一直用软盘引导的话,你也就无法用NT OS Loader去引导这个Linux。
用NT OS Loader引导Linux的过程应该是这样:NT OS Loader->grub (or lilo) ->Linux。
这个过程是通过如下几个步骤实现的:
1, 在MBR或某个分区的引导扇区上安装Grub或者Lilo,使其成功引导Linux。
2, 在Linux下用dd命令把被安装的Grub或者Lilo读出来并写在一个文件上,这个步骤相当于给Grub或者Lilo做了个备份,随后即使原来装Grub或者Lilo的地方被清除掉,也可以用留下来的这个文件借助NT OS Loader实现跟以前一模一样的引导过程。
3, 修改Boot.ini让NT OS Loader引导刚才读出来的Grub或者Lilo。
至于这个被NT OS Loader 引导起来的Grub能干些什么,完全看你自己的配置,可以通过修改Menu.lst文件让他引导任何受支持的系统或者另外的引导程序。你可以让他引导仅仅一个Linux,并把默认时间设置为0,从而造成NT OS Loader直接引导Linux的假象。也可以让他引导从Linux到Unix,BSD的N个系统,排出长长的一个系统列表。我甚至曾经让NT OS Loader 和 Grub两者之间互相循环引导。
如此看来,NT OS Loader和Grub是平起平坐的,他们之间互相可以引导,但对于系统的支持却是各有自家的本事。NT OS Loader离开了Grub就别想引导Linux/Unix/BSD;而Grub虽说很强,也不可能绕过NT OS Loader对MS的NT4/2000/XP/Server2003直接进行引导。
但是像MS-DOS,Windows9X/Me这样的系统概念就模糊了。说得通俗一点,这类微软的早期系统既可以被NT OS Loader直接引导,也可以被Grub直接引导。如果你机器上只有一个MS-DOS/9X/Me,而没有NT OS Loader时就装了Grub的话,Grub就会直接引导这个系统。而如果你装Grub时已经有NT OS Loader,那么Grub就会通过NT OS Loader来引导这个系统。甚至可以这样:硬盘1上的NT OS Loader -> 硬盘1上的Grub -> 硬盘2上的 Windows9X/Me/MS-DOS。(符号->表示直接引导)
另外还有几点需要注意。
1, Grub理论上可以引导任何相同或不同硬盘上的NT OS Loader,但反之,想用NT OS Loader引导不同硬盘上的Grub却不行。这里不同硬盘上的Grub是指这个Grub在被dd成文件之前安装在跟NT OS Loader不同的硬盘上。
2, Grub和Grub之间可以直接互相引导(不过互相循环引导次数过多会内存溢出而死机,即使中间通过NT OS Loader来间接引导也不能避免,Grub对内存的要求似乎比NT OS Loader高),但NT OS Loader和NT OS Loader之间却不可以。只能通过Grub把两个NT OS Loader连起来。使之可以间接互相引导。而这样连起来的两个NT OS Loader即使互相循环引导次数再多也不会出现错误。
3, 同一台机器上的一个Linux可以被不同的N个Grub引导。但一个NT系统却不能被两个NT OS Loader引导。M$可能在后面做了什么,让NT核心的系统安装时候就被绑在了默认的NT OS Loader上(可以是跨硬盘的绑定)。安装一结束,你就只能用这个NT OS Loader来引导他。任何想从别的NT OS Loader引导这个NT系统的尝试,都会被一个找不到文件的错误拒之门外。
4, 硬盘1上的NT OS Loader -> 硬盘1上的Grub -> 硬盘2上的 MS-DOS。在用这种引导方式时,假如最后被引导的MS-DOS上装有Windows3.x,那么MS-DOS虽然会正常启动,但Windows3.x却会因提示无法找到文件而无法正常进入。解决办法是在硬盘2中装一个NT OS Loader。就会按如下过程顺利启动:
硬盘1上的NT OS Loader -> 硬盘1上的Grub -> 硬盘2上的 NT OS Loader -> 硬盘2上的 MS-DOS -> 进入Windows3.x。
不过目前还在用Windows3.x的可能全国也没几个了。各位就当故事听吧。
最后,对于想让Windows和Linux在两块硬盘上并存的网友,给出下列引导建议:
首先,建议把所有的Windows放在一个硬盘,所有Linux放在另一个硬盘。如果不然,下列的某些建议可能无法实现。
1, 用Linux多余用Windows的类型
这类可用Grub作主引导程序,这样就不必在意每个引导程序安装的位置了。因为Grub是通吃所有硬盘的。
(1) 先把所有Windows装好。
(2) 再一个个的装Linux,把带有你想用的Grub版本的Linux放在最后安装。
(3) 安装最后一个Linux时就把Grub安装在Linux盘的MBR上。
这样开机后Grub菜单出来,你可以选择:
1、 选择Grub菜单中的任何一个Linux系统。
2、 进入NT OS Loader 菜单选择任何一个Windows系统。
2, 用Windows多余用Linux的类型
这类可用NT OS Loader作主引导程序。然而由于NT OS Loader不支持跨硬盘引导其他引导程序,Grub就必须装在Windows盘里。
(1) 分区时要在Windows盘里的最后多划出一个分区,分区大小在理论上有512字节就够了,实际上一般习惯分出几M(太小了也不支持)。格式化成FAT和ext均可。
(2) 之后就按照“1,”里的顺序安装所有系统。
(3) 在完成“1,”之后,进入Linux,进入Grub提示符,用setup (hdx,x) 把Grub安装在Windows盘后面新划出来的那个小分区里。
(4) 用dd命令把那个小分区的前512字节读出来存成文件。
(5) 把文件添加到NT OS Loader的启动选项中。
(6) 把Windows盘设置成主启动硬盘。
这样开机后NT OS Loader菜单出来,你可以选择:
1、选择NT OS Loader菜单中的任何一个Windows系统。
2、进入Grub 菜单选择任何一个Linux系统。
Grub是很灵活的软件,NT OS Loader也不笨。两者虽然互有不足,但如果配合起来使用,不管你有几个硬盘,几个系统,都可以设计出一个快洁完善的引导方案。
文中涉及到的一些具体操作,比如Linux下安装Grub,Linux下dd命令的详细用法,还有Grub、NT OS Loader的配置文件修改方法等等,论坛里到处都有详细操作的文章。我就不在各位大虾面前班门弄斧了。(chinaunix)