使用 EC2 Serial Console 对 Amazon EC2 实例进行故障排查 - Amazon Elastic Compute Cloud
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

使用 EC2 Serial Console 对 Amazon EC2 实例进行故障排查

通过使用 EC2 Serial Console,您可以通过连接到实例的串行端口来排查启动、网络配置和其他方面的问题。

注意

在开始之前,请确保您已完成先决条件

使用 GRUB 对 Linux 实例进行故障排查

GNU GRUB(GNU GRand Unified Bootloader [统一引导加载程序] 的缩写,通常称为 GRUB)是大多数 Linux 操作系统的默认引导加载程序。从 GRUB 菜单中,您可以选择要引导到哪个内核,或修改菜单项以更改内核的启动方式。这在对失败的实例进行故障排查时非常有用。

在引导流程中将显示 GRUB 菜单。该菜单无法通过普通 SSH 访问,但您可以通过 EC2 Serial Console 访问。

Single user mode

单用户模式将在较低的运行级别启动内核。例如,它可能会挂载文件系统,但不会激活网络,从而使您有机会执行修复实例所需的维护。

启动到单用户模式
  1. 连接到实例的串行控制台。

  2. 使用以下命令重新引导实例。

    [ec2-user ~]$ sudo reboot
  3. 在重新启动期间,当 GRUB 菜单出现时,按任意键停止引导流程。

  4. 在 GRUB 菜单中,使用箭头键选择要引导的内核,然后按键盘上的 e

  5. 使用箭头键将光标定位在包含内核的行上。该行以 linuxlinux16 开头,取决于启动实例所使用的 AMI。对于 Ubuntu,有两行开头为 linux,必须在下一步中修改。

  6. 在行末添加 single 一词。

    以下是 Amazon Linux 2 的示例。

    linux /boot/vmlinuz-4.14.193-149.317.amzn2.aarch64 root=UUID=d33f9c9a-\ dadd-4499-938d-ebbf42c3e499 ro console=tty0 console=ttyS0,115200n8 net.ifname\ s=0 biosdevname=0 nvme_core.io_timeout=4294967295 rd.emergency=poweroff rd.she\ ll=0 single
  7. Ctrl+X 可启动到单用户模式。

  8. login 提示符下,输入您之前设置的基于密码的用户的用户名,然后按 Enter 键。

  9. Password 提示符下,输入密码,然后按 Enter 键。

Emergency mode

紧急模式与单用户模式类似,只是内核在可达到的最低运行级别运行。

要启动到紧急模式,请按照与单用户模式相同的步骤操作,但在第 6 步中添加单词 emergency 代替 single

使用 SysRq 对 Linux 实例进行故障排查

系统请求 (SysRq) 键(有时称为“magic SysRq”)可用于在 Shell 外直接向内核发送命令,无论内核正在执行什么操作,内核都会响应。例如,如果实例已停止响应,则可以使用 SysRq 密钥告诉内核崩溃或重新启动。有关更多信息,请参阅 Wikipedia 中的 Magic SysRq 键

您可以在基于 EC2 Serial Console 浏览器的客户端中或 SSH 客户端中使用 SysRq 命令。每个客户端发送中断请求的命令都不同。

要使用 SysRq,请根据您正在使用的客户端选择以下程序之一。

Browser-based client
在串行控制台基于浏览器的客户端中使用 SysRq
  1. 连接到实例的串行控制台。

  2. 要发送中断请求,请按 CTRL+0(零)。如果您的键盘支持,还可以使用暂停或中断键发送中断请求。

    [ec2-user ~]$ CTRL+0
  3. 要发出 SysRq 命令,请按键盘上与所需命令对应的键。例如,要显示 SysRq 命令列表,请按 h

    [ec2-user ~]$ h

    h 命令的输出类似于以下内容。

    [ 1169.389495] sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems (j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r ) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)
SSH client
在 SSH 客户端中使用 SysRq
  1. 连接到实例的串行控制台。

  2. 要发送中断请求,请按 ~B(波浪号后跟大写 B)。

    [ec2-user ~]$ ~B
  3. 要发出 SysRq 命令,请按键盘上与所需命令对应的键。例如,要显示 SysRq 命令列表,请按 h

    [ec2-user ~]$ h

    h 命令的输出类似于以下内容。

    [ 1169.389495] sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems (j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r ) sync(s) show-task-states(t) unmount(u) show-blocked-tasks(w) dump-ftrace-buffer(z)
    注意

    您用于发送中断请求的命令可能会有所不同,取决于您正在使用的 SSH 客户端。

使用 SAC 对 Windows 实例进行故障排除

Windows 的特殊管理控制台 (SAC) 功能可用于对 Windows 实例进行故障排查。通过连接到实例的串行控制台并使用 SAC,您可以中断引导流程并在安全模式下启动 Windows。

注意

如果您在实例上启用 SAC,则依赖密码检索的 EC2 服务将无法通过 Amazon EC2 控制台运行。Amazon EC2 启动代理(EC2Config、EC2Launch v1 和 EC2Launch v2)上的 Windows 依靠串行控制台来执行各种任务。当您在实例上启用 SAC 时,这些任务不会成功执行。有关 Amazon EC2 启动代理上的 Windows 的更多信息,请参阅 配置您的 Windows 实例。如果您启用 SAC,则可在之后将其禁用。有关更多信息,请参阅 禁用 SAC 和启动菜单

使用 SAC

使用 SAC
  1. 连接到串行控制台。

    如果在实例上启用了 SAC,串行控制台将显示 SAC> 提示。

    串行控制台中显示的 SAC 提示符。
  2. 要显示 SAC 命令,请输入 ?,然后按 Enter

    预期输出

    输入问号以显示 SAC 命令。
  3. 要创建命令提示符通道(例如 cmd0001cmd0002),输入 cmd,然后按 Enter

  4. 要查看命令提示符通道,请按 ESC,然后按 TAB

    预期输出

    命令提示符通道。
  5. 要切换通道,请同时按 ESC+TAB+通道编号。例如,要切换至 cmd0002 通道(如果已创建),请按 ESC+TAB+2

  6. 输入命令提示符通道所需的凭证。

    需要凭证的命令提示符。

    命令提示符与您在桌面上获得的功能全面的命令 Shell 相同,例外之处是它不允许读取已输出的字符。

    功能全面的命令 shell。

还可以从命令提示符使用 PowerShell。

请注意,您可能需要将进度首选项设置为静默模式。

命令提示符中的 PowerShell。

使用启动菜单

如果实例已启用了启动菜单并在通过 SSH 连接后重新启动,则您应看到启动菜单,如下面所示。

命令提示符的启动菜单。

启动菜单命令

ENTER

启动操作系统的选定条目。

TAB

切换到 Tools(工具)菜单。

ESC

取消并重新启动实例。

按 ESC 后再按 8

相当于按下 F8。显示所选项目的高级选项。

ESC 键 + 向左箭头

返回到初始启动菜单。

注意

单靠 ESC 密钥不会让您返回主菜单,因为 Windows 正在等待查看转义序列是否正在进行中。

高级启动选项。

禁用 SAC 和启动菜单

如果您启用 SAC 和启动菜单,则可在之后将这些功能禁用。

使用以下方法之一在实例上禁用 SAC 和启动菜单。

PowerShell
在 Windows 实例上禁用 SAC 和启动菜单
  1. 连接到您的实例并从提升的 PowerShell 命令行执行以下步骤。

  2. 首先,将值更改为 no 以禁用启动菜单。

    bcdedit /set '{bootmgr}' displaybootmenu no
  3. 然后,将值更改为 off 以禁用 SAC。

    bcdedit /ems '{current}' off
  4. 重新启动实例以应用更新后的配置。

    shutdown -r -t 0
Command prompt
在 Windows 实例上禁用 SAC 和启动菜单
  1. 连接到您的实例并从命令提示符执行以下步骤。

  2. 首先,将值更改为 no 以禁用启动菜单。

    bcdedit /set {bootmgr} displaybootmenu no
  3. 然后,将值更改为 off 以禁用 SAC。

    bcdedit /ems {current} off
  4. 重新启动实例以应用更新后的配置。

    shutdown -r -t 0