云主机进入单用户模式与物理机或本地虚拟机有所不同。关键在于:云主机通常没有物理键盘/显示器,无法在启动时直接敲击按键拦截启动过程。 传统通过 GRUB 菜单按键(如e 键)编辑启动参数的方法,必须依赖云平台提供的 VNC 控制台(也称为远程终端、Web Shell或救援模式)。
以下是完整的操作步骤,请根据你的云平台(阿里云、腾讯云、华为云等)和操作系统版本选择对应方法:
方法一:通过 VNC 控制台修改 GRUB 启动参数(通用、首选)
适用于操作系统能启动到 GRUB 引导菜单(哪怕系统有异常) 的情况。
1、获取 VNC 密码(或使用默认密码):
- 登录云平台控制台。
- 找到你的云主机实例,点击“远程连接” 或“VNC 控制台”。
- 如果是第一次使用,可能需要设置一个 6 位数的 VNC 连接密码(注意:这不是系统登录密码)。
2、重启服务器并快速进入 GRUB 菜单:
- 在 VNC 控制台窗口中,执行重启操作(可以在系统内执行reboot,或在控制台点击“重启”)。
关键动作:在 VNC 窗口出现蓝色或黑色背景的 BIOS/GRUB 界面 时,不断点击键盘上的Esc 或Shift 键(不同系统稍有差异,一般是按e 或Shift 键进入编辑模式)。
- *注意:云主机启动极快,VNC有时会有延迟,建议在重启命令执行后立刻在VNC窗口中连续按Shift或Esc。
3、修改内核启动参数:
- 当你看到 GRUB 菜单(列出可启动内核列表)后,按e 键进入编辑模式。
- 使用方向键 ↓ 找到以linux(或linux16、kernel)开头的那一行,这一行通常很长,包含很多参数。
- 将光标移动到行尾(或找到ro 这个参数,表示只读),删除ro(如果有),然后在行尾添加之一(三选一):
single
1
init=/bin/bash(推荐,直接进入 root 的 bash shell)
示例修改后效果:
linux /vmlinuz-... root=UUID=...rw single
# 或
linux /vmlinuz-... root=UUID=...init=/bin/bash *建议同时将ro 改为rw,确保进入单用户时文件系统可写。
4、启动系统:
- 按Ctrl + X 或F10(不同系统快捷键不同,屏幕底部会有提示,通常是Ctrl+x 或Control + x)启动。
- 系统会直接进入root 提示符(# 或bash-4.2#),无需密码,此时你就是单用户模式。
5、修改密码/修复系统:
- 输入passwd root 修改 root 密码。
- 修改完成后,输入exec /sbin/init 或exit 或直接输入reboot 重启系统。
6、(重要)SELinux:
- 如果系统启用了 SELinux(常见于 CentOS 7/8),在单用户模式下修改了文件(如/etc/shadow),重启后系统可能无法启动,文件标签被错误设置。
- 解决方法:在单用户模式下,执行touch /.autorelabel,然后重启,系统会在下次启动时自动纠正文件安全上下文(速度较慢)。
方法二:使用云平台的“救援模式/故障修复模式”
适用于系统无法启动 GRUB(如引导损坏、内核崩溃) 或无法通过 VNC 捕捉到 GRUB 菜单的情况,绝大多数主流云平台(阿里云、腾讯云、华为云、AWS)都提供此功能。
1、操作位置:云主机控制台的“更多” → “实例管理” → “救援模式”(或类似名称,如“重新安装系统”旁边的“救援”)。
2、操作步骤:
- 点击“进入救援模式”或“挂载救援盘”。
- 系统会重启并从一个临时的最小 Linux 系统(救援系统)启动,你可以通过 VNC 或 SSH(需要配置)连接到这个救援系统。
- 在救援系统中,你的原始系统盘会被挂载到某个目录(如/mnt)。
- 使用chroot /mnt 进入你的原始系统环境,此时操作等同于单用户模式(你可以执行passwd root 等)。
3、退出救援模式:在控制台点击“退出救援模式”,系统会从你的原始磁盘正常启动。
方法三:在云主机控制台直接“修改密码”(最简单,但有限制)
如果你是忘记 root 密码,大多数云平台(阿里云、腾讯云、华为云)提供“一键重置密码” 功能。
操作:在实例列表中找到该云主机,点击“更多” → “重置密码”,按照提示输入新密码后,系统会自动重启并生效。
注意:这种方法只能修改 root 密码,无法解决其他启动故障(如错误配置grub.cfg、fstab 错误、服务崩溃等),如果需要修改配置文件,仍需要方法一或二。
1、VNC 黑屏或无响应:
- 确认 VNC 密码已正确设置。
- 尝试多次重启,并在重启后立即连续按Shift,直到看到菜单。
- 某些云主机默认在 GRUB 配置中禁用了交互菜单(GRUB_TIMEOUT=0 或GRUB_TIMEOUT_STYLE=hidden),这种情况下,你需要通过救援模式 进入系统,修改/etc/default/grub 中的GRUB_TIMEOUT 值(例如改为10 或5),然后重新生成 GRUB 配置文件(grub2-mkconfig -o /boot/grub2/grub.cfg)。
2、云平台差异:
AWS EC2:没有传统 VNC,但有EC2 Serial Console(需配置,且需要 AWS CLI 操作),更推荐使用EC2 救援模式,或者通过 AWS 系统管理器 Session Manager 连接到操作系统后重启,在启动过程中操作虽难,但可以用reboot 命令尝试修改rd.break 参数(详见下文备选方案)。
微软 Azure:有Boot Diagnostics(引导诊断)和Serial Console(串行控制台),可以通过串口输入Enter 中断内核加载,进入grub> 环境手动引导init=/bin/bash。
3、备选方案:使用rd.break(GRUB 菜单中操作系统能正常引导但服务挂掉):
- 对于较新的 CentOS/RHEL 7+,可以在 GRUB 编辑模式下,在linux 行末尾添加rd.break 代替single,系统会启动一个初始 ramdisk shell(switch_root:/#),root 文件系统被挂载在/sysroot 下,需要执行:
mount -o remount,rw /sysroot
chroot /sysroot
# 现在你就在单用户模式中了
passwd root - 这种方法比single 更适合修复复杂的系统初始化问题。
:对于大多数云主机,方法一(VNC + GRUB编辑) 是最常用的,VNC 无法捕获 GRUB 菜单,方法二(救援模式) 最有保障,如果只是想改密码,方法三(控制台重置密码) 最省事。
文章摘自:https://idc.huochengrm.cn/zj/27271.html
评论