SysRq详解

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 + REISUB


6. 安全与权限

  • 物理访问风险:本地有人可直接使用 SysRq 执行关机/重启/转储,需在服务器环境中谨慎启用。

  • 远程触发 :通过 /proc/sysrq-trigger 需要 root 权限,普通用户无法使用。

  • 生产环境建议:启用有限功能(bitmask),例如:

    ini 复制代码
    sysctl -w kernel.sysrq=16    # 只允许 sync

7. 内核调试用途

SysRq 常被用于:

  • 分析死锁、软/硬 lockup
  • 收集内存、进程、寄存器状态
  • 触发 crash dump 供后续使用 crash 工具分析
相关推荐
YouEmbedded1 天前
解码UDP
linux·udp
w***48821 天前
Linux安装redis
linux·运维·redis
python百炼成钢1 天前
28.嵌入式 Linux LED 驱动开发实验
linux·运维·驱动开发
西风未眠1 天前
高效编辑之vi/vim常用快捷键汇总
linux·编辑器·vim
_Stellar1 天前
Linux 服务器管理 根目录文件夹权限设置 基于用户组实现安全共享
linux·服务器·安全
LUCIFER1 天前
驱动开发:详细分析 DTB、DTS、DTSI、DTBO 的区别、用途及它们之间的关系
linux·服务器·驱动开发
liuyao_xianhui1 天前
版本控制器git--gdb/cgdb
linux·运维·服务器·git
CS_浮鱼1 天前
【Linux进阶】mmap实战:文件映射、进程通信与LRU缓存
linux·运维·c++·缓存
chuxinweihui1 天前
应用层协议 HTTP
linux·服务器·网络·网络协议·http
xu_yule1 天前
Linux_16(多线程)信号量+基于环形队列的生成消费模型+自选锁+读写锁
linux·运维·服务器