表现和缺少驱动表现类似, 提示无法挂载根分区,判断是initramfs缺少驱动,登录查是initramfs 不存在。
使用旧内核或者修复盘引导启动并chroot
方法一:重新安装内核
使用yum reinstall kernel
发现在配置内核时出现错误,错误信息如下图,可以从下图中看到
在向/var/tmp 创建临时文件时出错, lsattr /var/tmp 发现有 i 权限,去掉后重新安装内核完成安装
如果cat /boot/grub2/grub.cfg |grep menuentry
看不到最新内核,执行
grub2-mkconfig -o /boot/grub2/grub.cfg
更新一下grub.cfg
注意: /tmp 目录不存在也可能导致内核安装出错,有用户将/tmp 删除掉软链到了数据盘的挂载点下,LiveCD修复内核找不到/tmp目录导致安装出错。
方法二:手工生成initramfs文件
mount /dev/vda1 /mnt # 需要根据实际修改,目前存在的uefi启动的镜像,其根分区和boot分区不是一个for i in sys proc dev;do mount --bind /$i /mnt/$i;done chroot /mnt # --- 旧内核启动忽略上面部分 --- #cd /boot mkinitrd -f--allow-missing \ --with=xen-blkfront --preload=xen-blkfront \ --with=virtio_blk --preload=virtio_blk \ --with=virtio_pci --preload=virtio_pci \ --with=virtio_console --preload=virtio_console \ $target_initrd$vmlinuz# $target_initrd 要进行替换实际的initramfs文件名 $vmlinuz 替换为对应内核版本
注意:mkinitrd 并非都能成功,但是如无严重错误可以尝试重启是否解决,若无任何返回表明正常
下面是一个修复案例:
rpm 安装指定版本的内核,但是initramfs (4.19.12-1.el7.x86_64)不存在,导致重启未能正常启动,使用旧内核启动, 修复盘模式下 mkinitrd 提示 missing module.dep
# --- 使用旧内核启动 --- #depmod -a4.19.12-1.el7.elrepo.x86_64 #解决missing module.dep问题,缺少mkinitrd会出错cd /boot mkinitrd -f--allow-missing \ --with=xen-blkfront --preload=xen-blkfront \ --with=virtio_blk --preload=virtio_blk \ --with=virtio_pci --preload=virtio_pci \ --with=virtio_console --preload=virtio_console \ initramfs-4.19.12-1.el7.elrepo.x86_64.img 4.19.12-1.el7.elrepo.x86_64 cd /boot/grub2 grub2-mkconfig -o grub.cfg
参考文档
Kernel panic with error "FATAL: Could not load modules.dep no such file or directory" on RSA NetWitness