如何从 root shell 触发 SysRq 事件

如果我们在机器上有一个 root shell(并且系统的响应足以让我们这样做),我们还可以将命令键字符写入 /proc/sysrq-trigger 文件。
当我们不在系统控制台上或者从脚本触发它时,这对于触发此信息很有用。

# echo 'm' > /proc/sysrq-trigger

即使将 kernel.sysrq 设置为 0,此方法也有另外的好处。

如何启用 SysRq

SysRq 键可以通过设置“Magic SysRq”来激活。
我们必须确保 sysctl.conf 中的 kernel.sysrq 设置正确:

kernel.sysrq = 1 (SysRq turned ON)
kernel.sysrq = 0 (SysRq turned OFF)

注意:在 CentOS/RHEL 7 上,我们应该将更改更改为“/usr/lib/sysctl.d/50-default.conf”

上述设置确保系统启动后默认启用 SysRq(在 CentOS/RHEL 中默认禁用)。
要启用它,请立即在当前会话中运行,使用以下命令:

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

并再次禁用它:

# echo 0 > /proc/sys/kernel/sysrq

注意:由于启用 SysRq 可为具有物理控制台访问权限的人提供另外能力,因此建议在不排除故障或者确保物理控制台访问得到适当保护时禁用它。

如何在 CentOS/RHEL 中使用 Magic SysRq 工具

SysRq 事件的类型

一旦启用 SysRq 工具,就可以触发多个 SysRq 事件。
这些在内核版本之间有所不同,但有一些是常用的:

按键作用
m转储有关内存分配的信息
t转储线程状态信息
p转储当前 CPU 寄存器和标志
c故意使系统崩溃(内核panic)。 用于通过 kdump 捕获 vmcore。
s立即同步所有挂载的文件系统
u立即重新挂载所有只读文件系统
b立即重启机器
o立即关闭机器电源(如果已配置和支持)
f启动内存不足杀手 (OOM)
w转储处于不可中断(阻塞)状态的任务

什么是 SysRq 实用程序

如果内核冻结或者/和挂起,我们可以使用“magic” SysRq 工具。
'magic' SysRq 键允许即时访问几个基本的内核命令,包括同步、卸载、终止进程、showMem、showPc 和 reBoot。
根据 Linux 内核文档:

更多: zhilu jiaocheng

如何触发 SysRq 事件

有多种方法可以触发 SysRq 事件。
在大多数架构上,SysRq 事件可以通过以下组合键从控制台触发:

Alt+PrintScreen+[CommandKey]

PrintScreen 是在大多数 Linux 系统中用作 SysRq 键的键。

要访问无响应系统,请按 Alt+SysRq 和 H 以获取选项列表。
不同的内核版本可能有不同的选项。
要获取当前内核支持的选项,我们可以以 root 身份运行以下命令:

# echo h > /proc/sysrq-trigger

并检查 dmesg 输出。
以下是 RHEL 7 系统上的示例:

# dmesg
[ 4338.124035] 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) force-fb(V) show-blocked-tasks(w) dump-ftrace-buffer(z)
日期:2020-09-17 00:13:58 来源:oir作者:oir