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 + 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 工具分析
相关推荐
Ruiery1 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧1 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery2 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
qetfw2 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
逆风的蚂蚁4 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
沫璃染墨8 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
AI_Lab019 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by209999 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
星恒随风10 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip
feng_you_ying_li13 小时前
linux之网络层
linux·运维·网络