LILO

来自 ArchWiki

LInux LOader,简称 LILO,是 Linux 系统的传统多重启动引导程序。尽管在 数年 间一直是标准选择,但它已逐渐被淘汰。截至 2016 年 1 月,LILO 不再进行积极开发

支持的文件系统

来自上游的 readme

LILO 不知道如何读取文件系统。相反,map 安装程序会向内核询问文件的物理位置(例如内核镜像),并记录该信息。这使得 LILO 可以与 Linux 支持的大多数文件系统一起工作。

实际上,LILO 的开发已经停止,正是由于这种方法的一些限制,例如 Btrfs、GPT、RAID。

安装

LILO 以 liloAURlilo-gitAUR(开发版本)的形式提供。LILO 仅适用于 BIOS 系统。

以 root 身份运行命令 lilo 将会将 LILO 安装到 MBR。在运行 lilo 命令之前,您应该编辑 /etc/lilo.conf 以确保 root 条目指向 root 分区。如果您的 root 分区在 /dev/sda1 上,则 root 条目应如下所示:root=/dev/sda1。请记住更改 'arch' 和 'arch-fallback' 条目的 root 行。

安装到分区或无分区磁盘

使用 -b 标志来指定分区或整个磁盘(而不是隐含的 -M)以将 LILO 安装到 卷引导记录 (VBR) 而不是 MBR。请参阅 lilo(8)Gentoo 论坛上 Hypnos 的回答

配置

通过编辑 /etc/lilo.conf 文件并在之后运行 lilo 来应用新配置,以此配置 LILO。

作为提醒,请考虑 LILO 需要 在每次内核升级后运行,否则系统很可能处于无法启动的状态。

有关设置 LILO 的更多帮助,请参见 LILO-mini-HOWTO

示例设置

典型的 LILO 设置

提示: 如果 LILO 在加载 bzImage 时速度非常慢,请尝试将 compact 添加到 /etc/lilo.conf 的全局部分,如下所示。
/etc/lilo.conf
#
# /etc/lilo.conf
#

boot=/dev/sda
# This line often fixes L40 errors on bootup
# disk=/dev/sda bios=0x80

default=arch
timeout=50
lba32
prompt
# Nice colours
install=menu
menu-scheme=Wb:Yr:Wb:Wb

# Highly recommended to uncomment line below if it
#  does not give any error on booting
compact

# Remember to change root=/dev/???
image=/boot/vmlinuz-linux
	label=arch
	root=/dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
	initrd=/boot/initramfs-linux.img
	read-write

image=/boot/vmlinuz-linux
	label=arch-fallback
	root=/dev/disk/by-uuid/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
	initrd=/boot/initramfs-linux-fallback.img
	read-write

#other=/dev/hda1
#	label=dos

您可以使用 hwinfo --framebuffer 来确定您可以使用的 vga 模式。

使用图像作为背景

首先准备背景图像

  • 在 GIMP 中打开它。
  • 将其缩放到 640x480。
  • 将其更改为索引模式(图像 > 模式 > 索引)。
  • 选择创建最佳调色板并将其设置为 16 色。选择任何适合您的抖动方法。
  • 打开“索引调色板”对话框。记下您要用于菜单文本条目、时钟等的颜色。在您的 lilo.conf 中,您可以通过索引引用颜色。
  • 将图像导出为 /boot 目录中的 bmp。在导出对话框中,选中不写入颜色空间信息选项

现在编辑 lilo.conf。您可以为图形菜单设置一些选项。有关更多信息,请参见 man lilo.conf

  • bitmap=<bitmap-file> 将其设置为您上面保存的文件。
  • bmp-colors=<fg>,<bg>,<sh>,<hfg>,<hbg>,<hsh>
这些是菜单中条目的颜色。它们分别指的是前景色、背景色和阴影颜色,然后是突出显示文本的相同颜色。不要使用空格。使用的值是您在上一步中发现的调色板中的索引。如果您选择,您可以留空一个值(但不要忘记逗号)。默认背景是透明的,默认阴影是没有阴影。
  • bmp-table=<x>,<y>,<ncol>,<nrow>,<xsep>,<spill> 此选项指定菜单的放置位置。x 和 y 是字符坐标。您也可以在它们后面加上 p 以指定像素坐标。
  • bmp-timer=<x>,<y>,<fg>,<bg>,<sh> 此选项指定计时器的坐标和颜色,该计时器在启动默认条目之前倒计时超时。它使用颜色索引作为颜色,并使用字符(或像素)坐标。

例如

bitmap=/boot/arch-lilo.bmp
bmp-colors=1,0,8,3,8,1
bmp-table=250p,150p,1,18
bmp-timer=250p,350p,3,8,1

保存 lilo.conf,以 root 身份运行 lilo,然后重新启动并查看效果!

Pacman 钩子

lilo 需要在每次内核更新后运行。您可以使用 pacman 钩子来自动化它。请参阅 Pacman#Hooksalpm-hooks(5)

如果目录 /etc/pacman.d/hooks 尚不存在,请创建它。

/etc/pacman.d/hooks/lilo.hook
[Trigger]
Operation = Install
Operation = Upgrade
Operation = Remove
Type = Package
Target = linux
Target = linux-lts

[Action]
Description= Run lilo after kernel update
When = PostTransaction
Depends = lilo
Exec = /usr/bin/lilo

故障排除

启动时出现读写错误消息

此错误消息是由 mkinitcpio 中的 更改 引起的,该更改是对 systemd commit 的响应。此更改导致分区在以只读方式挂载时被 fsck 两次。要修复此错误,请编辑 /etc/lilo.conf 并将两个 arch 条目的“read only”行更改为“read write”。

有关更多信息,请参阅 此论坛帖子

内核升级后出现 Devmapper 未找到错误消息

在内核升级后运行 lilo 命令可能会导致 devmapper 未找到错误。如果是这种情况,请在内核升级后运行 lilo 之前运行 modprobe dm-mod

参见