使用串行控制台访问 GRUB 和单用户模式
适用于:✔️ Linux VM
注意
本文中引用的 CentOS 是 Linux 分发版,将达到生命周期结束(EOL)。 请相应地考虑使用和规划。 有关详细信息,请参阅 CentOS 生命周期指南。
启动虚拟机(VM)时,GRand Unified Bootloader(GRUB)可能是你看到的第一件事。 由于它在操作系统启动之前显示,因此无法通过 SSH 访问 GRUB。 在 GRUB 中,可以修改启动配置以启动到单用户模式,等等。
单用户模式是一个最少的环境,具有最少的功能。 它可用于调查启动问题、文件系统问题或网络问题。 在后台运行的服务更少,并且根据运行级别,文件系统甚至可能不会自动装载。
如果 VM 可能配置为仅接受 SSH 密钥进行登录,则单用户模式也很有用。 在这种情况下,你可能能够使用单用户模式创建具有密码身份验证的帐户。
注意
串行控制台服务仅允许具有 参与者 级别或更高权限的用户访问 VM 的串行控制台。
若要进入单用户模式,请在 VM 启动时输入 GRUB,并在 GRUB 中修改启动配置。 请参阅下一部分中有关输入 GRUB 的详细说明。 通常,如果 VM 已配置为显示 GRUB,则可以使用 VM 串行控制台中的重启按钮来重启 VM 并显示 GRUB。
常规 GRUB 访问
若要访问 GRUB,请在打开串行控制台窗格时重新启动 VM。 某些分发版需要键盘输入才能显示 GRUB,而其他分发版则会自动显示 GRUB 几秒钟,以允许用户键盘输入取消超时。
若要能够访问单用户模式,需要确保在 VM 上启用 GRUB。 根据分发,可能需要执行一些设置工作,以确保已启用 GRUB。 有关特定于分发的信息,请参阅下一部分。
重启 VM 以在串行控制台中访问 GRUB
可以在串行控制台中重启 VM,方法是将鼠标悬停在 “重启 ”按钮上,然后选择“ 重启 VM”。 有关重启的通知显示在窗格底部。
如果 启用了 SysRq ,还可以通过运行 SysRq“b”命令来重启 VM。 若要了解重新启动时 GRUB 的预期内容,请参阅下一部分中特定于分发的说明。
常规单用户模式访问
如果尚未配置具有密码身份验证的帐户,可能需要手动访问单用户模式。 修改 GRUB 配置以手动进入单用户模式。 完成此操作后,请参阅“使用单用户模式重置或添加密码”部分,获取进一步说明。
如果 VM 无法启动,分发版通常会自动进入单用户模式或紧急模式。 但是,其他分发版需要其他设置,例如设置根密码,然后才能自动将你放入单用户模式或紧急模式。
使用单用户模式重置或添加密码
处于单用户模式后,通过执行以下操作添加具有 sudo 权限的新用户:
- 运行
useradd <username>
以添加用户。 - 运行
sudo usermod -a -G sudo <username>
以授予新用户根权限。 - 使用
passwd <username>
为新用户设置密码。 然后,可以以新用户身份登录。
在 Red Hat Enterprise Linux (RHEL) 中访问
如果 RHEL 无法正常启动,则会自动将你置于单用户模式。 但是,如果尚未为单用户模式设置根访问权限,则没有根密码且无法登录。 有一种解决方法(请参阅“在 RHEL 中手动输入单用户模式”部分),但我们建议你最初设置根访问权限。
在 RHEL 中访问 GRUB 访问
RHEL 原本就启用了 GRUB。 若要输入 GRUB,请通过运行 sudo reboot
重启 VM,然后按任意键。 应显示 GRUB 窗格。 如果不是,请确保 GRUB 文件中存在以下行(/etc/default/grub
):
对于 RHEL 8
注意
Red Hat 建议使用 Grubby 在 RHEL 8+ 中配置内核命令行参数。 目前无法使用 grubby 更新 grub 超时和终端参数。 若要修改所有启动项的GRUB_CMDLINE_LINUX参数,请运行 grubby --update-kernel=ALL --args="console=ttyS0,115200 console=tty1 console=ttyS0 earlyprintk=ttyS0"
。 此处提供了更多详细信息。
GRUB_TIMEOUT=5
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 earlyprintk=ttyS0"
对于 RHEL 7
GRUB_TIMEOUT=5
GRUB_TERMINAL_OUTPUT="serial console"
GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0,115200n8 earlyprintk=ttyS0,115200 net.ifnames=0"
注意
Red Hat 还提供了用于启动到救援模式、紧急模式或调试模式以及重置根密码的文档。 有关说明,请参阅 启动期间的终端菜单编辑。
在 RHEL 中为单用户模式设置根访问权限
默认情况下,根用户处于禁用状态。 RHEL 中的单用户模式要求启用根用户。 如果需要启用单用户模式,请使用以下说明:
- 通过 SSH 登录到 Red Hat 系统。
- 切换到根目录。
- 通过执行以下操作为根用户启用密码:
- 运行
passwd root
(设置强根密码)。
- 运行
- 通过执行以下操作,确保根用户只能通过 ttyS0 登录: a。 运行
vi /etc/ssh/sshd_config
,并确保 PermitRootLogIn 设置为no
。 b. 运行vi /etc/securetty file
以仅允许通过 ttyS0 登录。
现在,如果系统启动到单用户模式,则可以使用根密码登录。
或者,对于 RHEL 7.4+ 或 6.9+,若要在 GRUB 提示中启用单用户模式,请参阅 “启动到单用户模式”。
在 RHEL 中手动输入单用户模式
如果已使用上述说明设置 GRUB 和根访问权限,可以通过执行以下操作进入单用户模式:
若要输入 GRUB,请在重启 VM 时按 Esc。
在 GRUB 中,按 E 编辑要启动到的 OS。 OS 通常列在第一行。
查找内核行。 在 Azure 中,它以 linux 或 linux16 开头。
按 Ctrl+E 转到行尾。
在该行末尾,添加 systemd.unit=rescue.target。
此操作将引导你进入单用户模式。 如果要使用紧急模式,请将 systemd.unit=emergency.target 添加到线路末尾(而不是 systemd.unit=rescue.target)。
按 Ctrl+X 退出并重新启动应用设置。
在进入单用户模式之前,系统会提示输入管理员密码。 此密码是在前面的说明中创建的密码。
在 RHEL 中输入未启用根帐户的单用户模式
如果按照前面的说明未启用根用户,仍可以通过执行以下操作重置根密码:
注意
如果使用 SELinux,请在重置根密码时,请务必遵循 Red Hat 文档中介绍的其他步骤。
若要输入 GRUB,请在重启 VM 时按 Esc。
在 GRUB 中,按 E 编辑要启动到的 OS。 OS 通常列在第一行。
查找内核行。 在 Azure 中,它以 linux16 开头。
在行的末尾,将 rd.break 添加到行尾。 在内核行和 rd.break 之间留出一个空格。
如 Red Hat 文档中所述,此操作在从中
systemd
传递initramfs
控件之前中断启动过程。按 Ctrl+X 退出并重新启动应用设置。
重新启动后,系统会使用只读文件系统进入紧急模式。
在 shell 中,输入
mount -o remount,rw /sysroot
以重新装载具有读/写权限的根文件系统。启动到单用户模式后,输入
chroot /sysroot
以切换到sysroot
监狱。你现在位于根目录下,可以开始排查系统问题。
在 RHEL 中,SELinux 强制模式保护 OS 免受任何更改。 更改密码后,可以运行
touch /.autorelabel
以重新标记文件系统。完成后,输入
reboot -f
以重新启动。
注意
运行上述说明会将你放入紧急 shell,以便还可以执行编辑 fstab
等任务。 但是,我们通常建议重置根密码并将其用于进入单用户模式。
在 CentOS 中访问
与 Red Hat Enterprise Linux 非常类似,CentOS 中的单用户模式要求启用 GRUB 和根用户。
在 CentOS 中访问 GRUB
CentOS 原本就启用了 GRUB。 若要输入 GRUB,请通过输入 sudo reboot
重启 VM,然后按任意键。 此操作显示 GRUB 窗格。
CentOS 中的单用户模式
若要在 CentOS 中启用单用户模式,请按照 RHEL 的前面说明进行操作。
在 Ubuntu 中访问
Ubuntu 映像不需要根密码。 如果系统启动到单用户模式,则可以在没有其他凭据的情况下使用它。
在 Ubuntu 中访问 GRUB
若要访问 GRUB,在 VM 启动时按住 Esc。
默认情况下,Ubuntu 映像可能不会自动显示 GRUB 窗格。 可以通过执行以下操作来更改设置:
在文本编辑器中 ,打开 /etc/default/grub.d/50-cloudimg-settings.cfg 文件。
将
GRUB_TIMEOUT
值更改为非零值。在文本编辑器中,打开 /etc/default/grub。
注释掉行
GRUB_HIDDEN_TIMEOUT=1
。确保有一
GRUB_TIMEOUT_STYLE=menu
行。运行
sudo update-grub
。
Ubuntu 中的单用户模式
如果 Ubuntu 无法正常启动,它会自动将你置于单用户模式。 若要手动输入单用户模式,请执行以下操作:
- 在 GRUB 中,按 E 编辑启动项(Ubuntu 条目)。
- 查找以 linux 开头的行,然后查找 ro。
- 在 ro 后添加单个,确保单个前后有一个空间。
- 按 Ctrl+X 通过这些设置重新启动并进入单用户模式。
使用 GRUB 在 Ubuntu 中调用 bash
尝试上述说明后,可能会出现以下情况(例如忘记的根密码),即仍无法在 Ubuntu VM 中访问单用户模式。 还可以告知内核以 init 身份运行 /bin/bash
,而不是系统 init。 此操作提供 bash shell 并允许系统维护。 请遵照以下说明:
在 GRUB 中,按 E 编辑启动项(Ubuntu 条目)。
查找以 linux 开头的行,然后查找 ro。
将 ro 替换为 rw init=/bin/bash。
此操作将文件系统装载为读写,并用作
/bin/bash
init 进程。按 Ctrl+X 以使用这些设置重新启动。
在 CoreOS 中访问
CoreOS 中的单用户模式要求启用 GRUB。
在 CoreOS 中访问 GRUB
若要访问 GRUB,请在 VM 启动时按任意键。
CoreOS 中的单用户模式
如果 CoreOS 无法正常启动,它会自动将你置于单用户模式。 若要手动输入单用户模式,请执行以下操作:
在 GRUB 中,按 E 编辑启动条目。
查找以 linux$ 开头的行。 应有两个 行实例,每个实例都封装在不同的实例中(如果...else 子句。
将 coreos.autologin=ttyS0 追加到每个 linux$ 行的末尾。
按 Ctrl+X 通过这些设置重新启动并进入单用户模式。
在 SUSE SLES 中访问
如果系统启动进入紧急模式,SLES 12 SP3+ 的较新映像允许通过串行控制台进行访问。
在 SUSE SLES 中访问 GRUB
SLES 中的 GRUB 访问需要通过 YaST 进行引导加载程序配置。 若要创建配置,请执行以下操作:
使用 SSH 登录到 SLES VM,然后运行
sudo yast bootloader
。 按 Tab,按 Enter,然后使用箭头键浏览菜单。转到 内核参数,然后选择“ 使用串行控制台 ”复选框。
添加到
serial --unit=0 --speed=9600 --parity=no
控制台参数。按 F10 保存设置并退出。
若要输入 GRUB,请重新启动 VM,并在启动序列期间按任意键以保持显示 GRUB 窗格。
GRUB 的默认超时为 1 秒。 可以通过更改 /etc/default/grub 文件中的
GRUB_TIMEOUT
变量来修改此设置。
SUSE SLES 中的单用户模式
如果 SLES 无法正常启动,则会自动放入紧急外壳。 若要手动输入紧急外壳,请执行以下操作:
在 GRUB 中,按 E 编辑启动项(SLES 条目)。
查找以 linux 开头的内核行。
将 systemd.unit=emergency.target 追加到内核行末尾。
按 Ctrl+X 使用这些设置重新启动并输入紧急 shell。
注意
此操作会将你放入具有只读文件系统的紧急 shell。 若要编辑任何文件,请使用读写权限重新装载文件系统。 为此,请在 shell 中输入
mount -o remount,rw /
。
在 Oracle Linux 中访问
与 Red Hat Enterprise Linux 类似,Oracle Linux 中的单用户模式要求启用 GRUB 和根用户。
在 Oracle Linux 中访问 GRUB
Oracle Linux 原本就启用了 GRUB。 若要输入 GRUB,请通过运行 sudo reboot
重启 VM,然后按 Esc。此操作显示 GRUB 窗格。 如果未显示 GRUB 窗格,请确保行的值GRUB_TERMINAL
包含串行控制台(即)。 GRUB_TERMINAL="serial console"
使用 grub2-mkconfig -o /boot/grub/grub.cfg
. 重新生成 GRUB
Oracle Linux 中的单用户模式
若要在 Oracle Linux 中启用单用户模式,请按照 RHEL 的前面说明进行操作。
后续步骤
若要了解有关串行控制台的详细信息,请参阅:
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。