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. 常见触发方式
-
键盘方式 (本地物理控制台)
通常是:
xmlAlt + SysRq + <命令键>
在 PC 键盘上,SysRq 键一般与 Print Screen 键共用。
-
串口/虚拟终端方式
在某些虚拟化或远程调试中,可以通过向
/proc/sysrq-trigger
写入命令触发:bashecho 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),例如:
inisysctl -w kernel.sysrq=16 # 只允许 sync
7. 内核调试用途
SysRq 常被用于:
- 分析死锁、软/硬 lockup
- 收集内存、进程、寄存器状态
- 触发 crash dump 供后续使用
crash
工具分析