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 工具分析
相关推荐
南棱笑笑生6 小时前
20251217给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-5.10】后调通ov5645【只能预览】
linux·c语言·开发语言·rockchip
Sleepy MargulisItG7 小时前
【Linux网络编程】应用层协议:HTTP协议
linux·服务器·网络·http
G31135422737 小时前
Linux 内核设计中的核心思想与架构原则
linux·架构·php
zhuzewennamoamtf7 小时前
Linux内核platform抽象、数据结构、内核匹配机制
linux·运维·数据结构
Kira Skyler9 小时前
ELF文件解析 elf.o 文件主要内容.md
linux
逐梦吧!旅行者9 小时前
Linux MySQL 5.7用户管理与用户密码的设置问题
linux·mysql
RisunJan9 小时前
Linux命令-grpck命令(验证和修复组配置文件(`/etc/group` 和 `/etc/gshadow`)完整性的工具)
linux·运维·服务器
loosed10 小时前
Ubuntu mysql8 tar.xz 安装
linux·ubuntu·adb
Xの哲學10 小时前
Linux VxLAN深度解析: 从数据平面到内核实现的全面剖析
linux·服务器·算法·架构·边缘计算
添砖java‘’10 小时前
Linux信号机制详解:从产生到处理
linux·c++·操作系统·信号处理