Alibaba Cloud Linux 3系统的ECS实例中修改/etc/default/grub无法生效的解决方案

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

本文介绍了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。

image

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

image

问题原因

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工具修改对应内核参数

  1. 执行以下命令,修改内核参数。

    说明

    <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>"
  2. 执行以下命令,重启系统。

    sudo reboot
  3. 执行以下命令,查看当前系统内核启动时使用的实际命令行参数。

    cat /proc/cmdline 

方案二:重新生成可读取通用配置的bls内核配置文件

警告
  • 若系统中存在多个内核,这些内核将共享内核参数。如果不同内核版本需要特定的内核参数配置,请谨慎使用该方案。

  • 执行该方案后,bls配置文件中的cmdline将会转换为$kernelopts的形式,即读取/etc/default/grub中GRUB_CMDLINE_LINUX的内容,特定版本内核的独特配置将丢失。在执行此操作前,确保相关内核参数已经备份。

  • 执行该方案后,若后续需要修改内核参数,需再次执行该方案,使用grubby工具修改内核参数将无法生效。

  1. 执行以下命令,打开/etc/default/grub文件。

    sudo vim /etc/default/grub
  2. 按 i 键进入编辑模式。将crashkernel参数128G:-384M修改为128G-512M。

  3. Esc 键,输入:wq后按Enter键,保存配置。

  4. 执行以下命令,重新生成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
  5. 执行以下命令,重启系统。

    sudo reboot
  6. 执行以下命令,查看当前系统内核启动时使用的实际命令行参数。

    cat /proc/cmdline 

方案三:关闭bls特性读取传统内核参数的配置文件

说明

该方式将延续使用类似 CentOS 7的传统grub方式,默认读取/etc/default/grub的配置参数。

  1. 执行以下命令,打开/etc/default/grub文件。

    sudo vim /etc/default/grub
  2. 按 i 键进入编辑模式。将crashkernel参数128G:-384M修改为128G-512M。

  3. Esc 键,输入:wq后按Enter键,保存配置。

  4. 执行以下命令,关闭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
  5. 执行以下命令,重启系统。

    sudo reboot
  6. 执行以下命令,查看当前系统内核启动时使用的实际命令行参数。

    cat /proc/cmdline