新闻动态
当前位置:首页 > 新闻动态
常见问题10:解决GRUB界面启动问题,快速开启debug模式指南
2025-06-10

本期为“服务器操作系统常见问题解析”系列报道第十期,介绍在系统重启时,若遇到grub无法启动的问题,应该怎样进行调试。

问题描述

GRUB(Grand Unified Bootloader)作为Linux系统的核心引导加载程序,是连接硬件固件与操作系统的关键桥梁。其主要作用包括:

在计算机启动时检测操作系统并生成引导菜单;

加载Linux内核(vmlinuz)及初始化内存文件系统(initramfs);

向内核传递关键启动参数(如根文件系统路径);

提供故障恢复机制(如单用户模式或救援模式);

在系统的启动流程中,GRUB通过BIOS/UEFI加载的初始启动文件(grubx64.efi或shimx64.efi),解析配置文件(grub.cfg),定位内核文件并解压至内存运行,最终将控制权移交内核,完成从硬件初始化到系统服务启动的平滑过渡。作为系统引导的核心环节,GRUB的稳定运行是确保操作系统顺利加载与初始化的基石。

系统启动的时候,大家有没有遇到过下面的场景:

a. 通过BIOS的F11选项,选择启动设备后,没有出现预期的grub界面,出现了黑屏或屏幕左上角一直闪光标的现象;

b. 启动到了grub界面,但没有出现预期的倒计时,或倒计时进行到一半时卡住,又或者倒计时结束了,却没有启动进入grub中所选择的内核,仍然停留在grub界面;

c. 从grub界面中开始启动内核了,但没有预期的内核启动日志打印,出现了黑屏或左上角一直闪光标的现象;

这些场景中,系统内核还没开始启动,没有任何的系统日志打印内容,应该怎样定位这样的问题呢?grub有没有debug模式,或者怎样对grub进行调试呢?

调试步骤

一.在grub界面增加调试参数

上述场景中,场景b是最常见的,已经启动进入grub界面了,在grub界面通常可以进行下面的调试动作:

(1)在grub参数中增加打印信息

在grub界面中,编辑grub参数,可以增加echo打印信息:

1.jpg

按“e”编辑grub参数:

2.jpg

可以在已有的命令行中,逐行增加打印信息,按组合键Ctrl-x执行启动,根据打印信息,确定在执行哪行命令时出现问题:

1.png

(2)手动执行grub引导命令

通过按组合键“Ctrl+c”进入grub命令界面,手动输入需要执行的命令,删除所有不必要的参数,观察在执行什么命令时出现问题:

3.jpg

在grub命令行界面中,可以执行的命令列表如下,可以根据实际情况,适当的使用这些命令查看或设置更多的调试信息:

2.png

3)修复引导文件grub.cfg

系统在使用过程中,可能由于各种原因导致grub.cfg文件损坏,导致系统在启动时停在grub界面:

4.jpg

通常可以尝试使用下面的方法,尝试手动引导进入系统:

4.png

进入系统后,重新生成一份grub.cfg文件,即可完成修复:

#grub2-mkconfig–o/boot/efi/EFI/kos/grub.cfg

二、手动开启grub调试模式

对于场景c,从grub界面开始引导所选择的内核时出现的问题,可以在grub界面中,设置开启调试模式后再启动,会打印更多的日志。

如下,在grub界面中,按“c”进入grub的命令行界面:

5.png

在命令行界面中,输入“set debug=all”开启调试模式:

6.png

按“Esc”键返回grub界面,正常启动内核,会在启动过程中,逐页打印详细的debug日志信息,需要手动翻页查看:

7.png

由于debug日志过多,手动翻页很麻烦,可以在开启调试模式时,再设置一个禁用分页的参数“set pager=0”,并在grub参数中,添加串口参数,将启动日志打印到串口输出,以便于观察:

8.png

三、修改grub配置文件

对于场景a,从bios开始加载bootloader开始就出现问题,grub还未加载出命令行界面的情况,需要预先配置,或进入救援模式,修改grub的配置,开启更详细的debug信息,并配置串口输出,将详细的日志打印到串口输出查看。

具体配置方法如下:

(1)配置开启串口

#vim/etc/default/grub

删除GRUB_CMDLINE_LINUX行中的rhgb quiet

增加console=tty0 console=ttyS0,115200

10.png

(2)修改00_header配置

#vim/etc/grub.d/00_header

将set pager=1修改为set pager=0

11.png

(3)增加01_grub_debug文件开启debug

#vim/etc/grub.d/01_grub_debug
#!/bin/sh-e
echo"setdebug=all

12.png

#chmod755/etc/grub.d/01_grub_debug

(4)重新生成grub.cfg

#grub2-mkconfig-o/boot/efi/EFI/kos/grub.cfg

13.png

完成后,在下一次系统启动时,grub界面的前后,将出现如下更多的debug日志:

1(1).png

5.jpg

15.png

16.png

加载出grub界面:

6.jpg

开始加载所选择的内核:

17.png

18.png

开始启动内核:

新年.png

调试总结

作为系统引导的核心组件,GRUB的正常运行直接关系到操作系统能否成功启动。本文通过分析GRUB界面加载的前、中、后三个场景,对于出现的黑屏、引导卡光标、日志缺失等典型故障场景,系统性地提出了GRUB调试方法论:

a. 对于可以进入GRUB操作界面的场景,可通过追加调试参数、手动执行引导命令或修复配置文件快速定位问题;

b. 对于离开GRUB界面后,开始加载内核阶段的异常,需启用debug=all并配合pager=0禁用分页,以获取完整的GRUB调试日志;

c. 而对于GRUB界面加载前的故障,则需预先配置串口输出及全局调试参数,通过日志回溯分析根本原因。

该调试方案涉及了从固件层面到内核启动的整个引导流程,通过整合基础命令行操作与配置参数的精细化配合,能够高效地应对并解决大多数与GRUB引导相关的技术问题。

同时,在运维实践中,建议定期校验grub.cfg完整性并备份关键配置,以提升系统启动可靠性。

关注我们

Copyright © 2024 浪潮信息 鲁ICP备13028953号-12

售前咨询

售后服务

回到顶部

回到顶部

售前咨询
售后服务