我到现在都记得第一次在 grub prompt 里看到那行 grub> 时的心情:明明什么都没干,早上开个机,结果连系统登录界面都没见着,直接被丢进一个黑底白字的命令行。身边不少人遇到这种场面第一反应是“系统坏了,重装吧”,但老实说,绝大多数情况根本不需要重装。你面前这个 grub> 或者 grub rescue>,只是引导加载程序没找到配置文件,它没死,只是在等你手动把它指向正确的位置。这篇文章我就带你把这套“从 grub prompt 启动 Ubuntu”的完整逻辑和实操手法捋一遍,从最基础的命令原理到特殊分区、加密磁盘、LVM、修复加固都讲到,让以后再碰到这个界面,你敢直接上手,而不是到处找 U 盘。
1. 先搞明白:grub prompt 到底是什么状态
1.1 两种提示符,两种严重程度
很多人一看到“grub”就慌,其实第一步是先分辨你面前是哪种提示符。它们长得像,但处境完全不同:
grub>:这叫正常功能的命令行模式,能用的命令很全。这种状态通常是 GRUB 核心加载成功了,但因为它没找到grub.cfg配置文件,或者找到了但解析失败,于是原地等待你输入命令。好消息是,你的引导链其实已经走完一大半了。grub rescue>:这就严重一档。它表示 GRUB 连自己的核心模块都没能正常加载,normal.mod、linux.mod这些模块都还没进内存,所以你能用的命令被砍到只剩下ls、set、unset、insmod这几个。得先把模块路径指对,把 normal 模块加载起来,才能继续往下走。
这两种状态对应的典型原因也略有区别。grub> 多半是 /boot/grub/grub.cfg 被误删、误改名,或者配置里有语法错误;grub rescue> 则更可能是分区结构变了、GRUB 安装位置失效,或者 BIOS/UEFI 在启动时把硬盘编号搞乱了。
1.2 为什么会出现这种局面
我帮你把常见的翻车现场归一下类,方便你对号入座:
- 双系统重装 Windows:Windows 安装程序会重写 EFI 引导项,把 GRUB 的启动项顶掉,或者直接把 MBR 区域覆盖了。这是最常见的场景。
- 调整分区 / 格式化分区:之前 Ubuntu 的根分区是
/dev/sda5,你为了腾空间把分区删了重建,UUID 全变了,grub.cfg里记录的根分区 UUID 指向了不存在的分区,GRUB 找不到内核,只能掉进命令行。 - 移动硬盘 / 虚拟机设备顺序变化:同一块移动硬盘,在这台机器上是
hd0,插到另一台机器上变成hd1了;VMware 里加了块新虚拟磁盘,原来的 Ubuntu 系统盘编号也变了。GRUB 对设备编号很敏感,一旦顺序错乱就会迷路。 - /boot 被误操作:有人为了“清理空间”删了
/boot下的老内核,结果手一抖把当前内核也删了;也有人改/etc/fstab改错了根挂载点。
这种局面的本质就一句话:GRUB 自己也不知道系统在哪了,它把问题抛给了你。你只需要做一件事:用命令行告诉它“根分区在哪、内核文件在哪、initrd 在哪”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 动手前先定位:这几个命令就是你的眼睛和手
2.1 GRUB 命令行基础命令速查
在 GRUB 的命令行里,你能用的工具很有限,但足够完成定位和启动。先记下这几条核心命令:
| 命令 | 作用 | 典型例子 |
|---|---|---|
ls |
列出所有可见设备/分区 | ls 显示 (hd0) (hd0,gpt1) ... |
set |
查看/设置环境变量 | set root=(hd0,gpt2) |
cat |
读取文件内容 | cat (hd0,gpt2)/etc/os-release |
insmod |
加载模块 | insmod normal、insmod ext2 |
search |
按特征自动查找分区 | search --no-floppy --set=root --fs-uuid 1234... |
linux |
指定内核和启动参数 | linux /boot/vmlinuz-xxx root=/dev/sda2 ro |
initrd |
指定 initrd 镜像 | initrd /boot/initrd.img-xxx |
boot |
正式启动 | boot |
这里有个容易让新手懵的地方——分区的命名规则。(hd0) 是主机上的第一块磁盘,(hd0,gpt1) 表示这块磁盘上 GPT 分区表的第一个分区;如果是传统的 MBR 分区表,显示会是 (hd0,msdos1)。中间的逗号含义是“磁盘上的第几个分区”,这个编号在 GRUB 里是从 1 开始的,注意和系统内的 /dev/sda1 一一对应,但不一定编号相同,得实际确认。
2.2 用 ls 和 cat 找到正确的根分区
在命令行敲下 ls,屏幕上会列出 GRUB 能识别的所
