本文介绍如何在Alibaba Cloud Linux 3 AI Extension Edition操作系统中,使用grubby工具添加或删除内核启动参数。
了解启动配置文件结构
启动项配置文件:
GRUB
所有的启动项配置在/boot/loader/entries/
目录下。文件名由machine-id
(/etc/machine-id )和内核版本组合而成,例如c8742e47872643a6839300623c28b57c-5.10.134-19.101.al8.x86_64.conf
。配置文件示例:
title Alibaba Cloud Linux (5.10.134-19.101.al8.x86_64) 3 (OpenAnolis Edition) version 5.10.134-19.101.al8.x86_64 linux /boot/vmlinuz-5.10.134-19.101.al8.x86_64 initrd /boot/initramfs-5.10.134-19.101.al8.x86_64.img $tuned_initrd options $kernelopts $tuned_params id alinux-20250707132428-5.10.134-19.101.al8.x86_64 grub_users $grub_users grub_arg --unrestricted grub_class kernel
其中,
options
行决定了内核启动时接收的参数。默认情况下,它会引用一个名为kernelopts
的变量。这个变量定义了适用于所有启动项的通用内核参数。它的值存储在/boot/grub2/grubenv
文件中。通过修改这个变量,可以实现对所有内核版本的全局参数管理。
推荐工具
手动编辑上述配置文件,存在格式错误导致系统无法启动的风险。推荐使用 grubby
命令行工具来管理内核启动项。grubby
能够自动处理复杂的配置文件更新,确保操作的原子性和正确性。
前提条件
在开始操作前,请确保满足以下条件:
权限准备: 使用具有
root
权限的用户登录到目标ECS实例。数据备份(推荐): 对于生产环境,建议您在操作前为实例创建快照,以便在出现意外时能够快速恢复。
AI增强镜像特殊配置: Alibaba Cloud Linux 3 AI增强镜像中若需修改内核命令行参数或者修改启动项,在执行任何
grubby
修改命令之前,必须先执行一次以下命令。efibootmgr -q && test -f /boot/efi/EFI/alinux/grubenv && ln -sf ../efi/EFI/alinux/grubenv /boot/grub2/grubenv # 该命令仅需执行一次,重复执行无害
此操作用于确保grubenv
环境被正确链接,否则您的修改将不会生效。
使用grubby修改启动参数
本章节提供两种修改内核启动参数的核心方法。请根据您的具体需求选择合适的方法。
全局修改所有启动项的参数
当您需要将一个参数(例如,为适配某种硬件而添加 nvme_core.io_timeout=4294967295
)应用到所有已安装的内核版本上时,应使用此方法。
原理:
grubby
会直接修改/boot/grub2/grubenv
文件中kernelopts
变量的值,所有引用该变量的启动项都会受到影响。操作命令:
添加参数
grubby --update-kernel=ALL --args="<NEW_PARAMETER>" # 将 <NEW_PARAMETER> 替换为您要添加的实际参数,例如:"nvme_core.io_timeout=4294967295"
删除参数
grubby --update-kernel=ALL --remove-args="<PARAMETER_TO_REMOVE>" # 将 <PARAMETER_TO_REMOVE> 替换为您要删除的实际参数,例如:"quiet"
修改单个启动项的内核命令行参数
当您只想为一个特定的内核版本(例如,为当前运行的内核)添加或删除一个测试性参数,而不希望影响其他内核版本或未来的全局修改时,可使用此方法。
原理: 修改单个启动项的内核命令行参数,
kernelopts
变量会被展开,并保存到相应的启动项配置文件/boot/loader/entries/<RELEVANT_KERNEL_BOOT_ENTRY.conf>
中。说明后续如果需要继续修改该启动项的内核命令行参数,需要指定启动项修改,因为启动项配置文件中不再包含
kernelopts
变量。操作命令:
添加参数
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAMETER>" # 将 <NEW_PARAMETER> 替换为您要添加的实际参数
删除参数
grubby --update-kernel=/boot/vmlinuz-$(uname -r) --remove-args="<PARAMETER_TO_REMOVE>" # 将 <PARAMETER_TO_REMOVE> 替换为您要删除的实际参数