grubby 是一个用于管理 Linux 系统引导加载程序(Bootloader)配置的命令行工具,主要用于更新和查看 GRUB、GRUB2、ZIPL 等引导程序的配置文件。它允许用户动态修改内核启动参数、切换默认内核、添加或删除引导项等操作,是系统管理员维护多内核环境的重要工具。
功能概述
引导项管理
添加、删除、更新内核引导项。修改引导参数(如 root=、ipv6.disable=1 等)。设置默认启动内核或引导项索引。
跨架构支持
支持 x86_64(BIOS/UEFI)、ppc64/le(Power8+)、s390x/s390、ia64 等架构。适配不同引导程序(GRUB2、ZIPL、ELILO 等)。
自动化脚本集成
专为脚本设计,支持在内核安装或卸载时自动更新引导配置。
语法格式
grubby [OPTIONS]
核心选项详解
1. 基本操作选项
选项描述示例--add-kernel=KERNEL_PATH添加新内核引导项。需配合 --title 和 --initrd 使用。grubby --add-kernel=/boot/vmlinuz-5.15.0 --title="New Kernel" --initrd=/boot/initrd.img-5.15.0--remove-kernel=KERNEL_PATH删除指定内核的引导项。grubby --remove-kernel=/boot/vmlinuz-5.14.0--update-kernel=KERNEL_PATH更新指定内核的引导参数。需配合 --args 或 --remove-args。grubby --update-kernel=ALL --args="ipv6.disable=1"--args=KERNEL_ARGS为内核添加新的启动参数。grubby --update-kernel=ALL --args="nouveau.modeset=0"--remove-args=KERNEL_ARGS移除指定内核的启动参数。grubby --update-kernel=ALL --remove-args="ipv6.disable=1"--copy-default从当前默认内核复制参数(如 root=)。grubby --add-kernel=/boot/vmlinuz-5.15.0 --copy-default2. 默认设置选项
选项描述示例--set-default=KERNEL_PATH设置指定内核为默认启动项。grubby --set-default=/boot/vmlinuz-5.15.0--set-default-index=ENTRY_INDEX按索引设置默认启动项(从 0 开始)。grubby --set-default-index=0--make-default将新添加的内核设为默认启动项。grubby --add-kernel=/boot/vmlinuz-5.15.0 --make-default3. 显示查询选项
选项描述示例--default-kernel显示当前默认内核路径。grubby --default-kernel--default-index显示当前默认启动项的索引。grubby --default-index--default-title显示当前默认启动项的标题。grubby --default-title--info=KERNEL_PATH显示指定内核的引导信息。grubby --info=ALL4. 高级选项
选项描述示例--efi强制使用 EFI 引导模式(仅限 x86_64 UEFI)。grubby --efi --add-kernel=/boot/vmlinuz-5.15.0--elilo / --grub2 / --zipl指定引导程序配置格式(覆盖默认)。grubby --grub2 --add-kernel=/boot/vmlinuz-5.15.0典型使用场景与示例
1. 查看当前引导配置
# 列出所有内核的引导信息
grubby --info=ALL
# 显示当前默认内核路径
grubby --default-kernel
# 显示默认启动项的索引
grubby --default-index
2. 添加新内核引导项
# 添加新内核并设置默认参数
grubby \
--add-kernel=/boot/vmlinuz-5.15.0 \
--title="Linux 5.15.0" \
--initrd=/boot/initrd.img-5.15.0 \
--args="root=/dev/sda1 ro quiet"
# 添加新内核并直接设为默认
grubby \
--add-kernel=/boot/vmlinuz-5.15.0 \
--title="Linux 5.15.0" \
--initrd=/boot/initrd.img-5.15.0 \
--make-default
3. 修改现有内核参数
# 为所有内核添加 IPv6 禁用参数
grubby --update-kernel=ALL --args="ipv6.disable=1"
# 移除指定内核的参数
grubby --update-kernel=/boot/vmlinuz-5.14.0 --remove-args="ipv6.disable=1"
4. 切换默认内核
# 通过内核路径设置默认
grubby --set-default=/boot/vmlinuz-5.15.0
# 通过索引设置默认(需先确认索引)
grubby --set-default-index=1
5. 删除旧内核引导项
# 删除指定内核的引导项
grubby --remove-kernel=/boot/vmlinuz-5.14.0
注意事项
参数覆盖风险
使用 --args 添加参数时,若参数已存在,会覆盖原值。建议先通过 --info 检查当前参数。
索引与路径一致性
--set-default-index 的索引需基于当前引导项列表(通过 --info=ALL 查看),否则可能导致错误。
引导程序兼容性
不同架构和引导程序(如 ZIPL、GRUB2)的配置文件格式不同,使用 --elilo、--grub2 等选项可强制指定格式。
系统重启生效
所有修改需在系统重启后生效,可通过 reboot 命令验证。
备份配置文件
修改前建议备份 /boot/grub2/grub.cfg 或 /etc/zipl.conf 等引导配置文件,防止操作失误导致系统无法启动。
常见问题与解决方案
1. 错误提示:grubby: error: cannot find kernel
原因:指定的内核路径不存在或权限不足。解决方法:
验证内核路径是否存在:ls /boot/vmlinuz-*
使用 sudo 提升权限执行命令。
2. 启动参数未生效
原因:参数未正确添加或引导配置未更新。解决方法:
重新运行 grubby --info=ALL 确认参数已添加。手动更新 GRUB 配置(如 grub2-mkconfig -o /boot/grub2/grub.cfg)。
3. 默认内核设置失败
原因:指定内核路径或索引无效。解决方法:
通过 --info=ALL 查看当前引导项列表及索引。确保路径与 --info 输出一致。