服务器引导异常,Grub报错: error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.
- 1. 故障现象
- 2. 解决思路
- 3. 故障分析
- 4. 案件回溯
- 5. 解决问题
1. 故障现象
有一台服务器业务报无法连接.
尝试用Ping命令发现无法ping通.
通过控制台查看发现有以下报错:
error: ../../grub-core/fs/fshelp.c:258:file xxxx.img not found.
2. 解决思路
其实到这里问题应该已经可以解决了.
无非就是因某些原因img文件被删除.
现在要做的无非2个事情
- 进入系统
- 确认除了这个img之外还有哪些文件被删了.
- 将被删除的那些文件从别处复制过来.
3. 故障分析
幸运的是,这个服务器有多个kernel.那么就尝试从其他kernel进入.
(如果是唯一的kernel那么也可以使用救援盘进入,但这个是一台云主机,可能会需要通过另外个云主机挂载这个启动镜像,再复制文件.然后根据快照再恢复会比较麻烦,但不复杂)
运行history查看是否是人为的删除,及分析为什么要做这个操作.
这次运气又站在我们这边.
可以明显的看到是人为删除了2个img文件.
为什么说是运气好:
-
非病毒或入侵造成的.
-
删的是文件而不是/*
-
非恶意,根据他的上下文分析,是由于安装配置kdump出现了某些错误,尝试解决那些错误的时候可能搜了某些错误的文档而去删除那2个文件.
-
看下他kdump报了哪些错误
dracut module 'network-legacy' cannot be found or installed
4. 案件回溯
看到这里基本整个事情的来龙去脉已经分析出来了.
我们来还原一下现场:
- 第一个错误也是最根本的错误就是操作人员修改完/etc/default/grub后,在没有确认服务器是否是efi引导的情况下执行了grub2-mkconfig.误以为已经将crashkernel=256M参数正确修改了.其实文件生成,但服务器并不会从该文件进行引导.
- 重启后,kdump发现crashkernel没有生效,于是出现了以下的报错.
dracut module 'network-legacy' cannot be found or installed.
Failed to start Crash recovery kernel arming.
dracut module 'rngd' will not be installed, because command 'rngd' could not be found!
dracut module 'network-legacy' will not be installed, because command 'dhclient' could not be found!
dracut module 'ifcfg' will not be installed, because it's in the list to be omitted!
dracut module 'plymouth' will not be installed, because it's in the list to be omitted!
dracut module 'btrfs' will not be installed, because command 'btrfs' could not be found!
racut module 'dmraid' will not be installed, because command 'dmraid' could not be found!
dracut module 'cifs' will not be installed, because command 'mount.cifs' could not be found!
dracut module 'resume' will not be installed, because it's in the list to be omitted!
dracut module 'earlykdump' will not be installed, because it's in the list to be omitted!
- 当发现kdump出现大量dracut模块的报错时,犯了第二个错误.开始请求ai的帮助或者通过网络搜索文档尝试解决此问题.于是history里出现了大量apt-get install, yum install明显是已经方寸大乱开始不经过大脑的复制粘贴命令.
- 当发现这些命令都无济于事的时候第三个错误出现了,rm -f kernel.img
- 最后感觉任然无济于事时第四个错误出现了,reboot.
此时由于引导的img被删除,服务器就无非完成引导程序了.
5. 解决问题
- 从另外一台服务器上将删除的2个文件给恢复过来.
- 执行以下命令,生效正确的grub引导
grub2-mkconfig -o /boot/grub2/grub.cfg
- 重启服务器服务器
- 确认crashkernel参数已经在/boot/grub2/grub.cfg中
- 查看kdump.service的状态
至此,整个故障已经解决.
当出现意外时一定不要乱了方寸,虽然现在网络搜索和AI都很方便,但由于环境或者其他原因不要盲目的复制粘贴命令.很有可能会把简单的问题越搞越大.