使 LFS 系统可以启动

你崭新的 Linux-From-Scratch 系统已经接近尾声了,我们需要为启动它作些准备。下面的指导只对 IA-32平台适用,如常见的PC机。如果你需要其他平台的指导,应该能在那些平台的资源里找到。

启动加载器有的时候非常复杂。首先我们要警告的是,你应该对自己现在使用的启动加载器和硬盘上的其他操作系统比较熟悉,如果你还想启动它们的话。确保你有一张应急软盘,以免计算机不能启动时束手无策(尽管这种可能性比较小)。

我们在前面编译安装了 Grub 作为启动加载器。这里,我们把 Grub 程序的某些片断写到硬盘的特殊位置。在这样做之前,强烈推荐你创建一张 Grub 启动软盘以应急。放入一张空白软盘,运行下列命令:

dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1

取出软盘,放到安全的地方。现在我们运行 grub shell:

grub

Grub 对硬盘和分区有自己的一套命名方法,格式是(hdn,m), n 表示硬盘序号,m 表示分区序号,两个都是从0开始计数。也就是说,在Grub里, hda1 是 (hd0,0),hdb2 是 (hd1,1)。与Linux不同的是,Grub不把CD-ROM驱动器看作硬盘,所以如果你的hdb是CDROM,第二个硬盘是hdc,第二个硬盘在Grub里的名字还是 (hd1).

按照上面的规则,看一下你的根分区应该叫什么名字。我们这里假设你的根分区是 hda4.

首先,告诉 Grub 在哪里找它的 stage{1,2} 文件 -- 在Grub里,你随时都可以用 Tab 来显示出可能的选择:

root (hd0,3)

警告

下面的命令将覆盖你现在的启动加载器。如果你不想这样,就别运行下面的命令。比如,你想使用某个第三方的启动加载器来管理MBR(主引导记录)。这时,你可能应该把grub安装到LFS分区的启动部份,命令类似于:setup (hd0,3).

然后告诉Grub把它自己安装在hda的 MBR (主引导记录)上:

setup (hd0)

如果一切正常,Grub会告诉你它在/boot/grub下找到了所需要的文件,行了,大功告成:

quit

现在我们需要创建 menu.lst 文件,它定义了 Grub 的启动菜单:

cat > /boot/grub/menu.lst << "EOF"
# Begin /boot/grub/menu.lst

# By default boot the first menu entry.
default 0

# Allow 30 seconds before booting the default.
timeout 30

# Use prettier colors.
color green/black light-green/black

# The first entry is for LFS.
title LFS 5.1
root (hd0,3)
kernel --no-mem-option /boot/lfskernel root=/dev/hda4
EOF

注: 默认情况下,Grub 会自动传递 "mem=xxx" 参数给内核。然而,有时 Grub 取得的内存数量是不正确的,就会在某些环境下产生错误。最好不要使用这个功能,而是让内核自己来检测内存,因此上面用了 --no-mem-option.

你可能想在里面加上你的主系统,比如:

cat >> /boot/grub/menu.lst << "EOF"
title Red Hat
root (hd0,2)
kernel /boot/kernel-2.4.20 root=/dev/hda3
initrd /boot/initrd-2.4.20
EOF

另外,如果你同时还要启动 Windows,下面的菜单项可以做到:

cat >> /boot/grub/menu.lst << "EOF"
title Windows
rootnoverify (hd0,0)
chainloader +1
EOF

如果你觉得 info grub 的信息还不够详细,可以在 Grub 的网站上找到更多内容:http://www.gnu.org/software/grub.