Linux 系统管理:使用 LILO,Linux 加载器

作者:Æleen Frisch

一般来说,微型计算机上的启动过程分为三个阶段:系统的主引导记录 (MBR) 包含主引导程序,该程序启动引导过程并从活动分区的引导块加载辅助引导程序;这个辅助引导程序是加载实际内核的程序。

Linux 提供了 LILO,即 Linux 加载器,它可以作为主引导程序或辅助引导程序运行。安装 lilo 的命令如下所示:

# lilo -C /etc/lilo.conf

-C 选项指定 LILO 配置文件的位置。(前述命令中的位置实际上是默认位置,因此 -C 子句是多余的。)

lilo.conf 文件指定了 LILO 在启动过程某些方面的行为,并定义了它可以引导的内核和操作系统。以下 lilo.config 文件摘录列出了最重要的条目,也是您最有可能想要或需要修改的条目

# Wait 10 seconds before autobooting 1st entry.timeout=100
# Allow user to enter a boot command.
prompt
# Where to install/configure LILO
# (no partition #=MBR) [see below]
boot=/dev/hda
...
# Text file displayed before boot prompt.
message = /boot/boot.message
#
# Default kernel is the first one listed.
image = /vmlinuz
# Boot prompt command to boot this kernel.
  label = linux
# Fix for Sony CD-ROM (post 1.1.72)
# Specifies parameters to pass to kernel,
# changing CD-ROM's compiled-in I/O address.
  append = "cdu31a=0x340,0,"
#
# An alternate Linux kernel
image = /safe
# Its boot command
  label = safe
  append = "cdu31a=0x340,0,"
...
# A different operating system (DOS)
other = /dev/hdb1
# Use the D: drive boot loader.
  loader = /boot/any_d.b
# Use this partition table.
  table = /dev/hdb
# This is the corresponding boot command.
  label = ddog

[我倾向于将 LILO 同时安装在 MBR 和 Linux 分区中,以获得最大的灵活性,方法是使用其 -b 选项(它替换配置文件中的引导条目)运行第二个 LILO 命令:# lilo -b /dev/hda1 -C /etc/lilo.conf 这样,如果我决定从 MBR 中删除 LILO,我就可以随时切换到 Linux 分区版本。]

最后一部分(“节”)说明了如何在第二块硬盘上引导 DOS 分区的格式;它使用了一个备用加载器 any_d.b,它可以欺骗 DOS 认为它在 C: 盘上。还为 D: 盘上的 OS/2 和 B: 盘上的 DOS 提供了加载器(分别为 os2_d.b 和 any_b.d;chain.b 是其他操作系统的默认加载器)。

如果省略了节的标签,则默认为镜像或其他条目的最后一个组件(例如,vmlinuz 或 hda1)。

C: 盘上 DOS 分区的条目更简单,看起来像这样:

other = /dev/hda1  label = dos
  table = /dev/hda

这个节实际上是您在 /dev/hda1 上引导任何外部操作系统所需要的。如果要引导的操作系统是 SCO Unix,则还需要一个额外的技巧。为了使 LILO 成功引导 SCO Unix 分区,该分区必须是 C: 盘上唯一的活动分区。这意味着您必须关闭 Linux 分区上的活动(引导)标志,并为 SCO Unix 分区打开它,使用 Linux fdisk 或 cfdisk,然后再尝试引导 SCO Unix(除了运行 LILO 以安装新配置)。请注意,在这种情况下,LILO 必须是主引导加载器。

注意:每次重新构建内核或更改磁盘分区方案的任何相关方面时,您都需要重新运行 LILO 命令以重新安装它。如果您忘记这样做,系统将无法启动,您将不得不从软盘启动。如果您更改了 boot.message 文件的文本,您也需要重新运行 LILO。

更复杂的引导场景

也可以在第二块硬盘上引导 Linux 分区。为了实现这一点,LILO 必须安装在系统引导盘的 MBR 中,以及 Linux 分区本身的辅助引导程序中——这通常在您在硬盘上安装 Linux 时处理,并在以下内容中假定如此。在这种情况下,最好的方法分两个阶段进行:

  • 首先,设置一个如下所示的 lilo.conf:

    boot=/dev/hdaroot=current
    image=/vmlinuz
      label=linux
    other=/dev/hda1
      unsafe
    other=/dev/hda2
      unsafe
    ...
    other=/dev/hdb4
      unsafe
    
  • 以相同的方式定义两块硬盘上的所有分区;unsafe 关键字告诉 LILO 不要读取该条目的引导块或磁盘的分区表——它基本上是说,“相信我,按照我告诉你的做。” 安装此 LILO 配置,并确保 Linux 可引导。

  • 然后,修改文件,将 /dev/hda 上任何可引导分区的条目更改为正确的形式,并删除您不需要的条目,然后重新运行 LILO 命令。

也可以在两块磁盘中的每一块上引导一个 Linux 分区。执行此操作的步骤如下:

  • 确定哪个将是常用的 Linux 引导分区,并设置 LILO 以引导它以及两块磁盘上的任何其他非 Linux 操作系统。为第二个 Linux 分区创建一个如下所示的条目:

    other = /dev/hdb2  label=eviltwin
      unsafe
    
  • 创建一个 boot.message 文件,告诉您在选择默认选项时将引导哪个 Linux。将此配置安装到 C: 盘上的 MBR 中。

  • 为第二个 Linux 分区创建(或保留)另一个 LILO 配置,这次包括第一个 Linux 分区的 unsafe 条目(如果您需要的话)(这再次假设 LILO 安装在该分区中,这通常发生在操作系统安装时)。确保此分区的 boot.message 文件也让您知道您在哪里。仅将此配置安装到 Linux 分区中——确保引导条目指定分区而不是整个磁盘。

    然后,引导顺序将如下所示:

    Welcome to gallant.Boot choices: linux (default; on C:), dos,
     eviltwin (Linux on D:), sco
    boot: eviltwin
    Welcome to goofus.
    Boot choices: test (default; on D:),  goodtwin (Linux on C:)
    boot: [Return]
    Loading test...
    

给定这些选择,Linux 将从 D: 盘启动。发生的情况是,首先运行 C: 盘 MBR 中的 LILO,然后它启动 D: 盘 Linux 分区上的引导程序——它又是 LILO。然后,(第二个)LILO 从 D: 盘加载内核。(请注意,如果您愿意,您可以只在 C: 和 D: 上的 LILO 程序之间来回跳转,直到永远。)

如果您认为这很愚蠢,那么请从 D: 盘的 LILO 配置文件中省略 prompt 关键字(以及 C: 盘上 Linux 分区的镜像部分),从而在 D: 盘上得到一个简单的 lilo.conf 文件:

install=/boot/boot.bboot=/dev/hdb2
root=/dev/hdb2
map=/boot/map
image=/vmlinuz
  label=linux

安装完成后,在初始引导提示符下选择 eviltwin 将立即引导第二块硬盘上的 Linux 分区。

LILO 的 -r 选项

有时,能够为安装在 / 以外的其他位置的磁盘分区运行 LILO 非常有用。例如,如果您在 /mnt 中安装了另一个 Linux 根文件系统,您可能想要运行 LILO 以使用配置文件 /mnt/etc/lilo.conf 安装(当前)位于 /mnt/vmlinuz 的内核。LILO 的 -r 选项专为此目的而设计。它将 LILO 操作的根目录位置设置为指定为其参数的目录,并查找相对于该点的所有文件。因此,对于我们一直在讨论的场景,正确的命令是:

# lilo -r /mnt
boot.message 文件

boot.message 文件在发出引导提示符之前显示。这是一个 boot.message 文件的示例:

Welcome to JAG Property of the Linux Guerrilla Hackers
AssociationComputational science is not for the fainthearted!
Our current boot offerings include:
   * linux (smaller test kernel--1.3.10 currently)
   * safe (Yggdrasil distribution)
   * hacked (do you feel lucky?)
   * ddog - guess what ... (on D:)

一个有效的文件将列出所有定义的标签(但它不必如此古怪)。

恢复 DOS 主引导程序

如果您需要这样做,以下是恢复 DOS 主引导程序的步骤:

  • 从可引导的 DOS 软盘启动。

  • 运行命令 fdisk /MBR

Linux-FT Bootmanager

Linux-FT 发行版用其 Bootmanager 工具取代了整个 LILO 装置,Bootmanager 是一种基于图形菜单、用户可配置的实用程序,您可以通过它选择要引导的内核。它的显示如下所示:

              Bootmanager
  Name     Location
MULTIUSER   :3/vmlinuz ro root=/dev/sda3 2
SINGLE      :3/vmlinuz ro root=/dev/sda3 single
FLOPPY      A:
INSTALL     :3/vmlinuz root=/dev/sr0 ramdisk=300 5
DOS         C:1
LUCKY       :4/test_kern ro root=/dev/sda4

“位置”字段指示要引导的内核。例如,“MULTIUSER”项将使用指示的设备作为根文件系统,引导到运行级别 2,从而引导当前磁盘第三个分区上的文件 /vmlinuz。“DOS”项将引导第一块硬盘(C:)上的分区 1。最后一个项是为此系统添加的。

自定义 Bootmanager 很简单。按 ESC 键覆盖自动引导超时,然后使用屏幕底部列出的光标键和功能键编辑相关字段。适用于所有引导序列的硬件选项可以输入到引导选择菜单下方的指定字段中。

介绍 Linux 可加载模块

最近(自 1.2 版本以来),Linux 内核开始支持可加载模块。截至撰写本文时,Debian 和 Linux-FT 发行版默认使用此功能。

在这种方案中,您构建一个最小内核,并根据需要动态加载提供额外功能的模块。这种方法的优点是,许多类型的系统更改将不再需要重新构建内核;它还具有显着减小内核可执行文件大小的潜力。

模块包提供了用于构建、安装和加载内核模块的实用程序(包括构建具有模块支持的内核所需的模块)。在构建内核后运行 make modules 将创建可加载模块文件,而 make modules_install 将它们安装到 /lib/modules/1.2.6 目录树中(其中最后一个组件表示内核发布级别)。配置文件 /etc/MODULES(或 /etc/modules)列出了在启动时自动加载的模块

sysviBCS
ppp

该文件指示加载支持 System V 文件系统类型、Intel 二进制兼容性工具和 PPP 工具的模块。

以下实用程序用于操作模块:

  • depmod:确定模块之间的依赖关系。例如,我之前选择的 ppp 模块需要 slhc 模块才能运行。depmod 在 /lib/modules 的相关子目录中创建文件 modules.dep。此实用程序可以在启动时自动运行,或者您可能需要在构建模块后手动执行它。

  • modprobe:加载模块以及它所依赖的所有模块(通常用于在启动时加载模块)。

  • insmod:交互式加载模块。

  • rmmod:从内核卸载已加载的模块(前提是它没有被使用)。

  • lsmod:列出当前加载的模块

    Module:        # pages:  Used by:iBCS               19
    ppp                 5
    slhc                2    [ppp]
    sysv                7
    

目前,可加载模块工具还处于起步阶段,只有少数模块可用,但这无疑将是 Linux 内核在不久的将来普遍运行的方式(并且是许多其他 Unix 版本已经工作的方式)。

经许可转载,并稍作修改,摘自 Essential System Administration—第二版,版权所有 © 1995, O'Reilly and Associates, Inc. 如需订购和信息,请致电 800-998-9938 或 707-829-0515。

Linux System Administration: Using LILO, The Linux Loader

Æleen Frisch (aefrisch@lorentzian.com) 管理着一个非常异构的 Linux 和其他 Unix 系统以及 PC 网络。在终于完成第二版 Essential System Administration 之后,她又回到了她真正的生活使命,为她的猫 Daphne 和 Sarah 拉绳子。

加载 Disqus 评论