一、前言
现象:业务软件无法访问,dell服务器报错No boot found 找不到启动项
原因:服务器用Legary(bios)模式才能在启动项中找到raid,但是centos操作系统是基于efi安装的所以在legary模式下进入内核会报错linuxefi error
下图为UEFI模式下F11的启动项,可以看到没有识别到Raid磁盘的启动项

二、调试过程
1、先检查硬件状态
开机如果黑屏不显示大概率是内存问题需要重新插拔内存条在试试。
如果能看到自检按F2进入BIOS看下Raid 状态是否正常,有时raid阵列丢失会导致机器找不到磁盘自然也就进不去系统。如果发现阵列卡识别到了并且阵列都是Ready那就说明硬盘没坏,阵列OK
如果发现阵列卡无法识别,换槽位重新插拔,如果发现阵列卡识别到了但raid阵列没了参考下列文章进行重新导入
2、检查系统是否还在
准备一个Centos系统启动盘(U盘或光盘)然后进入救援模式
选择Troubleshooting

选择Rescue a CentOS Linux system


(1)开启网络服务和SSH服务,并配置IP
使用nmtui工具去配置IP,然后去激活网卡




按ESC回到这里,然后选择Activate a connection 激活一个连接

在网口信息上回车即可,前面带*表示已经连接。
(2)配置和启用SSH
bash
cp -p /etc/sshd/sshd_config.anaconda /etc/sshd/sshd_config # 拷贝SSH配置文件
systemctl start sshd #启动SSH服务
这样就可以用ssh远程连接救援模式了

lsblk先确认原来的磁盘中系统是否还在,如果能看到分区则标识系统没丢
通过chroot命令切换到老系统中进行操作 ,光盘救援模式的切换方法:
bash
chroot /mnt/sysimage
在本次事件中,lsblk 和 blkid 的结果中都仅看到了/boot分区无/boot/efi 并且/etc/fstab 中也无相应的挂载信息但是/boot/efi/EFI/centos/目录存在且下面还包含了相关文件如grub.cfg
这就很疑惑了,如果是UEFI安装为什么会没有相应的分区和挂载信息,如果是Legary安装的为什么会有/boot/efi/EFI/centos目录存在,但既然服务器现在只能使用Legary(bios)模式找到raid,那么只能让系统内核也支持Legary
操作方法:
确保现在要操作的环境是chroot后的
1、强制安装 Legacy GRUB
这句命令的意思是:无论我现在的环境是什么,我要指定安装传统的 BIOS/MBR 引导程序,这里的sda要写成你的老系统磁盘标识
bash
grub2-install --target=i386-pc /dev/sda
2、重新生成配置文件
bash
grub2-mkconfig -o /boot/grub2/grub.cfg
3、检查/boot/grub2/grub.cfg 文件,如果发现对应内核还是linuxefi 那么就手动替换一波
先拷贝原来的文件,然后直接将对应的字段进行替换
bash
cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
sed -i 's/linuxefi/linux16/g' /boot/grub2/grub.cfg
sed -i 's/initrdefi/initrd16/g' /boot/grub2/grub.cfg
4、成功执行后退出chroot然后重启机器试试
bash
exit
reboot
最终成功进入系统
三、后续
事发突然待同事阿伯茨到达现场已是21点多,最终熬到半夜1点,但看到业务软件跑起来让人兴奋不已,美美收拾便下班了。结果第二天早晨眼睛还没睁开就被消息炸醒说是系统又进不去了....、

毕竟是一个常年在机房但没用的机器,排查到是CMOS电池电量不足并且内存条氧化层也严重,这就导致了服务器改好的BIOS配置在下电后会被重置又变成了UEFI。而内存条接触不良有时会被系统识别为没有内存报错。解决方法就是卸下内存条擦拭金手指然后放回,因现场需验收演示故CMOS电池也无法立即更换,于是便通过留下了操作文档结束了此事
下图为无法识别内存的报错图(某些机器会直接黑屏,只能听到风扇声但不显示,如果显示器确认接好并且信号源正确的话,可能就是内存导致)

四、总结
本文介绍了强制将EFI安装的Centos7系统改为Legary启动的方法,对这块认识不深,如果大佬们有处理方法欢迎分享,致谢