The Linux Magic SysRq key 是一个内核级别的功能,允许你直接向内核发送底层命令,即使系统已经冻结。你可以把它看作一个内置的应急机制,在正常进程无法响应时发挥作用。
它可以保存数据、干净地重启一个冻结的系统,或者诊断问题。但它也可能带来安全风险。
什么是 Magic SysRq key
通过检查 /proc/sys/kernel/sysrq 文件的值来控制哪些功能被启用。
Magic SysRq key 是内置于内核的。根据官方 Linux kernel documentation,它被描述为一个“神奇的键组合,你可以用它来让内核执行一些操作,无论它在做什么,前提是内核本身仍然在编译时启用了该功能。”
它依赖于特定的内核键码。在大多数现代键盘上,这个键是 drivers/tty/sysrq.c。
这个名字来源于 SysRq(系统请求)键,通常与 Print Screen 键共用。
当你按下这个组合键时,内核会执行低级别的命令,绕过所有进程和中断。这种功能在内核编译时通过 CONFIG_MAGIC_SYSRQ 配置选项启用。
它不是什么
Magic SysRq key 不是一个常规的键盘快捷键,也不是一个可以修复任何问题的调试工具。它是内核代码,只有在被触发时才会运行。
为什么存在这个功能
系统崩溃时有发生。软件会锁死。内核会恐慌。正常的关机方式可能无法工作。
在这种情况下,你有几个选择:
- 按住电源按钮强制关机(可能丢失数据)
- 等待系统自行恢复(通常不会)
- 使用 Magic SysRq 优雅地关机(可以保存你的数据)
这个功能是在内核开发早期加入的,用于系统管理员调试和内核恐慌恢复。
如何触发 Magic SysRq 命令
基本模式是:按住修饰键,然后按一个命令字母。
在大多数 x86 系统上:
- 按住
Alt+SysRq(或Print Screen) - 在按住的同时,按一个命令字母
在部分笔记本电脑上:
- 按住
Alt+Fn+SysRq - 然后按命令字母
示例: 要干净地重启,按住 Alt + SysRq 并按 b。
内核文档特别指出:许多键盘无法同时处理多个按键。如果发生这种情况,试试:按 Alt,按 SysRq,松开 SysRq,按命令键,然后松开所有键。
重要提示: 命令键是 区分大小写 的。内核文档明确说明了这一点。例如,小写 r 和大写 Print Screen 是两个完全不同的命令。所有 SysRq 命令都是 小写 的。这在通过 /proc/sysrq-trigger 直接写入时尤其重要。
最有用的 SysRq 命令
下面列出了许多命令。最常用的命令如下。所有都是小写:
1. r - 将键盘模式从 XLATE(原始)恢复
X 和 Wayland 可能会将键盘置于原始模式,独占输入。此命令将其恢复正常的内核处理。
2. e - 向所有进程发送 SIGTERM(除 init/PID 1 外)
要求进程优雅地关闭。
3. i - 向所有进程发送 SIGKILL(除 init/PID 1 外)
强制进程立即关闭。
4. s - 同步所有挂载的文件系统
将缓存的数据写入磁盘。内核文档提示:等待直到“OK”和“Done”信息出现在控制台上。
5. u - 以只读方式重新挂载文件系统
在关机前保护数据。同样,等待“OK”和“Done”。
6. b - 立即重启
不进行同步或卸载。这相当于在未同步的情况下按下电源按钮。
R- 关闭系统(如果硬件支持安全关机)
8. f - 调用 OOM 杀手
杀死最占内存的进程。如果没有什么可以杀死的,内核可能会恐慌。
9. h - 显示内核日志帮助
列出所有可用的 SysRq 命令。
REISUB 序列:安全重启冻结系统
当系统完全冻结时,使用这个序列来安全关机。每个字母代表一个命令:
r- 恢复键盘模式(原始)并让内核处理下一个键e- 优雅地终止所有进程(SIGTERM)i- 杀死任何剩余进程(SIGKILL)s- 将数据同步到磁盘并等待磁盘活动稳定u- 以只读方式重新挂载文件系统b- 重启
按住 Alt + SysRq 持续。依次按每个字母,每个字母之间间隔 1–2 秒。给每个步骤时间来完成。
两个助记符来帮助记住 REISUB:
- “重启即使系统彻底坏掉”
- “举起大象是如此极其无聊”
两者都映射到相同的字母序列。用你觉得好记的那个。
关于现代文件系统的一个说明:
Btrfs、ZFS 和 xfs 等写时复制文件系统被引入后,REISUB 最初是为了防止文件系统损坏而设计的。对于这些文件系统,s 和 u 步骤仍然有助于将未写入的数据刷新到磁盘,但它们的必要性不如在 ext4、btrfs 或 xfs 上那么关键。实际上,运行 s 和 u 后再 b 仍然是一个很好的安全做法。
检查 SysRq 是否启用
Magic SysRq 必须在内核中通过 CONFIG_MAGIC_SYSRQ 配置启用,这是所有主流发行版的默认设置。默认值是 CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE,对应内核文档中的 /etc/sysctl.d/10-magic-sysrq.conf。
以下是如何检查当前在你的系统上激活了什么:
cat /proc/sys/kernel/sysrq
这个数字显示的是哪些功能被启用。根据内核文档:
- 0 = 完全禁用
- 1 = 所有命令启用
- >1 = 位掩码允许的功能
常见的位掩码值有:
按发行版默认值分类:
- Ubuntu:176(16+32+128 — 同步、卸载、重启)—— 确切值可能不同;检查
/etc/sysctl.d/10-magic-sysrq.conf你自己的系统 - Debian:438(2+4+16+32+128+256)
关于 systemd 的一个说明:
在 systemd 管理的发行版(主要是 Arch Linux 和衍生版)上,systemd 将此值设置为 0x10(十进制 16) 作为默认值,这仅启用同步命令并禁用信号处理和重启。如果你的系统是 systemd 管理的,并且 REISUB 不能完全工作,这很可能是原因。
要临时启用所有命令:
echo 1 | sudo tee /proc/sys/kernel/sysrq
要使其永久生效,创建一个 drop-in 配置文件:
# /etc/sysctl.d/99-sysrq.conf
kernel.sysrq = 1
然后重新加载:
sudo sysctl --system
推荐阅读:
何时实际使用 REISUB 功能
使用 Magic SysRq 当:
- 你的桌面完全冻结,没有任何响应
- SSH 连接已死,无法正常恢复
- 一个进程锁死了整个系统
- 你需要干净地重启,但正常的关机方式无效
- 你正在调试内核恐慌
不要使用它当:
- 正常的关机命令仍然有效
- 你只是遇到了一个不兼容的慢速系统
- 应用程序正在响应,即使很慢
- 你还没有检查
Ctrl+Alt+F2来查看文本控制台是否有响应 - 问题是一个用户空间程序(杀死它更合适)
试试这些温和的替代方案。使用 SysRq 作为最后的手段,在电源按钮之前。
安全影响和风险
任何拥有物理键盘访问权限的人都可以使用 Magic SysRq。如果启用,他们可以:
- 立即重启机器
- 杀死所有正在运行的进程
- 通过调试命令访问内存内容
- 触发一个崩溃
Linux 内核文档特别指出:“没有‘合理的’编译器优化会使 magic SysRq 键成为一个无效的调试工具。”
在多用户生产环境上: 考虑将位掩码值限制为 176(仅同步 + 卸载 + 重启)。这会禁用可能暴露内存内容的调试命令。
在个人笔记本电脑上: 完全访问(值 1)通常是可接受的。物理键盘访问已经是一个显著的安全边界。
警告: 在公共可访问系统上启用所有 SysRq 命令是一个安全风险。攻击者如果拥有物理访问权限,可以崩溃你的系统、杀死进程,或者通过调试命令读取内存内容。在服务器上使用一个限制性的位掩码。
一个重要的技术细节: /proc/sys/kernel/sysrq 中的值只控制键盘触发的命令。通过 /proc/sysrq-trigger 调用总是被允许的,需要 root 权限或适当的位掩码设置。如果你只依赖 /proc/sysrq-trigger 进行远程管理,请确保 /proc/sys/kernel/sysrq 的值不会限制键盘触发的访问。
你应该知道的限制
Magic SysRq 很强大,但它不能修复一切。它只在“系统完全锁定但内核仍然在编译时启用了该功能”时有效。
它不会帮助:
- 内核本身因恐慌而崩溃,无法恢复
- 硬件被物理限制
- CPU 锁定在一个安全循环中
- 键盘设备本身已损坏
- 你的键盘没有正确连接
它可能不工作当:
- 你的内核编译时没有
CONFIG_MAGIC_SYSRQ - 你正在使用一个虚拟机,并且键盘组合没有被传递
- 你的桌面环境没有正确处理键盘组合
- systemd 将位掩码设置为一个禁用你所需命令的值
它不是魔法: 不要被名字迷惑。它是一个内核功能。如果内核不能运行,SysRq 也不能运行。
通过网络使用 SysRq
/proc/sysrq-trigger 接口自 Linux 2.4.21 起可用,让你远程触发命令。
/proc/sysrq-trigger 接口,自 Linux 2.4.21 起可用,让你远程触发命令。它的关键优势在于它绕过了键盘位掩码,只要你拥有 root 访问权限。
通过 SSH(如果连接仍然可用):
echo s | sudo tee /proc/sysrq-trigger # Sync filesystems
echo u | sudo tee /proc/sysrq-trigger # Remount read-only
echo b | sudo tee /proc/sysrq-trigger # Reboot
完整 REISUB 序列在一个命令中(按顺序暂停,在最新内核上推荐):
echo _reisub | sudo tee /proc/sysrq-trigger
通过一个串行控制台: 发送一个 BREAK 信号,然后在 5 秒内,发送命令键。这个方法取决于你的终端程序如何发送 BREAK。
验证:测试 SysRq 工作
在需要之前测试它:
- 检查它是否启用:
cat /proc/sys/kernel/sysrq应该显示一个非零值 - 尝试一个安全命令:
Alt+SysRq+h(显示内核日志帮助) - 确认它工作了:
sudo dmesg | tail -20应该显示 SysRq 输出
不要测试 b 除非你准备好立即重启。
不要测试 f 除非你想要一个随机进程被 OOM 杀手杀死。
从 h 开始。如果帮助文本出现在 dmesg 上,一切都会工作。
要避免的常见错误
错误 1:跳过 REISUB 序列的步骤
每个步骤需要 1 到 2 秒。如果你在 b 之前按 s 而没有等待同步,你会破坏数据。
错误 2:单独使用 b 来重启
b 命令立即重启,没有同步和卸载。使用完整的 REISUB 序列代替。
错误 3:在笔记本电脑上忘记 Fn 键
许多笔记本电脑需要 Fn + SysRq。试试不同的组合,如果一种不行的话。
错误 4:在生产环境中测试危险命令
命令 e、i 和 b 会立即导致系统范围的破坏。在一个隔离的机器上测试。
错误 5:假设它在虚拟机上工作
虚拟机、云实例和自定义内核可能不会传递 SysRq 组合。先验证它。
错误 6:在公共系统上启用所有 SysRq
任何拥有物理访问权限的人都可以崩溃你的系统。使用一个限制性的位掩码。
错误 7:在 /proc/sysrq-trigger 中使用大写命令字母
命令是区分大小写的。例如,echo B > /proc/sysrq-trigger 不会重启你的系统。echo b 也不会。
Linux Magic SysRq Key Cheatsheet
Recover Frozen Linux System## LINUX MAGIC SYSRQ KEYEmergency Command ReferenceAlt + SysRq + [key] · keys are case-sensitive · always use lowercaseREISUB SEQUENCE# safe reboot for a frozen systemrunraw keyboardturns off raw mode → XLATEeSIGTERM all processesasks them to close gracefullyiSIGKILL all processesforce-kills what remainsssync filesystemswait for disk activity to settleuremount read-onlyprotects filesystemsbreboot immediatelyno further sync after this# mnemonics"Reboot Even If System Utterly Broken""Raising Elephants Is So Utterly Boring"OTHER COMMANDS opower off (if supported) fOOM killer — kills memory hog kSAK — kills current console procs mdump memory info to console tdump tasks and threads hhelp — check with dmesg# check & enablecat /proc/sys/kernel/sysrq# enable all (temporary)echo 1 | sudo tee /proc/sys/kernel/sysrq# remote REISUB via triggerecho _reisub | sudo tee /proc/sysrq-trigger# bitmask quick ref 0disabled 1all commands enabled 176sync + remount + reboot only 438Debian default 16systemd default (sync only!)Source: kernel.org/doc/html/latest/admin-guide/sysrq.html
结论
Magic SysRq 是一个应急工具。作为一个系统管理员,它是你电源按钮之前的最后手段。
当系统冻结且没有响应时,REISUB 可以保存你的数据。它优雅地关机,即使正常关机已经不可能。
在个人机器上启用 REISUB。在服务器上限制它。测试它是否工作。最重要的是,记住命令都是小写的。
Magic SysRq 不会解决任何底层问题。把它看作一个应急安全网。使用它当你必须时。忽略它当你不需要时。
当你的系统在凌晨 3 点毫无征兆地冻结时,你会庆幸你测试过它。
一个最后的提示: 把 REISUB 序列写在一个物理便利贴上。例如,你可以把它贴在你的显示器上,或者你桌面的背面。




