下一页 上一页 目录

2. 背景信息和标准安装

当 Lilo 启动系统时,它使用 BIOS 调用从磁盘(IDE 驱动器、软盘或其他)加载 Linux 内核。因此,内核必须位于 BIOS 可以访问的位置。

在启动时,Lilo 无法读取文件系统数据,并且您在 /etc/lilo.conf 中输入的任何路径名都在安装时(当您调用 /sbin/lilo 时)解析。安装时是程序构建表的时刻,这些表列出了用于加载操作系统的文件所使用的扇区。因此,所有这些文件必须位于 BIOS 可以访问的分区中(这些文件通常位于 /boot 目录中,这意味着只有您的 Linux 系统的根分区需要通过 BIOS 访问)。

基于 BIOS 的另一个结果是,每当您修改 Lilo 设置时,都必须重新安装引导加载程序(即,您必须重新调用 /sbin/lilo)。每当您重新编译内核并覆盖旧镜像时,都必须重新安装 Lilo。

2.1 我应该将 Lilo 安装在哪里?

boot= 指令在 /etc/lilo.conf 中告诉 Lilo 它应该将其主引导加载程序放在哪里。一般来说,您可以指定主引导记录 (/dev/hda) 或 Linux 安装的根分区(通常是 /dev/hda1/dev/hda2)。

如果您的硬盘驱动器中安装了另一个操作系统,您最好将 Lilo 安装到根分区而不是 MBR。在这种情况下,您必须使用 fdisk 的 ``a'' 命令或 cfdisk 的 ``b'' 命令将分区标记为“可引导”。如果您不覆盖主引导扇区,您会发现如果需要卸载 Linux 和 Lilo 会更容易。

当然,您总是有办法避免像上面这样的一些“规则”。好吧,即使您已经在那里安装了另一个操作系统,您也可以将 Lilo 安装到 MBR。例如,如果您在您的机器上安装了 Windows NT 4.0 作为第一个操作系统,那么 NT 的引导加载程序被放置在 MBR 中,因此您可以毫无问题地启动 NT。在您安装 Linux 并选择将 Lilo 安装到 MBR 之后,Lilo 重写了 NT 的引导加载程序。下次您启动您的机器时,您将无法启动 NT。但是,这没问题。您应该编辑您的 /etc/lilo.conf 并为 NT 添加一个新条目。下次您重新启动系统时,Lilo 菜单下将会有新添加的 NT 条目。当我安装 Windows 2000 而不是 Windows NT 时,也发生了同样的事情。

2.2 我应该如何配置我的 IDE 硬盘驱动器?

我个人在 BIOS 中不使用 LBA 或 LARGE 设置(但我只运行 Linux);它们是 PC 世界设计缺陷迫使使用的可怕的权宜之计。这要求内核位于前 1024 个柱面中,但这不成问题,只要您对硬盘驱动器进行分区并保持根分区较小(无论如何您都应该这样做)。

如果您的硬盘已经承载了另一个操作系统,您将无法修改 BIOS 设置,否则旧系统将不再工作。所有最新的 Lilo 发行版都能够处理 LBA 和 LARGE 磁盘设置。

请注意,/etc/lilo.conf 中的 "linear" 关键字可以帮助处理几何问题。该关键字指示 Lilo 使用线性扇区地址而不是扇区/磁头/柱面元组。到 3D 地址的转换延迟到运行时,因此使设置更能抵抗几何问题。

如果您有多个硬盘,并且其中一些仅供 Linux 使用且不参与启动过程,您可以告诉您的 BIOS 它们未安装。您的系统将启动得更快,并且 Linux 将立即自动检测所有磁盘。我经常在我的计算机中切换磁盘,但我从不触碰 BIOS 配置。

2.3 如何在启动时进行交互?

当您看到 Lilo 提示符时,您可以按 <Tab> 键来显示可能的选项列表。如果 Lilo 未配置为交互式,请在 ``LILO'' 消息出现之前按住 <Alt> 或 <Shift> 键。

如果您选择启动 Linux 内核,您可以在您选择的系统名称后添加命令行参数。内核接受许多命令行参数。所有参数都列在 Paul Gortmaker 的 ``BootPrompt-HOWTO'' 中,我不会在此处重复。但是,一些命令行参数特别重要,值得在此处描述

2.4 如何卸载 Lilo?

当 Lilo 覆盖引导扇区时,它会在 /boot/boot.xxyy 中保存一个备份副本,其中 xxyy 是设备的major 和 minor 号,以十六进制表示。您可以通过运行 ``ls -l /dev//device'' 来查看您的磁盘或分区的主设备号和次设备号。例如,/dev/hda 的第一个扇区(主设备号 3,次设备号 0)将被保存在 /boot/boot.0300 中,在 /dev/fd0 上安装 Lilo 会创建 /boot/boot.0200,而在 /dev/sdb3 上安装(主设备号 8,次设备号 19)会创建 /boot/boot.0813。请注意,如果文件已存在,Lilo 不会创建该文件,因此当您重新安装 Lilo 时(例如,在重新编译内核之后),您无需担心备份副本。在 /boot/ 中找到的备份副本始终是安装任何 Lilo 之前的状态快照。

如果您需要卸载 Lilo(例如,在您需要卸载 Linux 的不幸情况下),您只需要恢复原始引导扇区。如果 Lilo 安装在 /dev/hda 中,只需执行 ``dd if=/boot/boot.0300 of=/dev/hda bs=446 count=1'' (我个人只是执行 ``cat /boot/boot.0300 > /dev/hda'',但这并不安全,因为这也会恢复原始分区表,您可能在此期间修改了分区表)。此命令比尝试从 DOS shell 中执行 ``fdisk /mbr'' 更容易运行:它允许您从磁盘上干净地删除 Linux,而无需启动任何除 Linux 之外的东西。卸载 Lilo 后,请记住运行 Linux 的 fdisk 来销毁任何 Linux 分区(DOS 的 fdisk 无法删除非 DOS 分区)。

如果您将 Lilo 安装在您的根分区上(例如,/dev/hda2),则无需执行任何特殊操作来卸载 Lilo。只需运行 Linux 的 fdisk 从分区表中删除 Linux 分区。您还必须将 DOS 分区标记为可引导。

2.5 如何制作 ram 磁盘?

注意:如果您发现下一节难以阅读,您也可以查找网页:http://surfer.nmr.mgh.harvard.edu/partition/ramdisk.html 您可以在那里找到此贡献的“原文”……

作者:Tony Harris

2000 年 10 月 16 日

ram 磁盘迷你 HOWTO

如果您的根文件系统位于内核没有内置驱动程序的设备上,您将需要在启动周期的早期使用 lilo 将该驱动程序作为模块加载。只有两个简单的步骤

首先,我 cd/boot

System.map                  chain.b                module-info-2.2.16-3ext3
System.map-2.2.16-3         initrd-2.2.16-3.img    vmlinux-2.2.16-3
System.map-2.2.16-3ext3     vmlinux-2.2.16-3ext3
vmlinuz                     kernel.h
boot.b                      map                    vmlinuz-2.2.16-3
bz.2.2.15.juke.Image        module-info            vmlinuz-2.2.16-3ext3
bzImage-2.2.14              module-info-2.2.16-3

在这里您可以看到我有一个 2.2.16-3 内核,并且我添加了第二个支持 ext3 的内核 (vmlinuz-2.2.16-3ext3)。我的第一个内核已经有一个 ram 磁盘镜像 (initrd-2.2.16-3.img)

为了为第二个内核制作新镜像,我输入以下内容(我输入的内容以粗体显示)

boot# mkinitrd initrd-2.2-16-3ext3.img 2.2.16-3ext3

mkinitrd 是一个 shell 脚本,它查看我的内核所需的模块,然后创建一个包含它们的 ext2 文件系统。如果我们查看镜像内部,我们会看到情况确实如此

boot# cat initrd-2.2.16-3ext3.img | gunzip > /tmp/myimage

boot# file /tmp/myimage

/tmp/myimage:Linux/i386 ext2 文件系统/

您不必查看镜像内部。只有制作镜像和修改 lilo.conf 是必要的步骤。然而,为了教学目的,提供了关于 ramdisk 镜像的讨论。

为了查看内部,我需要像挂载文件系统一样挂载该镜像

boot# mount /tmp/myimage /mnt/tmp -t ext2 -o loop=/dev/loop3

boot# ls /mnt/tmp

bin dev etc lib linuxrc

boot# find /mnt/tmp

mnt/tmp/

mnt/tmp/lib/

mnt/tmp/lib/aic7xxx.o/

mnt/tmp/bin/

mnt/tmp/bin/sh/

mnt/tmp/bin/insmod/

mnt/tmp/etc/

mnt/tmp/dev/

mnt/tmp/dev/console/

mnt/tmp/dev/null/

mnt/tmp/dev/ram/

mnt/tmp/dev/systty/

mnt/tmp/dev/tty1/

mnt/tmp/dev/tty2/

mnt/tmp/dev/tty3/

mnt/tmp/dev/tty4/

mnt/tmp/linuxrc/

这个 ram 磁盘镜像最重要的部分是 aic7xxx.o,这是我的 scsi 模块。

最后,我继续最后一步,修改 /etc/lilo.conf

这是我在 lilo.conf 中对应于我刚刚创建的内核和镜像的条目

image=boot/vmlinuz-2.2.16-3ext3/

label=linux.ext3

initrd=boot/initrd-2.2.16-3ext3.img/

read-only

root=dev/hdb3/

就是这样。以 root 身份运行 /lilo 并重新启动。

如果您遇到问题,请查看内核 HOWTO。您需要涵盖几件事:您需要编译您的内核模块并使其位于 /etc/conf.modules 中。


下一页 上一页 目录