LILO(即 LInux
LOader)是最常用的两种 Linux 引导装载程序之一。LILO
可以被安装进可引导硬盘驱动器的 MBR
或者分区的分区引导记录。它还可以安装在可移除设备上,比如软盘、CD 或
USB 钥匙。如果您还不熟悉 LILO,那么在软盘或 USB
钥匙上进行实践是好办法,所以我们在例子中就是这么做的。
在安装 Linux
期间,常常指定 LILO 或 GRUB 之一作为引导管理程序。如果选择
GRUB,那么可能还没有安装
LILO。如果是这样,那么需要安装它的软件包。我们假设您已经安装了 LILO
包。如果您在安装软件包方面需要帮助,那么请参阅本教程后面的包管理部分。
lilo
命令(在 /sbin/lilo
中)的主要功能是,写第一阶段引导记录,并且使用配置信息(一般在
/etc/lilo.conf
中)来创建一个映射文件(/boot/map)。这个程序还有一些辅助用法,我们稍后会提到。我们先看一个典型的
LILO 配置文件,这个文件可能用于一个 Windows 和 Linux
双重引导的系统。
prompt
timeout=50
compact
default=linux
boot=/dev/fd0
map=/boot/map
install=/boot/boot.b
message=/boot/message
lba32
password=mypassword
restricted
image=/boot/vmlinuz-2.4.21-32.0.1.EL
label=linux
initrd=/boot/initrd-2.4.21-32.0.1.EL.img
read-only
append="hdd=ide-scsi root=LABEL=RHEL3"
other=/dev/hda1
loader=/boot/chain.b
label=WIN-XP
上面的第一组选项是全局选项,控制 LILO
如何操作。第二组和第三组选项是映像专用选项,分别针对要用 LILO
引导的两种操作系统,在这个例子中是 Red Hat Enterprise Linux 3 和
Windows XP。
例子中的全局选项是:
prompt
要求显示引导提示。
timeout
以十分之一秒为单位指定超时时间,超过这个时间之后自动装载默认系统。例子中的
timeout=50 表示超时时间为 5 秒。
compact
尝试合并对相邻扇区的读请求。这可以加快装载速度并且使映射文件更小。
default
指定默认情况下应该装载的操作系统。如果没有指定,就使用第一个操作系统。在我们的例子中,如果用户在
5 秒的超时时间内没有选择其他操作系统,就将装载 Linux 系统。
boot
指 定在哪里安装 LILO。在我们的例子中,这是软盘
/dev/fd0。要想在第一个硬盘的 MBR 中安装,应该指定
boot=/dev/hda。我们的 RHEL 3 系统实际上位于
/dev/hda11,所以如果要在这个分区中安装 LILO,就应该指定
boot=/dev/hda11。如果忽略这个参数,LILO
将尝试使用当前挂装为根(/)的设备的引导扇区。
map
指定映射文件的位置,LILO 使用这个文件向用户提供提示并且装载在
lilo.conf 的映像部分中指定的操作系统。默认情况下,这是
/boot/map。
install
指定要作为引导扇区安装的新文件。默认是 /boot/boot.b,这是 LILO
包提供的。
message
指 定在引导提示之前显示的消息。这个消息的长度必须小于 65535
字节。如果系统对 LILO 菜单显示图形化背景,那么 /boot/message
可能包含一个图像文件。在某些 Red Hat 系统上,这是一个 PCX 格式的
300x200 像素文件。在 SUSE 系统上,可能是 16 色 640x480 像素的 VGA
位图。在这种情况下,还有某些其他参数。请参阅系统附带的文档。例如,在我的
SUSE SLES9 系统上这是
/usr/share/doc/packages/lilo/README.bitmaps。
lba32
指定 LILO 应该为硬盘使用 LBA32 模式而不是 CHS
或线性扇区寻址。
password
指 定在引导映像之前必须输入的口令。注意,这个选项是明文的,所以
/etc/lilo.conf
的文件属性应该只允许根用户查看这个文件。这个口令不应该与根口令相同。password
和下一个选项 restricted
实际上是映像选项,但是为了方便可以在全局部分中指定。如果这样指定,相同的值应用于所有映像,除非在映像部分中被覆盖了。
restricted
放宽口令要求,这样只有当用户试图在引导期间提供额外参数时才要求输入口令。使用这个选项,在正常引导时用户不必输入口令,但是要想引导进单用户模式就必须提供口令。
下一部分是 RHEL3
Linux 系统的映像选项:
image
指定这个部分针对一个 Linux
系统,应该从一个文件装载这个系统。参数是 Linux
内核映像的文件名。
label
一个可选的标签,可以输入它来选择这个映像,而不必输入完整的映像名。
initrd
初始 RAM 磁盘
的名称,其中包含挂装文件系统之前内核需要的模块。
read-only
指定根文件系统最初应该以只读模式挂装。在对根文件系统进行检查之后,后面的引导阶段常常将它重新以读写模式挂装。
append
指定要传递给内核的选项。我们的例子指定应该为 /dev/hdd 使用 SCSI
仿真(2.4 以及更早的内核以这种方式处理光学设备,比如
CD-ROM)。它还指定具有标签 RHEL3 的分区应该挂装为根(/)。
最后一部分是非
Linux 系统的映像选项。
other
指定包含待装载系统的引导扇区的设备(或文件)的设备名。
loader
指定要使用的装载程序。LILO 支持
chain.b,它只是从可引导分区装载分区引导记录;LILO 还支持 chain.b
的变体 /boot/os2_d.b,它可以用来从第二个硬盘驱动器引导 OS/2。
label
一个可选的标签,可以输入它来选择这个映像,而不必输入完整的映像名。
现在,如果插入一张空软盘,可以运行 lilo
命令(/sbin/lilo)来创建一张可引导软盘,如清单 4 所示。注意,lilo
命令有 5 个详尽等级。多指定一个 -v 就加一级。
现在,如果插入一张空软盘,可以运行 lilo
命令(/sbin/lilo)来创建一张可引导软盘,如清单 4 所示。注意,lilo
命令有 5 个详尽等级。多指定一个 -v 就加一级。
root@lyrebird root]# lilo -v -v
LILO version 21.4-4, Copyright (C) 1992-1998 Werner Almesberger
'lba32' extensions Copyright (C) 1999,2000 John Coffman
Reading boot sector from /dev/fd0
Merging with /boot/boot.b
Secondary loader: 11 sectors.
Mapping message file /boot/message
Compaction removed 43 BIOS calls.
Message: 74 sectors.
Boot image: /boot/vmlinuz-2.4.21-32.0.1.EL
Setup length is 10 sectors.
Compaction removed 2381 BIOS calls.
Mapped 2645 sectors.
Mapping RAM disk /boot/initrd-2.4.21-32.0.1.EL.img
Compaction removed 318 BIOS calls.
RAM disk: 354 sectors.
Added linux *
Boot other: /dev/hda1, on /dev/hda, loader /boot/chain.b
Compaction removed 0 BIOS calls.
Mapped 6 (4+1+1) sectors.
Added WIN-XP
/boot/boot.0200 exists - no backup copy made.
Map file size: 8192 bytes.
Writing boot sector.
我们现在有了可引导 LILO 磁盘。如果
LILO 遇到错误,就可能会看到错误消息而且不写引导扇区。例如,如果在
/etc/lilo.conf 文件中忽略了 lba32 选项,就可能看到清单 5
那样的输出。这提示尝试 linear 或 lba32
选项。在这个例子中,使用命令行指定 -l 选项,这相当于在 lilo.conf
中指定 linear 选项。如果使用 -L 选项再试一次,lilo
应该会成功,输出应该与前面的清单一样。
清单 5:
[root@lyrebird root]# lilo
Warning: device 0x030b exceeds 1024 cylinder limit
Fatal: geo_comp_addr: Cylinder number is too big (16284 > 1023)
[root@lyrebird root]# lilo -l
Warning: device 0x030b exceeds 1024 cylinder limit
Fatal: sector 261613688 too large for linear mode (try 'lba32' instead)
在测试了引导磁盘之后,修改 lilo.conf 文件中的 boot=/dev/fd0 项,将
LILO 安装在 MBR 或分区引导记录上。例如, boot=/dev/hda 将 LILO
安装在第一个 IDE 硬盘的主引导记录上。
您现在大致了解了
LILO 及其配置文件,包括如何从 lilo
命令行覆盖某些配置选项。可以使用命令 man lilo 在 lilo
的手册页中找到更多信息。在 lilo 包安装的 postscript
用户指南中甚至有更丰富的信息。这应该安装在文档目录中,但是对于不同系统,准确的位置不一样。寻找文件的一种方法是通过
grep 过滤包清单。清单 6 显示了这个例子中使用的基于 rpm 的 RHEL3
系统的 LILO 用户指南位置。
清单 6:
[ian@lyrebird ian]$ rpm -ql lilo | grep ".ps$"
/usr/share/doc/lilo-21.4.4/doc/Technical_Guide.ps
/usr/share/doc/lilo-21.4.4/doc/User_Guide.ps
LILO
有几个辅助命令。
lilo -q
将显示映射文件中的信息。
lilo -R
将 lilo
设置为只在下次重新引导时自动引导指定的系统。对于自动重新引导远程系统,这非常方便。
lilo -I
将显示关于内核路径的信息。
lilo -u
将反安装 lilo 并且恢复原来的引导记录。
当 LILO 引导 Linux
系统时,您可能希望在引导时提供额外的参数。例如,如果图形化启动不起作用了,您可能希望引导进模式
3(即单用户模式)以便进行恢复。在标签名后面输入的任何文本将被传递给内核。例如,在我们的例子中,通过简单地输入“linux”来选择
RHEL 系统。要想引导进模式
3(即单用户模式),可以输入以下字符串之一:
linux
3
linux single
还要记住,对于
LILO,每当更新了配置文件(/etc/lilo.conf)的时候,必须 运行
lilo
命令。如果添加、移动或删除了分区,或者做了可能使产生的引导装载程序无效的其他修改,那么也应该运行
lilo 命令。
(本文摘自IBM中国网站Linux专区“LPI 101 考试准备:
Linux 安装与包管理”课程。作者:Ian
Shields , 高级程序员, IBM)