Alibaba Cloud Linux 2系统的ECS实例升级内核失败,如何处理?

本文为您介绍Alibaba Cloud Linux 2系统的ECS实例升级内核失败的原因及解决办法。

问题描述

在符合如下条件的Alibaba Cloud Linux 2实例升级内核时,提示grubby报错,具体报错信息如下所示。且内核升级后,grub启动项不能自动更新,新内核功能不生效。

  • 镜像:aliyun_2_1903_x64_20G_alibase_20200114.qboot.vhd镜像(以下简称qboot镜像)。

  • 内核:4.19.81-17.al7.x86_64内核版本。

kernel-4.19.91-19.2.al7.x86_64.rpm                                                                                         |  14 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Warning: RPMDB altered outside of yum.
  Installing : kernel-4.19.91-19.2.al7.x86_64                                                                              1/1
grubby fatal error: unable to find a suitable template

Broadcast message from systemd-journald@iZbp1XXXXtbay7jZ (Fri 2020-07-31 15:38:45 CST):

dracut[2183]: Failed to install module xen_blkfront

问题原因

因为qboot镜像启动优化去除了initramfs过程,导致实例启动后出现以下情况:

  • /proc/mounts/根目录的挂载设备为/dev/root

  • 系统没有正确创建软链接/dev/root

因此在内核升级过程中,grubby脚本无法正确识别根分区挂载的设备,即升级过程中无法正确更新grub配置信息。

解决方案

方案一:临时修复

  • 修复“grubby fatal error”问题

    • 临时修复

      执行以下命令,创建/dev/root软链接。

      ln -sf /dev/vda1 /dev/root
    • 持久修复

      执行以下命令,新建udev rule自动创建/dev/root软链接。

    • sed -i '/ACTION=="remove"/a\\n# create symbol link for /dev/root\nACTION!="remove", SUBSYSTEM=="block", ENV{MAJOR}=="254", ENV{MINOR}=="1", SYMLINK+="root"' /usr/lib/udev/rules.d/60-persistent-storage.rules
  • 修复“dracut failure”问题

    执行以下命令,删除不必要的dracut配置文件。

    rm -rf /etc/dracut.conf.d/*

方案二:升级镜像

该问题在aliyun_2_1903_x64_20G_qboot_alibase_20200904.vhd版本的qboot镜像中已修复,您使用新镜像即可。