lilo(Linux Loader)是Linux系统中的一个经典引导加载程序。它负责在计算机启动时加载Linux内核到内存中,并将控制权交给内核。lilo是一个相对简单的引导加载程序,直接安装在硬盘的主引导记录(MBR)中。
lilo [选项]
lilo -C 配置文件 [选项]
| 选项 | 说明 |
|---|---|
-C 配置文件 |
使用指定的配置文件(默认:/etc/lilo.conf) |
-b 引导设备 |
指定引导设备(如:/dev/sda) |
-m 映射文件 |
指定映射文件(默认:/boot/map) |
-q |
查询当前配置 |
-v |
详细模式(显示更多信息) |
-u |
卸载lilo,恢复原来的引导扇区 |
-U |
与-u相同,但不检查时间戳 |
-r 目录 |
使用指定目录作为根目录 |
-t |
测试模式(不实际写入) |
-V |
显示版本信息 |
| 特性 | lilo | GRUB |
|---|---|---|
| 出现时间 | 1992年 | 1999年 |
| 配置文件 | /etc/lilo.conf | /boot/grub/grub.cfg 或 /etc/grub.d/ |
| 配置方式 | 静态配置,修改后需运行lilo命令 | 动态配置,支持运行时修改 |
| 文件系统支持 | 有限支持 | 广泛支持(ext2/3/4, FAT, NTFS等) |
| 交互性 | 有限交互 | 丰富交互,命令行界面 |
| 现代系统使用 | 较少 | 广泛 |
lilo的主要配置文件是/etc/lilo.conf。每次修改此文件后,必须运行lilo命令使更改生效。
# /etc/lilo.conf 示例配置
boot=/dev/sda # 引导设备
map=/boot/map # 映射文件位置
install=/boot/boot.b # 引导扇区安装文件
prompt # 显示引导提示符
timeout=50 # 等待用户选择时间(0.1秒为单位)
default=linux # 默认启动项
# 启动项1:Linux
image=/boot/vmlinuz # 内核镜像文件
label=linux # 启动项标签
read-only # 初始只读挂载根文件系统
root=/dev/sda1 # 根文件系统设备
append="quiet splash" # 内核启动参数
# 启动项2:Linux(救援模式)
image=/boot/vmlinuz
label=rescue
read-only
root=/dev/sda1
append="single" # 单用户模式
# 启动项3:Windows
other=/dev/sda2 # 其他操作系统分区
label=windows
table=/dev/sda # 分区表所在设备
| 指令 | 说明 |
|---|---|
boot=设备 |
安装引导加载程序的设备 |
root=设备 |
根文件系统设备 |
image=内核路径 |
Linux内核镜像文件路径 |
other=分区 |
其他操作系统所在分区 |
label=名称 |
启动项显示名称 |
append=参数 |
传递给内核的参数 |
timeout=时间 |
引导菜单超时时间(单位:0.1秒) |
prompt |
显示引导提示符 |
read-only |
以只读方式挂载根文件系统 |
password=密码 |
设置启动项密码 |
# 1. 创建基本的lilo配置文件
cat > /etc/lilo.conf << EOF
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
default=linux
image=/boot/vmlinuz-$(uname -r)
label=linux
read-only
root=/dev/sda1
EOF
# 2. 安装lilo到MBR
lilo
# 3. 查看安装信息
lilo -q
# 配置Linux和Windows双系统引导
cat > /etc/lilo.conf << EOF
boot=/dev/sda
timeout=150
prompt
default=linux
# Linux启动项
image=/boot/vmlinuz
label=linux
read-only
root=/dev/sda1
append="quiet splash"
# Linux救援模式
image=/boot/vmlinuz
label=rescue
read-only
root=/dev/sda1
append="single"
# Windows启动项
other=/dev/sda2
label=windows
table=/dev/sda
EOF
# 应用配置
lilo -v
# 查询当前lilo配置
lilo -q
# 显示详细信息
lilo -v
# 测试配置而不实际写入
lilo -t
# 使用不同的配置文件
lilo -C /etc/lilo.conf.custom
# 备份当前的引导扇区
dd if=/dev/sda of=/boot/boot.backup bs=512 count=1
# 卸载lilo,恢复原来的引导扇区
lilo -u
# 强制卸载(不检查时间戳)
lilo -U
这通常表示lilo引导加载程序的第一阶段加载成功,但第二阶段失败:
解决方法:
# 1. 使用Live CD/USB启动
# 2. 挂载原系统分区
mkdir /mnt/linux
mount /dev/sda1 /mnt/linux
# 3. 重新安装lilo
chroot /mnt/linux
lilo
# 4. 检查配置文件
vi /etc/lilo.conf
# 确保内核路径和根分区正确
每次内核更新或配置文件修改后,都必须重新运行lilo命令:
# 1. 更新内核后,重新运行lilo
lilo
# 2. 可以指定特定的内核文件
lilo -A vmlinuz-5.4.0-91-generic
# 3. 如果忘记了运行lilo,可以从旧内核启动
# 在引导提示符处按Tab键显示可用选项
# 选择旧内核启动,然后运行lilo
如果调整了分区大小或改变了分区结构,需要更新lilo配置:
# 1. 更新/etc/lilo.conf中的分区信息
vi /etc/lilo.conf
# 修改root=和boot=指向正确的设备
# 2. 重新安装lilo
lilo
# 3. 如果无法启动,使用救援模式:
# - 从Live CD/USB启动
# - 挂载原系统
# - chroot后运行lilo
# 为特定启动项设置密码
image=/boot/vmlinuz
label=linux
password=secret123
read-only
root=/dev/sda1
# 全局密码保护(所有启动项)
password=globalpass
image=/boot/vmlinuz
label=linux
read-only
root=/dev/sda1
restricted # 允许无密码启动,但修改内核参数需要密码
# 多磁盘配置
boot=/dev/sda
install=/boot/boot.b
map=/boot/map
# 第二个磁盘作为备用引导
disk=/dev/sdb
bios=0x81 # 第二个磁盘的BIOS编号
# RAID配置
raid-extra-boot=/dev/sda,/dev/sdb
# 使用initrd和自定义内核参数
image=/boot/vmlinuz
label=linux
initrd=/boot/initrd.img
read-only
root=/dev/mapper/vg-root
append="resume=/dev/sda2 splash quiet"
# 1. 安装GRUB软件包
# Debian/Ubuntu:
apt-get install grub2
# RHEL/CentOS:
yum install grub2
# 2. 备份lilo配置
cp /etc/lilo.conf /etc/lilo.conf.backup
# 3. 生成GRUB配置文件
# BIOS系统:
grub-install /dev/sda
update-grub # Debian/Ubuntu
grub2-mkconfig -o /boot/grub/grub.cfg # RHEL/CentOS
# UEFI系统:
grub-install --target=x86_64-efi --efi-directory=/boot/efi
update-grub
# 4. 验证GRUB安装
grub-probe --target=fs_uuid /boot/grub
# 5. 重启系统验证引导
reboot
#!/bin/bash
# 旧服务器lilo维护脚本
echo "=== lilo维护脚本 ==="
# 检查lilo是否安装
if ! command -v lilo &> /dev/null; then
echo "lilo未安装,尝试安装..."
apt-get install lilo 2>/dev/null || yum install lilo 2>/dev/null
fi
# 备份当前配置
BACKUP_DIR="/backup/lilo/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
cp /etc/lilo.conf $BACKUP_DIR/
dd if=/dev/sda of=$BACKUP_DIR/mbr.backup bs=512 count=1
echo "配置备份到: $BACKUP_DIR"
# 检查配置文件语法
if lilo -t; then
echo "lilo配置语法检查通过"
# 应用配置
echo "应用lilo配置..."
lilo -v
# 显示当前配置
echo "=== 当前lilo配置 ==="
lilo -q
else
echo "lilo配置有错误,请检查/etc/lilo.conf"
exit 1
fi
echo "维护完成"
#!/bin/bash
# 嵌入式系统lilo配置
echo "=== 嵌入式系统lilo配置 ==="
# 嵌入式系统通常使用简单配置
cat > /etc/lilo.conf.embedded << EOF
boot=/dev/mmcblk0
compact # 合并读请求,加速引导
delay=20 # 20毫秒延迟
timeout=0 # 不显示菜单,立即启动
vga=normal # 正常VGA模式
image=/boot/zImage
label=EmbeddedLinux
read-only
root=/dev/ram0
append="console=ttyS0,115200n8 rootwait"
EOF
# 使用嵌入式配置
cp /etc/lilo.conf.embedded /etc/lilo.conf
# 安装到存储设备
echo "安装lilo到嵌入式存储..."
lilo -C /etc/lilo.conf -b /dev/mmcblk0
echo "嵌入式lilo配置完成"
echo "注意:这仅适用于特定嵌入式硬件配置"
A: 主要区别:
A: lilo的工作原理:
因此,任何配置变更都需要重新运行lilo来更新这些位置信息。
A: 不支持。lilo是一个传统的BIOS/MBR引导加载程序,不支持UEFI引导模式。UEFI系统需要使用:
A: 恢复Windows引导的方法:
# 方法1:使用Windows安装盘修复
# 1. 从Windows安装介质启动
# 2. 选择"修复计算机"
# 3. 打开命令提示符
# 4. 执行:bootrec /fixmbr
# 方法2:使用Linux工具
# 1. 备份当前MBR
dd if=/dev/sda of=/backup/mbr.lilo bs=512 count=1
# 2. 清除lilo,写入空MBR
dd if=/dev/zero of=/dev/sda bs=512 count=1
# 3. 使用Windows修复或重新安装引导
# 方法3:使用lilo卸载
lilo -u # 如果有备份的原始引导扇区
/etc/lilo.conf,修改后必须运行lilo命令lilo在Linux发展史上具有重要地位:
虽然现代系统很少使用lilo,但了解它对于理解Linux引导过程和系统历史很有帮助。