操作系统版本:
CentOS release 6.9 (Final)
Kernel版本:
2.6.32-696.el6.x86_64
问题现象:
系统启动显示“grub>”界面,无法进入系统,如下图:
修复之前,先了解下什么是GRUB?
GNU GRUB(GRand Unified Bootloader简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。
那么在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文件拷贝过来使用;
问题延伸
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问题修复正常;
感谢各位童鞋阅读,如果能够对大家有所帮助,欢迎点赞转发评论。
关注我们的公众号:云服务飞行团,更多精彩内容会持续放送!