Apr
02
2021
避免Linux实例升级内核系统无法启动的方法
概述
本文介绍避免Linux实例升级内核,系统无法启动的方法。
详细信息
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
对于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是两种不同的操作概念,但这两个文件都活跃在启动实例时挂载文件系统之前。
可以直接升级内核的系统镜像
阿里云优化了20161115之后的公用系统镜像内核,您可以检查镜像名称中的时间戳,如果时间戳为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
说明:此处仅列举部分公共镜像,请以镜像中的时间戳为准。
如何优化内核并避免启动失败
如果您未使用阿里云已经优化过的公共镜像,并且需要升级系统内核,则参考以下对应步骤,对内核进行优化从而避免ECS启动失败。
说明:在修改配置文件前,建议先备份原文件。
- 创建ECS快照。
-
添加缺失内容到指定系统配置文件,操作如下。
-
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/kernelecho 'add_drivers+="virtio_blk virtio_pci xen-vbd"' >> /etc/dracut.conf
-
CentOS 6和CentOS 7系统,执行以下命令,添加缺失内容到/etc/dracut.conf.d/virt-drivers.conf配置文件。
-
执行以下命令,更新内核。
-
CentOS系统,执行以下命令,更新内核。
yum install kernel
-
OpenSUSE或SUSE系统,执行以下命令,更新内核。
zypper install kernel-default
-
CentOS系统,执行以下命令,更新内核。
-
执行以下命令,确认当前系统initrd或initramfs文件中已经包含了virtio-blk和xen-blkfront驱动。
说明:必须确认virtio-blk和xen-blkfront驱动在initrd中才可以重启实例。
lsinitrd /boot/initramfs-`uname -r`.img | grep -E 'virtio|xen'
适用于
- 云服务器ECS
如果您有其他问题,可以联系北京志远天辰阿里云代理商,为您提供一对一专业全面的技术服务,同时新/老阿里云会员,均可享受我公司代理商价格,欢迎咨询!
本公司销售:阿里云新/老客户,只要购买阿里云,即可享受折上折优惠!>
我有话说: