另外一种情形:当你重新安装 Windows 的时候,Windows 会重写 MBR,从而把 LILO 或 GRUB 的启动代码抹掉。用 GRUB.EXE,你不需软盘就可以启动其他操作系统(假定你的Windows是9x,或者硬盘上安装有DOS)。
用 loadlin.exe 也能启动 Linux,但是 loadlin 需要一个内核文件(vmlinuz),这个内核文件必须处在 DOS/Windows 的分区,有时候这个内核文件不适合作为你新近安装的 Linux 系统的内核。GRUB.EXE 就没有这样的限制,它可以给你很大的自由,它从 DOS 下启动,而能够从 Linux 分区找到任何文件(包括内核文件),你很容易知道这个内核跟你将要引导的系统是匹配的,从而引导 Linux 系统。
loadlin.exe 也是不用安装就可以使用的 Linux 引导器。grub.exe 的不同在于,它是一个引导管理器,可以引导其它操作系统。
--------------------------------------------------------------------------------
假定你的 (hd0,0)【也就是 /dev/hda1 分区】是 DOS 分区,你的那些 ISO 文件都已经处在这个分区之中。你已经在这个 DOS 分区的根目录下创建了一个 boot 子目录, 在 boot 目录下创建了一个 grub 子目录,并在 grub 目录中添加一个名字叫做 menu.lst 的文件,内容如下:
default=0
timeout=30
title Red Hat 9 hard disk install
root (hd0,0)
kernel /boot/vmlinuz-redhat9
initrd /boot/initrd-redhat9.img
title Mandrake 9.1 hard disk install
root (hd0,0)
kernel /boot/vmlinuz-mdk9.1 ramdisk_size=128000 root=/dev/ram3 automatic=method:disk acpi=off vga=788
initrd /boot/hd-mdk9.1.rdz
title Mandrake 9.1 network install
root (hd0,0)
kernel /boot/vmlinuz-mdk9.1 ramdisk_size=128000 root=/dev/ram3 acpi=off vga=788
initrd /boot/network-mdk9.1.rdz
title Mandrake 9.1 hdcdrom_usb install
root (hd0,0)
kernel /boot/vmlinuz-mdk9.1 ramdisk_size=128000 root=/dev/ram3 acpi=off vga=788
initrd /boot/hdcdrom_usb-mdk9.1.rdz
title Mandrake 9.1 cdrom install
root (hd0,0)
kernel /boot/vmlinuz-mdk9.1 ramdisk_size=128000 root=/dev/ram3 automatic=method:cdrom acpi=off vga=788
initrd /boot/cdrom-mdk9.1.rdz
title Windows
rootnoverify (hd0,0)
chainloader +1
title Chainload the Old MBR, that is, the original MBR
rootnoverify (hd0,0)
chainloader (hd0,7)/boot/boot.0300
呵呵,一段小插曲:最后一段的 (hd0,7) 假定是你的 Linux 根分区。Linux 安装程序一般会把安装之前的 MBR 保存在 Linux 根分区的 /boot/boot.0300 文件中,我们正好可以借用它来引导原来的操作系统。这也许对于像 Windows XP 这样难以兼容的系统是有用的。用这种办法引导 Win XP,应当万无一失(前提是,boot.0300 文件是原来能够引导 WinXP 时的 MBR 主引导扇区的拷贝,并且你安装 Linux 的过程没有改动 WinXP 的分区,例如,只是在硬盘尾部的空闲空间中增加新的 Linux 分区)。