如何通过串行控制台使用 Linux SysRq 键来排查虚拟服务器实例无响应的问题?
您的 Linux 虚拟服务器实例没有响应,您无法通过 SSH 或直接访问来访问它。
Linux 虚拟服务器实例出现无响应的情况可能由多种原因导致,例如系统崩溃、死锁情况或与内核相关的问题。 当虚拟服务器无响应时,SSH 或直接访问等标准故障排除方法可能无法奏效。 在这些情况下,串行控制台仍然可以访问,这使得管理员能够通过使用 Linux 系统请求( SysRq )键与服务器进行交互。
系统故障、内核恐慌或进程无响应可能会导致 Linux 服务器无法通过常规流程访问。 这些问题可能是由软件漏洞、硬件故障或系统参数配置错误引起的。 SysRq 键可提供对 Linux 内核的底层访问权限,并能绕过那些已冻结或无响应的高层进程。 该机制作为一种安全保护措施内置于 Linux 内核中,旨在帮助用户在其他输入方式不可用时,仍能执行关键系统操作,例如重启服务器或导出诊断信息。
若要通过串行控制台使用 SysRq 键来排查并解决该问题,请按照以下步骤操作:
-
通过连接到串行控制台来访问虚拟服务器实例。 有关详细信息,请参阅 “使用 VNC 或串行控制台访问虚拟服务器实例”。
-
启用 SysRq 命令。 如果 SysRq 命令已启用,则可以跳过此步骤。 要启用 SysRq 命令,请设置
kernel.sysrq参数。echo 1 > /proc/sys/kernel/sysrq -
从串行控制台发送 SysRq 命令。 以下示例将启动内核崩溃转储(kdump)。
要触发崩溃转储,请确保在 Linux 虚拟服务器实例上已配置
crashkernel。 有关说明,请参阅“内核崩溃转储机制”。-
按下回车键。
-
按下
~(波浪号)键。对于 AZERTY 键盘:按下 Alt Gr 键 + 2 键,即可输入
~键。 -
按下
B(大写B键)。 -
按下
c(小写 c),这将启动内核崩溃转储(kdump)。
使用 SysRq 命令时,请注意以下几点:
- 请逐个按下并松开每个按键。 请勿长按任何按键。
- 请在五秒内完成整个操作序列,否则串行控制台将无法检测到 SysRq 命令。
- 输入这组命令时,这些字符不会显示在串行控制台上。 该系统将它们视为换行序列字符。 在序列完成后,或者序列超时或遇到无效字符时,将恢复正常的控制台输入。
- 如果该操作超时(耗时超过五秒)或按下了无效的中断序列字符,请从第 1 步重新开始该过程。
示例:
ENTER + ~ + B + c -
-
分析诊断输出。 之前的 SysRq 内核崩溃转储生成了可供您分析的诊断数据。 通过发送相关的 SysRq 命令,您可以收集有价值的诊断数据,用于故障排除并重新获得对系统的控制权。
要查看 SysRq 的命令键列表,请先按 Enter键,然后依次输入 ~Bh (波浪号、大写B、小写h)。 更多详情请参见 Linux Magic System Request Key Hacks - 什么是“命令”键?