1、背景
一台运行在Esxi上面的VM重启后报initramfs-xxx.img not found错误。
按任意键后出现以下错误。
之前在运维Centos7的时候解决过Kernel panic - not syncing : VFS: Unable to mount root fs on unknown-block(0.0)错误,以为按照之前的解决方案,重启服务器,按Esc进入选择内核的界面,选择中间的内核启动服务器就能解决问题(默认是选择最上面的内核),没想到还是同样报initramfs-xxx.img not found错误。
然后尝试选择第三个内核,错误依旧。然后在内核选择页面按e尝试进入Centos7安全模式,定位到ro 然后修改ro为rw,并添加sysroot=/bin/sh命令,按Ctrl+x命令进入安全模式,发现错误还是依旧。
2、解决方案
在解决initramfs-xxx.img not found错误前,需要先了解下initramfs作用。
2.1 initramfs模块作用
在Linux系统启动过程中,initramfs(Initial RAM File System)是一种临时的根文件系统,用于在系统初始化期间挂载根文件系统之前进行各种初始化操作。initramfs可以包含必需的驱动程序、二进制文件和脚本等,以便在系统引导期间使用。
在Linux系统引导时,initramfs模块会被加载到内存中,其中包含了必要的文件和驱动程序,用于在启动阶段执行各种任务,例如检查文件系统、加载模块、识别和挂载根文件系统等。此外,initramfs模块还可以用于进行故障排除和修复系统错误,例如恢复损坏的文件系统等。
总的来说,initramfs模块在Linux系统的引导过程中起着非常重要的作用,它提供了一个轻量级的临时文件系统,使得在系统初始化阶段执行各种任务更加灵活、高效和可靠。
2.2 数据备份(可选)
在尝试解决此错误前,为了保险起见,可以先备份当前VM数据(相当于创建了一个和报错VM相同数据的VM)。
1)、数据盘新建目录用于备份报错VM
2)、将报错VM的vmx、vmdk文件拷贝到新建目录下
3)、右键点击test115目录下的monitor115.vmx进行虚拟机注册,然后等待拷贝任务完成,即可备份出一个一模一样的VM。
注意 1:数据备份不是必选的,monitro115这台VM是测试机器,没有要求修复完成时间,因此留出时间进行数据备份,以防误操导致机器彻底启动不来。
注意 2:等待拷贝任务需要等待很长时间(monitor115这个VM是200G的SATA盘,拷贝用了将近4个小时),如果服务器急需修复,请选择其他方式进行VM的备份。
2.3 解决报错
1)、修改VM配置,使得下次虚拟机启动时,强制进入BIOS设置界面
2)、使用CD光盘驱动启动VM
打开VM电源,进行BIOS界面,切到开机项(Boot),将光盘驱动(CD-ROM Drive)调整到硬盘驱动(Hard Drive)上面即可,然后F10保存,退出BIOS设置。
3)、选择“Troubleshooting”疑难杂症
4)、进入救援模式
如果以上操作正确,便可进入救援模式。
输入1即可进入救援模式。
5)、 救援环境尝试挂载linux根文件系统到/mnt/sysimage
根据上图提示,执行chroot /mnt/sysimage命令,切换至根目录模式,确认initramfs-*.img文件是否存在。
bash-4.2#chroot /mnt/sysimage bash-4.2#cd /boot bash-4.2#ls
6)、执行mount命令,将光驱重新挂载至/mnt目录,然后切换至系统软件包所在目录,列出kernel相关软件包。
bash-4.2#mount /dev/cdrom /mnt/7)、执行rpm命令强制安装kernel软件包
rpm -ivh kernel-3.10.0-693.e17.x86_64.rpm --force --nodeps
8)、kernel软件包重装完成后,查看/boot目录下是否有新的initramfs文件生成。
9)、重启主机,操作系统恢复正常。bash-4.2#exit bash-4.2#init 6
注意:不要忘了再把bios启动顺序再调整回去,优先加载硬盘。
参考:http://www.360doc.com/content/22/1020/09/79641151_1052432906.shtml
参考:https://www.cnblogs.com/Julien1021/p/16341423.html
参考:https://blog.csdn.net/weixin_43279032/article/details/120322514