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