开发者社区> 问答> 正文

如何避免升级 Linux 实例内核后无法启动


注意:阿里云不建议随意自行升级内核,请参阅文档 ECS 使用须知。可以参阅文档 更新系统时如何避免升级 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 文件,虽然 initrd 和 initramfs 是两种不同的操作概念,但这两个文件都活跃在启动实例时挂载 root 文件系统之前。

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


阿里云优化了镜像名称 image_no 中时间戳从 20161115 开始的镜像公共系统镜像内核,这些镜像的 initrd 文件不会因为缺失 virtio-blk 和 blkfront 驱动的情况而导致启动失败。如下所示:
  • centos_6u8_64_40G_cloudinit_20161115.vhd
  • centos_6u8_32_40G_cloudinit_20161115.vhd
  • centos_5u11_64_40G_cloudinit_20161115.vhd
  • centos_5u11_32_40G_cloudinit_20161115.vhd
  • centos_6_8_64_40G_base_20170222.vhd
  • centos_6_8_32_40G_base_20170222.vhd
  • centos_7_2_64_40G_base_20170222.vhd
  • centos_5_11_64_40G_base_20170222.vhd
  • centos_5_11_32_40G_base_20170222.vhd
  • ……
  • ……
  • centos_6_08_64_20G_alibase_20170824.vhd
  • debian_8_09_64_20G_alibase_20170824.vhd


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


  1. 编辑系统配置文件,若配置文件中缺失下列内容需要您手动加上:
    • CentOS 6 和 CentOS 7:执行 vi /etc/dracut.conf.d/virt-drivers.conf,添加 add_drivers+=" xen-blkfront virtio_blk "
    • CentOS 5:执行 vi /etc/dracut.conf.d/virt-drivers.conf,添加 add_drivers+=" xen-vbd virtio_blk virtio_console "
    • OpenSUSE/SUSE:执行 vi /etc/sysconfig/kernel,添加 INITRD_MODULES=" virtio_blk virtio_pci xen-vbd"
    • 执行 vi /etc/dracut.conf,添加 add_drivers+="virtio_blk virtio_pci xen-vbd"

更新内核:
  • CentOS:执行 yum install kernel
  • OpenSUSE/SUSE:执行 zypper install kernel-default

执行命令 lsinitrd /boot/initramfs-$(new-kernel-ver).img | grep -E 'virtio|xen' 检查并确认 initrd / initramfs 文件中已经包含了 virtio-blk 和 xen-blkfront 驱动。
必须确认 virtio-blk 和 xen-blkfront 驱动在 initrd 中才可以重启实例。
如问题还未解决,请 提交工单联系阿里云。

展开
收起
boxti 2017-10-24 10:45:18 3355 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载