initramfs缺失的解决办法
一,问题描述
今天在公司升级系统到centos6.9,由于意外中途中断了系统的升级,后面在重启系统之前做检查的时候去查看/etc/grub.conf文件时发现/vmlinuz-2.6.32-696.16.1.el6.x86_64centos6.9的内核配置已经生效,用rpm-qa |grep kernel是发现kernel-firmware-2.6.32-696.16.1.el6.noarch和kernel-2.6.32-696.16.1.el6.x86_64的包都已经安装上了,ls -l /boot的时候发现initramfs-2.6.32-696.16.1.el6.x86_64.img并没有给我创建。
二,initramfs介绍
大家都知道initramfs-xxx.img其实是ramdisk,在系统启动时内核要装载根文件系统,但是根文件系统所在的设备,内核可能根本无法驱动,因为它的驱动程序在根文件系统之上,所以这时候我们要借助于ramdisk的辅助来完成对于所需要和依赖到的驱动程序的加载,一旦这个驱动程序加载完成之后内核就能装载到真正的根文件系统了,而且还要做根切换,ramdisk在centos5上叫做initrd在centos6和centos7上叫做initramfs,ramdisk在centos5上是模拟成磁盘的,在centos6上是模拟成文件系统的它可以提高效率的,所以initramfs文件是很重要的,没有这个文件,系统绝逼是不能启动的,同时提醒在做这种升级操作的时候再系统重启之前一定要先检查,以免耽误公司业务。
三,此类查看重启系统前的检查项
(1)ls -l /boot/目录下看是否存在initramfs-2.6.32-696.16.1.el6.x86_64.img和vmlinuz-2.6.32-696.16.1.el6.x86_64
(2)cat /etc//grub.conf配置文件是否有新内核的相关配置项
(3)还要注意一下/etc/grub.conf文件是链接文件,它链接的/boot/grub/grub.conf配置文件,因此还要保证此文件中也有内核的相关配置文件
上面的第三步是因为我之前碰到了类似的事情,前人将链接删除了,结果导致了系统升级成功但是缺用新内核引导不了,排查了较长的时间才解决
ramdisk文件所在目录:
centos5系统/boot/initrd-VERSION-release.img
centos6和centos7系统/boot/initrmfs-VERSION-release.img
四,以上问题解决办法
我开始用dracut和mkinitrd命令建了initramfs文件,结果重启系统发现不生效,这里有一个简单的方法用rpm -e 卸载掉指定新内核的文件kernel-firmware-2.6.32-696.16.1.el6.noarch和kernel-2.6.32-696.16.1.el6.x86_64,然后再重新执行yum -y update命令进行升级,但是这里还有一个小问题,如果是在yum update进行中中段的话,可能在yum update的时候会报错提示有重复的包,报错如下:

这个问题也很好解决,百度一下即可,大致思路是清除一下重复的包或者损坏的包,然后重新安装即可
以上升级完成之后再次检查系统就可以执行重启。

浙公网安备 33010602011771号