本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
本文介绍了Alibaba Cloud Linux 3.2104(内核5.10.134-13及以上版本)系统的ECS实例,修改/etc/default/grub文件并重启系统后配置无法生效的原因和解决方案。
问题描述
Alibaba Cloud Linux 3.2104(内核5.10.134-13及以上版本)系统的ECS实例,修改了/etc/default/grub文件,例如:将crashkernel参数中128G:-384M修改为128G-512M。

系统重启后,执行cat /proc/cmdline命令查看当前系统内核启动时使用的实际命令行参数,发现cmdline参数未按预期进行修改,与 /etc/default/grub 中的配置不匹配。

问题原因
Alibaba Cloud Linux 3引入了业界主流的grub blscfg功能,使系统能够在/boot/loader/entries/目录下配置多个内核的文件。从5.10.134-13版本开始,ANCK内核引入了最佳实践配置,将默认配置以固定形式写入/boot/loader/entries/对应的入口文件中。因此,修改通用配置文件/etc/default/grub将无法影响特定版本的内核参数。
解决方案
您可以通过以下三种方案使修改的/etc/default/grub参数生效,本文以将crashkernel中参数128G:-384M修改为128G-512M为例进行说明。
方案一:(推荐)通过grubby工具修改对应内核参数
执行以下命令,修改内核参数。
说明<NEW_PARAM>替换为实际的内核参数,例如:crashkernel=0M-2G:0M,2G-8G:192M,8G-128G:256M,128G-:512M。
修改当前运行内核的参数配置。
sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="<NEW_PARAM>"更新/boot目录下所有内核参数。
sudo grubby --update-kernel=ALL --args="<NEW_PARAM>"
执行以下命令,重启系统。
sudo reboot执行以下命令,查看当前系统内核启动时使用的实际命令行参数。
cat /proc/cmdline
方案二:重新生成可读取通用配置的bls内核配置文件
若系统中存在多个内核,这些内核将共享内核参数。如果不同内核版本需要特定的内核参数配置,请谨慎使用该方案。
执行该方案后,
bls配置文件中的cmdline将会转换为$kernelopts的形式,即读取/etc/default/grub中GRUB_CMDLINE_LINUX的内容,特定版本内核的独特配置将丢失。在执行此操作前,确保相关内核参数已经备份。执行该方案后,若后续需要修改内核参数,需再次执行该方案,使用
grubby工具修改内核参数将无法生效。
执行以下命令,打开
/etc/default/grub文件。sudo vim /etc/default/grub按 i 键进入编辑模式。将
crashkernel参数128G:-384M修改为128G-512M。按
Esc键,输入:wq后按Enter键,保存配置。执行以下命令,重新生成
bls内核配置文件。sudo kernel-install add $(uname -r) /lib/modules/$(uname -r)/vmlinuz sudo grub2-mkconfig -o /boot/grub2/grub.cfg sudo grub2-mkconfig -o /boot/efi/EFI/alinux/grub.cfg执行以下命令,重启系统。
sudo reboot执行以下命令,查看当前系统内核启动时使用的实际命令行参数。
cat /proc/cmdline
方案三:关闭bls特性读取传统内核参数的配置文件
该方式将延续使用类似 CentOS 7的传统grub方式,默认读取/etc/default/grub的配置参数。
执行以下命令,打开
/etc/default/grub文件。sudo vim /etc/default/grub按 i 键进入编辑模式。将
crashkernel参数128G:-384M修改为128G-512M。按
Esc键,输入:wq后按Enter键,保存配置。执行以下命令,关闭
bls特性。sudo sed -i "s/GRUB_ENABLE_BLSCFG=true/GRUB_ENABLE_BLSCFG=false/g" /etc/default/grub sudo grub2-mkconfig -o /boot/grub2/grub.cfg sudo grub2-mkconfig -o /boot/efi/EFI/alinux/grub.cfg执行以下命令,重启系统。
sudo reboot执行以下命令,查看当前系统内核启动时使用的实际命令行参数。
cat /proc/cmdline