服务器开机卡住与单用户模式救援
发布时间:2026-01-20 14:31       
更新时间:2026-01-21 05:52
服务器开机卡在紧急模式,SSH 连不上,控制台滚出一串 FAILED,多数时候是 /etc/fstab 写错、磁盘没挂上,或者 root 密码丢失没人交接。系统没起完,常规登录进不去,但 GRUB(GNU GRUB,Linux 常用的引导程序)留了一条救援通道:单用户模式。判断卡在哪一步有个简单办法:看屏幕最后一行输出,emergency 字样后面通常直接写着出错的挂载点或服务。下面以 CentOS 7/8 和 Ubuntu 20.04 为例走一遍。
一、进 GRUB 编辑启动项
重启机器,在内核选择的倒计时界面按 e 键进入编辑。找到以 linux 或 linux16 开头的那一行,把光标移到行尾。
- CentOS 系:行尾追加 rd.break,按 Ctrl+X 启动,会进入 initramfs 的紧急环境,原系统根分区挂在 /sysroot 下且默认只读。
- Ubuntu 系:把该行的 ro 改成 rw,行尾追加 init=/bin/bash,Ctrl+X 后直接拿到一个 root shell。
注意:这里的修改只对本次启动生效,重启后还原,所以放心大胆改。
二、改 root 密码
CentOS 在 rd.break 环境里先切根再改:
```
mount -o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
exit
exit
```
touch /.autorelabel 是让 SELinux 重打标签,漏了这步 CentOS 可能起不来。Ubuntu 用 init=/bin/bash 进来后文件系统已是可写,直接 passwd root,然后 reboot -f 强制重启即可。
三、修 fstab
如果是挂载配置导致卡死,进来后先看现有挂载再改配置:
```
mount -o remount,rw /
df -h
blkid
vi /etc/fstab
```
把可疑行行首加 # 注释掉,存盘后执行 mount -a 验证,没有任何报错输出才算过。判断哪行可疑的办法:blkid 列出各分区的真实 UUID,与 fstab 逐行核对,写错一个字符开机就会卡住。网络存储或云盘的挂载行,选项里补上 _netdev 和 nofail:存储临时不可用时系统跳过挂载继续启动,而不是卡死在开机阶段。
四、常见报错与处理
- 提示 Give root password for maintenance:说明系统进了紧急模式但还没全坏,直接输 root 密码就能修,不必进 GRUB。
- 改完重启又卡回原样:大概率是只改了临时引导项。要永久生效需修改 /etc/default/grub 后执行 grub2-mkconfig -o /boot/grub2/grub.cfg(Ubuntu 是 update-grub)。
- 单用户模式也要密码且已丢失:改用 init=/bin/bash 方式绕过认证。
最后提醒:动 fstab 之前先 cp /etc/fstab /etc/fstab.bak,这一条能省掉上面大半流程。云服务器可以在控制台进 VNC 操作 GRUB,物理机则需要接显示器键盘。