升级 Linux 内核后如何避免无法启动系统?

RAK部落今天打开电脑发现linux无法正常进入,进入的是initramfs,提示什么built-in shell(ash)。。。顿时懵逼,去百度找了很多的办法比如进入grub menu之后选择第一项然后按e编辑将qiuet splash替换成all_generic_edit然后回车再按b启动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文件系统之前。

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

编辑系统配置文件,若配置文件中缺失下列内容需要您手动加上:

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中才可以重启服务器。

看到这,关于“升级 Linux 内核后如何避免无法启动系统?”问题的步骤讲解完毕,希望能够帮到与我同样遇到这类问题的朋友,如果在操作过程中有任何问题请随时下方评论,RAK部落看到会第一时间处理。

此文章来自固定链接:http://www.rakbuluo.com/p118

原文链接:,转发请注明来源!

发表评论