当 Linux 主机开机后没有出现熟悉的启动菜单,而是停在 grub rescue> 提示符时,说明 GRUB 第二阶段没有找到包含 grub.cfg 的引导分区。这种情况常见于分区调整、双系统更新或磁盘损坏之后。修复过程可以分成两个目标:先让引导加载程序重新指向正确的根分区和配置,然后再处理用户密码或账户锁定问题。下面从救援模式开始操作,整个过程建议准备一个与当前系统相同或相近版本的 Live USB 启动盘。

一、通过 Live 介质进入救援环境
准备好 Live USB 后,从 U 盘启动并选择试用模式进入桌面环境。打开终端,第一步不是急着执行修复命令,而是确认当前磁盘分区结构。很多系统会把根分区、引导分区和 EFI 分区分开存放,如果直接把 GRUB 安装到错误的位置,即使命令执行成功,重启后依然无法进入系统。使用 lsblk -f 可以同时查看分区容量、文件系统类型和 UUID,配合 fdisk -l 能够判断每个分区的实际用途。
lsblk -f sudo fdisk -l /dev/sda
假设根分区是 /dev/sda2,引导分区是 /dev/sda1,可以把根分区挂载到 /mnt,再把引导分区挂载到 /mnt/boot。如果使用 UEFI 启动,通常还需要把 EFI 系统分区挂载到 /mnt/boot/efi。挂载完成后,通过 mount --bind 将 /dev、/proc、/sys 这三个虚拟文件系统绑定到目标目录中,这样执行 chroot /mnt 后,修复环境才能正确识别设备状态和内核参数。
sudo mount /dev/sda2 /mnt sudo mount /dev/sda1 /mnt/boot sudo mount /dev/sda1 /mnt/boot/efi sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys sudo chroot /mnt
如果根分区位于 LVM 逻辑卷上,挂载前需要先执行 vgchange -ay 激活卷组。如果使用加密分区,则需要通过 cryptsetup open 打开映射设备。进入 chroot 环境后,终端所处的位置已经相当于原系统的根目录,后续无论是重新生成 GRUB 配置,还是修改用户密码,都可以像在本机系统中一样执行命令。
二、重新安装 GRUB 引导
重新安装 GRUB 之前必须区分固件类型。传统 BIOS 使用 MBR 分区表,GRUB 需要安装到磁盘的第一扇区,目标平台为 i386-pc,安装目标是整块磁盘,例如 /dev/sda。UEFI 使用 GPT 分区表,GRUB 需要安装到 EFI 系统分区,目标平台为 x86_64-efi,并通过 --efi-directory 指定挂载点。两者如果混用,最常见的结果是提示找不到文件或重启后直接进入固件设置界面。
# BIOS/MBR 方式 grub-install --target=i386-pc /dev/sda update-grub # UEFI/GPT 方式 grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=GRUB update-grub
在 Debian、Ubuntu 以及多数衍生系统中,update-grub 会自动扫描已安装内核并重新生成 grub.cfg。在 RHEL、CentOS、Fedora 等发行版中,对应的命令通常是 grub2-mkconfig -o /boot/grub2/grub.cfg。如果之前的配置文件中包含自定义内核参数,建议先查看 /etc/default/grub,确认 GRUB_TIMEOUT、GRUB_CMDLINE_LINUX 等参数是否符合预期,再执行生成命令。
grub2-mkconfig -o /boot/grub2/grub.cfg
如果系统在更新内核或调整分区后出现 grub rescue 提示符,重新安装可能仍不够。此时还需要检查 /etc/fstab 中的 UUID 是否与当前分区一致。使用 blkid 命令可以获取分区的真实 UUID,若发现不匹配,应修改 /etc/fstab 后再重新生成 GRUB 配置。否则系统可能虽然能显示启动菜单,但根分区挂载失败,最终仍会进入紧急模式。
三、重置 root 密码
如果无法进入系统,但可以操作 GRUB 启动菜单,最直接的方法是在启动项上按 e 进入编辑模式,找到以 linux 开头的内核行,在行末添加 init=/bin/bash,然后按 Ctrl+X 启动。系统会直接进入一个最小化的 root shell,不过此时根分区通常以只读方式挂载,需要先将其重新挂载为读写模式,再执行 passwd 命令修改密码。
mount -o remount,rw / passwd root
对于启用了 SELinux 的系统,如果直接修改密码文件,重启后可能因为安全上下文未更新而出现登录异常。为了避免这种情况,可以使用 touch /.autorelabel 创建一个标记文件,让系统在下次启动时自动重新标记文件系统安全上下文。当然,如果能够通过 Live 介质进入 chroot 环境,则不需要额外处理 SELinux,只要在 chroot 后运行 passwd root 即可。
touch /.autorelabel
通过 chroot 环境重置密码时,还可以同时为其他普通用户恢复访问权限。例如用户名为 alice,可以连续执行 passwd alice 设置新密码。如果某账户被锁定,可以使用 passwd -u alice 解锁。完成后退出 chroot,卸载挂载的分区并重启系统,使用新密码登录即可验证结果。需要特别注意的是,如果 /etc/passwd 中 root 用户的 shell 被设置为 /sbin/nologin,即使密码正确也无法直接以 root 身份登录,这种情况下应先通过普通用户登录,再用 sudo 提权处理。
四、预防措施与常见排错
修复完成后,建议立即备份 /boot/grub/grub.cfg 和 /etc/default/grub 这两个关键文件。尤其是多系统共存或经常调整磁盘分区的环境,保留一份可用配置可以在下一次故障时节省大量排查时间。可以使用 cp 命令将文件备份到独立分区或外部存储中,同时记录当前根分区和 EFI 分区的 UUID。
sudo blkid /dev/sda2 sudo cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak
在 grub rescue 提示符下,可以使用 ls 命令查看磁盘和分区,再用 set 命令临时指定根设备与 prefix 路径,然后加载 normal 模块启动菜单。虽然这不是永久修复,但在没有 Live 介质的情况下可以快速进入系统,进而执行更完整的修复操作。下面的命令假设 GRUB 文件位于第一块磁盘的第二个分区。
ls set root=(hd0,msdos2) set prefix=(hd0,msdos2)/boot/grub insmod normal normal
长期来看,最稳妥的做法是把 GRUB 菜单加上密码保护,避免未授权人员通过编辑启动参数进入单用户模式绕过系统登录。同时,每次更新内核或调整磁盘分区后,都应当重新生成 GRUB 配置并测试启动是否正常。只要理解了 GRUB 加载过程中的根分区、前缀路径和配置生成这三条主线,绝大多数引导故障都能在短时间内恢复,而密码重置也会变成一次常规维护操作,而非重装系统的理由。
GRUB修复Linux密码重置grub rescue修改时间:2026-08-19 19:51:34