避免Linux实例升级内核系统无法启动的方法

避免Linux实例升级内核系统无法启动的方法

更新时间:2019-09-04 12:03:33

免责声明: 本文档可能包含第三方产品信息,该信息仅供参考。阿里云对第三方产品的性能、可靠性以及操作可能带来的潜在影响,不做任何暗示或其他形式的承诺。

 

概述

本文介绍避免Linux实例升级内核,系统无法启动的方法。

 

详细信息

对于CentOS、OpenSUSE、SLES(SUSE Linux Enterprise Server)和Aliyun Linux等镜像,升级Linux实例后启动失败,可能是因为升级后的内核对应的initrd文件中没有virtio-blk和xen-blkfront驱动。而Debian和Ubuntu的virtio-blk和xen-blkfront驱动是内核内置的,所以不存在这个可能性。

 

什么是initrd文件

initrd(initial ramdisk)是用于载入临时root文件系统到磁盘中的,运行于Linux实例启动阶段。起同样作用的还有initramfs文件,虽然initrdinitramfs是两种不同的操作概念,但这两个文件都活跃在启动实例时挂载root文件系统之前。

 

可以直接升级内核的系统镜像

提示:阿里云不建议随意自行升级内核,请参阅文档ECS使用须知

阿里云优化了 20161115 之后的公用系统镜像内核,您可以检查镜像名称中的时间戳,如果时间戳为 20161115 之后的镜像,则可以正常升级内核。如下列举部分可直接升级内核的系统镜像。这些镜像的initrd文件不会因为缺失virtio-blk和blkfront驱动的情况而导致启动失败。

  1. centos_6u8_64_40G_cloudinit_20161115.vhd
  2. centos_6u8_32_40G_cloudinit_20161115.vhd
  3. centos_5u11_64_40G_cloudinit_20161115.vhd
  4. centos_5u11_32_40G_cloudinit_20161115.vhd
  5. centos_6_8_64_40G_base_20170222.vhd
  6. centos_6_8_32_40G_base_20170222.vhd
  7. centos_7_2_64_40G_base_20170222.vhd
  8. centos_5_11_64_40G_base_20170222.vhd
  9. centos_5_11_32_40G_base_20170222.vhd
  10. centos_6_08_64_20G_alibase_20170824.vhd
  11. debian_8_09_64_20G_alibase_20170824.vhd
    注:此处仅列举部分公共镜像,请以镜像中的时间戳为准。

 

如何优化内核并避免启动失败

如果您未使用阿里云已经优化过的公共镜像,并且需要升级系统内核,则参考如下对应步骤,对内核进行优化从而避免ECS启动失败。

注:在修改配置文件前,建议先备份原文件。

  1. 创建ECS快照
  2.  添加缺失内容到指定系统配置文件,操作如下。
    • CentOS 6和CentOS 7系统,执行如下命令,添加缺失内容到/etc/dracut.conf.d/virt-drivers.conf配置文件。
      echo 'add_drivers+="xen-blkfront virtio_blk"' >> /etc/dracut.conf.d/virt-drivers.conf
    • CentOS 5系统,执行如下命令,添加缺失内容到/etc/dracut.conf.d/virt-drivers.conf配置文件。
      echo 'add_drivers+="xen-vbd virtio_blk virtio_console"' >> /etc/dracut.conf.d/virt-drivers.conf
    • OpenSUSE或SUSE系统,依次执行如下命令,添加缺失内容到/etc/sysconfig/kernel/etc/dracut.conf配置文件。
      echo 'INITRD_MODULES=" virtio_blk virtio_pci xen-vbd"' >> /etc/sysconfig/kernel
      echo 'add_drivers+="virtio_blk virtio_pci xen-vbd"' >> /etc/dracut.conf
  3. 执行如下命令,更新内核。
    • CentOS系统,执行如下命令,更新内核。
       yum install kernel
    • OpenSUSE或SUSE系统,执行如下命令,更新内核。
       zypper install kernel-default
  4. 执行如下命令,确认当前系统initrdinitramfs文件中已经包含了virtio-blk和xen-blkfront驱动。
    lsinitrd /boot/initramfs-`uname -r`.img | grep -E 'virtio|xen'
    系统显示类似如下,此处以CentOS系统为例。
  5. 必须确认virtio-blk和xen-blkfront驱动在initrd中才可以重启实例。

 

适用于

  • 云服务器 ECS