适用于: ✔️ Linux 虚拟机(VM)
系统请求 (SysRq)
SysRq 是 Linux 操作系统内核识别的按键序列,可以触发一组预定义的操作。 当无法通过传统管理执行虚拟机故障排除或恢复时,通常会使用这些命令。 例如,如果 VM 未响应。 使用 Azure 串行控制台的 SysRq 功能模拟按下物理键盘上的 SysRq 键和输入字符。
传递 SysRq 序列后,内核配置将控制系统响应的方式。 有关启用和禁用 SysRq 的信息,请参阅 markdown。
Azure 串行控制台可用于使用以下命令栏中的键盘图标将 SysRq 发送到 Azure 虚拟机。
选择“发送 SysRq 命令”将打开一个对话框,该对话框提供常见的 SysRq 选项或接受一系列输入到对话框中的 SysRq 命令。 此“发送 SysRq 命令”允许一系列 SysRq 执行高级操作,例如使用 REISUB 进行安全重启。
不能在已停止或者其内核处于无响应状态的虚拟机上使用 SysRq 命令。 例如,内核崩溃。
启用 SysRq
如 SysRq 管理员指南中所述,可以配置 SysRq,以便提供所有、无或仅某些命令。 可以使用以下步骤启用所有 SysRq 命令,但它在重新启动后无法幸存:
echo "1" >/proc/sys/kernel/sysrq
若要永久保留 SysReq 配置,可执行以下命令来启用所有 SysRq 命令
- 将此行添加到 /etc/sysctl.conf
kernel.sysrq = 1 - 通过运行重新启动或更新 sysctl
sysctl -p
命令键
从 SysRq 管理员指南:
| 命令 | 函数 |
|---|---|
b |
将立即重新启动系统,且不会同步或卸载磁盘。 |
c |
将通过 NULL 指针取消引用来执行系统崩溃。 将执行故障转储(如果已配置)。 |
d |
显示保持的所有锁。 |
e |
向所有进程(init 除外)发送 SIGTERM。 |
f |
将调用 OOM killer 来终止占用大量内存的进程,但如果没有可终止的进程,也不必惊慌。 |
g |
由 kgdb(内核调试程序)使用 |
h |
将显示帮助(除此处列出的键之外的任何其他键也显示帮助,但 h 很容易记住;) |
i |
向所有进程(init 除外)发送 SIGKILL。 |
j |
强制“将其解冻”- FIFREEZE ioctl 冻结的文件系统。 |
k |
安全访问键 (SAK) 会终止当前虚拟控制台上的所有程序。 注意:请参阅以下 SAK 部分中的重要注释。 |
l |
显示所有活动 CPU 的堆栈回溯。 |
m |
将当前内存信息转储到控制台。 |
n |
用于顺利完成 RT 任务 |
o |
将关闭系统(如果已配置并受支持)。 |
p |
将当前寄存器和标志转储到控制台。 |
q |
将转储所有已装备的 hrtimer(但不包括普通的 timer_list 计时器)的 CPU 列表和有关所有 clockevent 设备的详细信息。 |
r |
关闭键盘原始模式,并将其设置为 XLATE。 |
s |
将尝试同步所有已装载的文件系统。 |
t |
将当前任务的列表及其信息转储到控制台。 |
u |
将尝试重新装载所有已装载的只读文件系统。 |
v |
强制还原帧缓冲区控制台 |
v |
导致 ETM 缓冲区转储 [特定于 ARM] |
w |
转储处于不可间断(阻塞)状态的任务。 |
x |
由 ppc/powerpc 平台上的 xmon 接口使用。 显示 sparc64 上的全局 PMU 寄存器。 转储 MIPS 上的所有 TLB 项。 |
y |
显示全局 CPU 寄存器 [特定于 SPARC-64] |
z |
转储 ftrace 缓冲区 |
0-9 |
设置控制台日志级别,控制将哪些内核消息打印到控制台。 (例如,指定 0 只会在控制台上列显 PANIC 或 OOPS 等紧急消息。) |
特定于分发版的文档
有关针对不同 Linux 发行版的 SysRq 文档以及配置 Linux 以便在收到 SysRq“Crash”命令时创建故障转储的步骤,请参阅以下链接:
Ubuntu
Red Hat
SUSE
CoreOS
不可屏蔽的中断 (NMI)
不可屏蔽中断(NMI)产生一个信号,虚拟机上的软件会响应而不忽略。 从历史上看,NMIs 用于监视需要特定响应时间的系统上的硬件问题。 如今,程序员和系统管理员通常使用 NMI 作为一种机制来调试或排查未响应的系统问题。
串行控制台可用于使用以下命令栏中的键盘图标将 NMI 发送到 Azure 虚拟机。 交付 NMI 后,虚拟机配置将控制系统响应的方式。 可将 Linux 操作系统配置为在收到 NMI 时发生崩溃并创建内存转储。
启用 NMI
对于支持 sysctl 配置内核参数的 Linux 系统,可以使用以下命令在接收到此 NMI 时触发系统恐慌:
- 将此行添加到 /etc/sysctl.conf
kernel.panic_on_unrecovered_nmi=1 - 通过运行重新启动或更新 sysctl
sysctl -p
有关 Linux 内核配置的详细信息,包括 unknown_nmi_panic、panic_on_io_nmi 和 panic_on_unrecovered_nmi,请参阅:/proc/sys/kernel/* 的文档。 与 NMI 相关的特定于发行版的文档以及将 Linux 配置为在收到 NMI 时生成崩溃转储的步骤,请参阅以下链接:
Ubuntu
Red Hat
SUSE
CoreOS
后续步骤
- 主要串行控制台 Linux 文档页位于此处。
- 使用串行控制台启动到 GRUB 并进入单用户模式
- 串行控制台也适用于 Windows VM
- 详细了解启动诊断
联系我们寻求帮助
如果你有任何疑问或需要帮助,请创建支持请求或联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区。