故障现象
linux主机OS无法正常启动,通过vnc连接后显示以下报错
error: file'/vmlinuz-xxxx' not found
you need to load the kernel first

故障原因
系统启动时通过配置文件grub.cfg查找内核相关文件并加载
若启动系统无法找到OS启动的内核文件,会出现上述错误
常见故障场景
恢复方式
手动指定内核路径启动系统,重新生成启动文件
注:如果是误删了内核文件,无法通过本方式恢复
以centos7.6为例,不同的linux系统恢复思路差不多
进入grub命令行


也有可能系统起不来时,直接在grub命令行,继续后续步骤即可
查找系统盘
执行ls,查看当前硬盘列表

从第一个盘符(hd0),至最后一个(hd1),依次通过以下步骤(1-3)查找内核所在盘
1> 执行set root=(hdx,xx),其中x是代指,更改为实际盘符,如图中的(hd0)
2> 执行ls /,查看输出中是否有内核相关文件(如vmlixxx、initraxxxx的文件)。如果没有,重复步骤1、2
3> 正确的磁盘应当回显如下内容。如果全部磁盘都无正常回显,本方式不再适用

如图,推出系统盘应在(hd0,msdos1)
手动设置内核路径
- 首先,找到一台正常的centos7.6机器,执行以下命令。记录红框信息
# 如果是UEFI启动
cat /boot/efi/EFI/centos/grub.cfg | grep linux
# 如果是BIOS启动
cat /boot/grub2/grub.cfg | grep linux

注:红框内的root=xxx,若写的是uuid。需要反向查询该主机的/目录挂载的磁盘路径并记录(通过lsblk -f找到uuid对应目录,root=<目录>)
# 如果是UEFI启动
cat /boot/efi/EFI/centos/grub.cfg | grep initrd
# 如果是BIOS启动
cat /boot/grub2/grub.cfg | grep initrd

# 按实际情况更改命令,不要照搬
# 示例为bios启动,如果是uefi,命令为linuxefi、initrdefi
linux16 /vmlinuz-3.10.0-957.el7.x86_64 root=/dev/mapper/centos-root
initrd16 /initramfs-3.10.0-957.el7.x86_64.img


启动主机
- 在grub命令行执行boot启动主机,若配置无误,可以正常加载系统

生成启动文件
正常开机后,执行以下命令,避免故障复现
# 如果是UEFI启动
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
# 如果是BIOS启动
grub2-mkconfig -o /boot/grub2/grub.cfg
