开发者社区 > 博文 > 记一次grub丢失导致CentOS系统无法启动的修复过程
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

记一次grub丢失导致CentOS系统无法启动的修复过程

  • 京东云技术交付部
  • 2021-01-11
  • IP归属:未知
  • 193520浏览
前提条件

操作系统版本:

CentOS release 6.9 (Final)

Kernel版本:

2.6.32-696.el6.x86_64

问题现象

系统启动显示“grub>”界面,无法进入系统,如下图:


修复之前,先了解下什么是GRUB?

GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。


PART  01

那么在CentOS6系统启动过程中,GRUB是在哪个环节加载的?

先通过一张图来简单了解下整个系统启动的流程,整个过程基本可以分为POST-->BIOS-->MBR-->GRUB-->Kernel-->Init-->Runlevel。


由此图可以看出,CentOS6系统里GRUB加载是在系统读取MBR后执行的,之后再通过GRUB加载Kernel信息;

因此当/boot/grub/grub.conf配置文件丢失,或者关键配置出现错误,Linux主机启动后可能只会出现grub>的提示符,无法完成进一步的系统启动过程。


修复方法如下:

第一步:运行root(hd0,0) (这是/boot所在的分区);


第二步:执行kernel /boot/vmlinuz-2.6.32-696.e16.x86_64 ro root=/dev/vda1 (来指定linux内核,可以按下TAB键即可自动补全kernel的全称) 指定内核文件所在的位置,内核加载时权限为只读ro,并通过 root= 指定根分区设备文件的位置;


第三步:执行initrd /initrd-2.6.32-696.e16.x86_64.img (用来指定initrd文件,同样可以通过TAB键自动补全全称);


第四步:执行boot命令重启系统


系统进入启动状态,可以正常启动了;


进入系统后,检查下/bin/grub/grub.conf文件的配置;本文进入grub的原因检查是grub.conf文件被误删除,开机加载不到grub.conf配置信息,导致启动进入grub>页面;可以找一台相同系统版本的正常机器,参照正常的配置文件重新创建下,如果正常的机器内核版本也是一样的,可以直接将grub.conf文件拷贝过来使用;



PART  02

问题延伸

CentOS7系统启动进入GRUB界面修复方法;

我们开一台CentOS7系统的云主机,登陆云主机发现/boot/grub/目录下并没有grub.conf文件;


CentOS7和CentOS6系统GRUB配置上是不同的,CentOS7系统加载的是GRUB2,而不是GRUB。GRUB2的配置文件是/boot/grub2/grub.cfg,并且CentOS7系统可以通过grub2-mkconfig -o /boot/grub2/grub.cfg 命令重新生成GRUB2配置文件,下面我们手动删除下/boot/grub2/grub.cfg文件,来看下CentOS7系统进入grub>界面的修复方法;



测试的机器系统信息如下:

操作系统版本:

CentOS Linux release 7.4.1708 (Core)

Kernel版本:

3.10.0-693.el7.x86_64


删除grub.cfg配置文件后,重启系统进入grub>界面:


第一步:显示用ls命令查看下磁盘分区信息,下图是测试机器的磁盘分区信息:


第二步:京东云的机器/boot是没有单独分区的,使用ls (hd0,X)/boot/grub2命令查找下boot分区(X为通过ls查看到的磁盘分区信息),如下图:


通过命令查找到/boot分区是在(hd0,gpt3)上;

第三步:通过找到的boot分区手动选择kernel启动下系统,步骤如下:(insmod xfs用来加载下xfs系统,否则系统识别不到xfs的分区;linux16和initrd16命令后的版本信息可以通过TAB键补全,root根分区设备文件的位置需要写/dev/vda3)


第四步:执行boot命令重启系统


系统进入启动状态,可以正常启动了;


我们登陆查看,grub.cfg目前还是缺失的;


通过grub2-mkconfig -o /boot/grub2/grub.cfg 命令重新生成GRUB2配置文件;


再次查看grub.cfg文件已经重新创建,系统启动进入GRUB问题修复正常;



感谢各位童鞋阅读,如果能够对大家有所帮助,欢迎点赞转发评论。

关注我们的公众号:云服务飞行团,更多精彩内容会持续放送!


共0条评论