将 Azure 串行控制台用于 SysRq 和 NMI 调用

系统请求 (SysRq)

SysRq 是 Linux 操作系统内核理解的一系列键,它可以触发一组预定义的操作。 当无法通过传统管理 (执行虚拟机故障排除或恢复时,通常使用这些命令,例如,VM 未) 响应。 使用 Azure 串行控制台的 SysRq 功能将模拟按物理键盘上输入的 SysRq 键和字符。

传递 SysRq 序列后,内核配置将控制系统的响应方式。 有关启用和禁用 SysRq 的信息,请参阅 SysRq 管理员指南文本 | markdown

Azure 串行控制台可用于使用命令栏中的键盘图标将 SysRq 发送到 Azure 虚拟机,如下所示。

Azure 串行控制台的屏幕截图。键盘图标突出显示,其菜单可见。该菜单包含“发送 SysRq 命令”项。

选择“发送 SysRq 命令”将打开一个对话框,该对话框将提供常见的 SysRq 选项或接受在对话框中输入的一系列 SysRq 命令。 这允许一系列 SysRq 执行高级操作,例如使用 安全重启: REISUB

选中输入键选项并将 REISUB 输入到以下字段中时,“将 SysRq 命令发送到来宾”对话框的屏幕截图。

SysRq 命令不能在已停止或内核处于非响应状态的虚拟机上使用。 例如, (内核崩溃) 。

启用 SysRq

如上面的 SysRq 管理员指南中所述,可以对 SysRq 进行配置,以便所有、无或仅特定命令可用。 可以使用以下步骤启用所有 SysRq 命令,但重新启动后不会继续运行:

echo "1" >/proc/sys/kernel/sysrq

若要使 SysReq 配置持久化,可以执行以下操作来启用所有 SysRq 命令

  1. 将此行添加到 /etc/sysctl.conf
    kernel.sysrq = 1
  2. 通过运行重新启动或更新 sysctl
    sysctl -p

命令键

从上面的 SysRq 管理员指南:

命令 函数
b 将立即重新启动系统,而无需同步或卸载磁盘。
c 将通过 NULL 指针取消引用来执行系统崩溃。 如果已配置,将执行故障转储。
d 显示持有的所有锁。
e 将 SIGTERM 发送到除 init 之外的所有进程。
f 将调用 oom 杀手杀死记忆猪进程, 但不要惊慌, 如果没有什么可以杀死。
g 由 kgdb (内核调试器) 使用
h 将显示帮助 (此处列出的键以外的任何其他键也会显示帮助,但 h 很容易记住:-)
i 将 SIGKILL 发送到除 init 之外的所有进程。
j 强行“解冻它” - 文件系统被 FIFREEZE ioctl 冻结。
k 安全访问密钥 (SAK) 终止当前虚拟主机上的所有程序。 注意:请参阅以下 SAK 部分的重要注释。
l 显示所有活动 CPU 的堆栈回溯。
m 将当前内存信息转储到主机。
n 用于使 RT 任务变得美观
o 将关闭系统 ((如果配置和支持) )。
p 将当前寄存器和标志转储到主机。
q 将转储每个 CPU 列表的所有武装 hrtimers (但不是常规timer_list计时器) 和有关所有时钟事件设备的详细信息。
r 关闭键盘原始模式并将其设置为 XLATE。
s 将尝试同步所有已装载的文件系统。
t 将当前任务及其信息的列表转储到控制台。
u 将尝试以只读方式重新装载所有装载的文件系统。
v 强制还原 framebuffer 控制台
v 导致 ETM 缓冲区转储 [特定于 ARM]
w 转储处于不可中断 (阻止) 状态的任务。
x 由 ppc/powerpc 平台上的 xmon 接口使用。 在 sparc64 上显示全局 PMU 寄存器。 转储 MIPS 上的所有 TLB 条目。
y 显示全局 CPU 寄存器 [特定于 SPARC-64]
z 转储 ftrace 缓冲区
0-9 设置控制台日志级别,控制哪些内核消息将打印到主机。 例如, 0 (,这样只有 PANIC 或 OOPS 等紧急消息才能发送到主机。)

特定于分发的文档

有关 SysRq 的特定于分发的文档以及将 Linux 配置为在收到 SysRq“Crash”命令时创建故障转储的步骤,请参阅以下链接:

Ubuntu

Red Hat

Suse

CoreOS

不可屏蔽的中断 (NMI)

NMI) (不可屏蔽的中断旨在创建虚拟机上的软件不会忽略的信号。 从历史上看,NCI 一直用于监视需要特定响应时间的系统上的硬件问题。 如今,程序员和系统管理员通常使用 NMI 作为一种机制来调试或排查未响应的系统的问题。

串行控制台可用于使用命令栏中的键盘图标将 NMI 发送到 Azure 虚拟机,如下所示。 交付 NMI 后,虚拟机配置将控制系统的响应方式。 可以将 Linux 操作系统配置为崩溃,并创建操作系统接收 NMI 的内存转储。

串行控制台的屏幕截图。键盘图标突出显示,其菜单可见。该菜单包含“发送不可屏蔽中断”项。

启用 NMI

对于支持 sysctl 来配置内核参数的 Linux 系统,可以使用以下命令在接收此 NMI 时启用死机:

  1. 将此行添加到 /etc/sysctl.conf
    kernel.panic_on_unrecovered_nmi=1
  2. 通过运行重新启动或更新 sysctl
    sysctl -p

有关 Linux 内核配置(包括 、 和 )的详细信息,请参阅 /proc/sys/kernel/*的文档panic_on_unrecovered_nmipanic_on_io_nmiunknown_nmi_panic 有关 NMI 的特定于分发的文档以及配置 Linux 以在收到 NMI 时创建故障转储的步骤,请参阅以下链接:

Ubuntu

Red Hat

Suse

CoreOS

后续步骤

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。