如何修复GRUB引导并重置Linux系统密码?

来源:HTML教程作者:越南程序员头衔:程序员
导读:本期聚焦于越南程序员创作的《如何修复GRUB引导并重置Linux系统密码?》,敬请观看详情。系统启动时卡在 grub rescue 提示符,或者忘记了 root 密码无法登录,这类问题通常不需要重装系统。grub rescue 只说明引导加载程序无法定位配置文件或核心分区,而密码丢失可以通过进入单用户模式或使用 Live 系统挂载根分区来处理。本文从实际修复流程出发,先介绍如何借助安装介质进入救援环境,再演示 BIOS 与 UEFI 两种固件模式下重新安装 GRUB 的命令差异,最后给出用 chroot 配合 passwd 命令重置 root 密码的完整步骤。整个过程会涉及根分区识别、/boot 挂载、grub-install 参数选择以及 SELinux 上下文恢复等关键细节。掌握这些操作后,即使系统分区表发生变化或引导记录被 Windows 更新覆盖,也能在较短时间内恢复启动并重新获得管理权限。

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

如何修复GRUB引导并重置Linux系统密码?

一、通过 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_TIMEOUTGRUB_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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。