1. 什么是 SysRq
SysRq(Magic System Request Key) 是 Linux 内核中的一种紧急命令接口,可以通过特定的按键组合向内核发送指令,即使系统已经挂起、无响应或进入某种锁死状态,也可能还能执行这些命令。
它的设计目标是:
在系统几乎失去响应时,仍能进行安全关机、重启或收集调试信息。
提供紧急的调试、诊断和恢复手段。
避免数据损坏(例如先卸载文件系统再重启)。
2. 启用与关闭
是否启用 SysRq 由内核参数 kernel.sysrq 控制:
bash
复制代码
cat /proc/sys/kernel/sysrq # 查看是否启用
值的含义:
0:完全禁用 SysRq。
1:启用所有功能。
其他值:按位掩码(bitmask)启用部分功能(安全模式)。
启用方法:
bash
复制代码
echo 1 > /proc/sys/kernel/sysrq
# 或持久化到 /etc/sysctl.conf
sysctl -w kernel.sysrq=1
3. 常见触发方式
键盘方式 (本地物理控制台)
通常是:
xml
复制代码
Alt + SysRq + <命令键>
在 PC 键盘上,SysRq 键一般与 Print Screen 键共用。
串口/虚拟终端方式
在某些虚拟化或远程调试中,可以通过向 /proc/sysrq-trigger 写入命令触发:
bash
复制代码
echo b > /proc/sysrq-trigger # 立即重启
echo m > /proc/sysrq-trigger # 输出内存信息到日志
4. 常用命令键
命令键
功能
说明
b
立即重启
不卸载文件系统,可能丢数据
o
立即关机
s
同步所有已挂载的文件系统
类似 sync
u
重新挂载所有文件系统为只读
防止数据损坏
m
显示内存信息
输出到 dmesg
t
显示任务列表(进程栈信息)
输出到 dmesg
p
显示当前 CPU 寄存器信息
调试用
c
触发内核崩溃(生成 crash dump)
需配置 kdump
e
向所有进程发送 SIGTERM
i
向所有进程发送 SIGKILL
r
关闭键盘原始模式(让 Ctrl+Alt+Del 有效)
h
显示支持的 SysRq 命令帮助
5. 经典用法 ------ REISUB
这是一个安全重启的顺序(避免数据损坏):
css
复制代码
R - 将键盘切换回原始模式
E - 向所有进程发送 SIGTERM
I - 向所有进程发送 SIGKILL
S - 同步磁盘数据
U - 重新挂载文件系统为只读
B - 立即重启
按法(间隔 1-2 秒):
Alt + SysRq + R → E → I → S → U → B
6. 安全与权限
物理访问风险:本地有人可直接使用 SysRq 执行关机/重启/转储,需在服务器环境中谨慎启用。
远程触发 :通过 /proc/sysrq-trigger 需要 root 权限,普通用户无法使用。
生产环境建议:启用有限功能(bitmask),例如:
ini
复制代码
sysctl -w kernel.sysrq=16 # 只允许 sync
7. 内核调试用途
SysRq 常被用于:
分析死锁、软/硬 lockup
收集内存、进程、寄存器状态
触发 crash dump 供后续使用 crash 工具分析