能进 grub> 界面说明 grub 主体已加载且模块基本可用,仅因找不到或无法读取 /boot/grub/grub.cfg 而进入命令行;此时支持 tab 补全、help 和 cat 等命令,与功能受限的 grub rescue> 有本质区别,需先用 ls 和 tab 定位含 vmlinuz- 的 /boot 分区,再通过 set root、linux、initrd、boot 四步手动启动,进系统后须立即挂载 /boot/efi(uefi)并执行 grub-install 与 update-grub(或 grub2-mkconfig)修复配置。

能进 grub> 界面,说明 GRUB 主体已加载、模块基本可用,只是找不到或读不了 /boot/grub/grub.cfg。这种情况不用重装系统,90% 以上能手动引导进系统,关键在快速定位内核和根分区。
怎么判断你面对的是 grub> 而不是 grub rescue>
看提示符和屏幕文字:grub> 下能看到完整版本号(如 GNU GRUB version 2.12),底部有 minimal bash-like line editing is supported;而 grub rescue> 只有极简提示,ls 都可能报错 unknown filesystem。前者支持 TAB 补全、help 查命令、cat 看文件,后者连 ls (hd0,gpt1)/ 都可能失败。别跳步骤——错判成 grub rescue> 去硬加 insmod,反而浪费时间。
用 ls 和 TAB 快速定位 /boot 分区
先执行 ls 列出所有磁盘分区,比如输出 (hd0) (hd0,gpt1) (hd0,gpt2) (hd1) …。然后逐个试:
-
ls (hd0,gpt1)/boot/—— 如果返回一堆文件(含vmlinuz-*、initrd.img-*),这就是你的/boot所在分区 -
ls (hd0,gpt2)/—— 如果直接看到bin/ dev/ etc/ home/等目录,说明这是根分区(/boot未独立分区) - 遇到
error: unknown filesystem就换下一个分区,不用纠结原因 - UEFI 系统注意:
/boot/efi是 EFI 系统分区,但内核文件不在那儿,别停在这儿
vmlinuz- 的路径,哪怕它在 (hd0,gpt2)/boot/ 或直接在 (hd0,gpt2)/ 下。
手动加载内核启动的三行核心命令
确认分区后(假设是 (hd0,gpt2)),按顺序敲:
-
set root=(hd0,gpt2)—— 这里设的是“GRUB 当前要读取文件的分区”,不是 Linux 的根文件系统;如果/boot独立在(hd0,gpt1),就设root=(hd0,gpt1) -
linux /boot/vmlinuz-<strong>Tab</strong> root=UUID=xxxx-xxxx ro—— 按TAB补全内核名;root=后填实际根分区 UUID(不是/boot分区!),可在 Live 环境用sudo blkid查,或先试root=/dev/sda2看能否起来 -
initrd /boot/initrd.img-<strong>Tab</strong>—— 补全与内核版本匹配的 initrd 文件,名字必须严格对应 -
boot—— 执行启动
root= 写错分区导致卡在 “Waiting for root device”;initrd 用错版本导致 panic;路径写成 /vmlinuz(漏了 /boot/)。
进系统后必须立刻做的两件事
成功登录后别松劲,不修复下次还会掉进来:
- 先确认
/boot是否挂载正常:mount | grep boot。如果是 UEFI 系统且/boot/efi未挂载,得补:sudo mkdir -p /boot/efi && sudo mount /dev/sda1 /boot/efi(sda1换成你的真实 ESP 分区) - 立刻重装并更新配置:
– BIOS 系统:sudo grub-install /dev/sda+sudo update-grub
– UEFI 系统:sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu+sudo update-grub
注意:update-grub在 RHEL/CentOS 上叫grub2-mkconfig -o /boot/grub2/grub.cfg
/boot/efi 没挂上,grub-install 实际没写进 EFI 目录。











