运维高级故障排除与恢复-SysRq

SysRq按键的位置:不同键盘布局的详细说明

1. 标准 104/105 键键盘(最常见)

这是台式机和外接键盘最常见的布局。

  • 标识 :键帽上通常会同时印有 Print ScreenSysRq ,有时还有 PrtScPrtScn 等缩写。

  • 位置:位于键盘右上角的功能区。

  • 典型排列顺序Insert | Home | Page UpDelete | End | Page DownPrint Screen SysRq | Scroll Lock | Pause Break

仅仅在 Linux 系统里按键盘上的 SysRq 键是无效 的。你需要满足几个必要条件才能让它工作。


核心条件:必须在正确的"控制台"上

SysRq 是内核级别的功能,它只监听来自 系统控制台 的输入。

  • 什么是系统控制台? 简单说,就是服务器直接连接的显示器和键盘,或者是虚拟化的等效物(如 KVM、云服务器的 VNC/Serial Console)。

  • 什么不是系统控制台? 你通过 SSH 远程登录的终端会话、图形界面(GNOME, KDE)里打开的终端窗口,这些都不是系统控制台。

举个例子:

如果你的服务器在机房,你通过 SSH 从办公室的电脑连接过去。当服务器卡死时,你在办公室电脑的键盘上按 Alt+SysRq完全没有用的。你必须到机房的服务器显示器前,或者通过 KVM over IP 连接到它的控制台,在那里按键才有效。


为什么在 SSH 或桌面终端里无效?

  1. SSH:这是一个网络连接。当系统内核严重卡死时,网络栈、SSH 服务进程可能都已经无法响应了,内核自然无法通过网络接收到你的 SysRq 命令。

  2. 图形界面终端 :在图形界面(如 X Window System)下,你的键盘输入首先被图形服务器(X Server)捕获和处理。在系统卡死时,X Server 本身可能已经崩溃或无响应,它无法将 Alt+SysRq 这个特殊的组合键正确地传递给底层的内核。


正确的工作流程与场景

为了让 SysRq 工作,你必须遵循这个路径:

用户意图 → 在物理/虚拟控制台的键盘上按下组合键 → 内核直接接收并处理

有效场景示例:
  1. 物理服务器:你站在服务器前,直接在它的键盘和显示器上操作。

  2. IDC/KVM:你通过机房提供的 KVM over IP 设备,远程模拟成了坐在服务器前的人。

  3. 云服务器(阿里云/ AWS/ 腾讯云等) :这是最常见且关键的用法 。当 SSH 无法连接时,你通过云平台的管理控制台,使用 VNC 连接Serial Console 功能登录。这个 VNC 窗口就模拟了服务器的"显示器",你在里面按下的键会直接发送给内核。

无效场景示例:
  • 在你自己办公用的 Windows/Mac 电脑上,通过 MobaXterm 或 Terminal SSH 到 Linux 服务器,然后在本地键盘上按 Alt+Print Screen

  • 在 Linux 服务器的 GNOME 桌面环境中,打开一个 gnome-terminal 窗口,然后在这个窗口为焦点时按下 Alt+Print Screen


如何确认 SysRq 已启用并测试?

即使你在正确的控制台上,也需要先确保 SysRq 功能是开启的。

  1. (在系统正常时,通过 SSH 或终端)检查并启用 SysRq

    bash 复制代码
    # 检查状态
    cat /proc/sys/kernel/sysrq
    # 如果输出不是 1,则启用它
    echo 1 > /proc/sys/kernel/sysrq
  2. (通过 VNC/物理控制台)进行测试

    • 连接到服务器的 VNC 或物理控制台

    • 确保焦点在控制台窗口内。

    • 按下:Alt + SysRq + h (按住 AltSysRq,再按 h,然后全部松开)。

    • 成功标志:如果屏幕上打印出一大段 SysRq 命令的帮助信息,恭喜你,它工作正常!

总结

操作 是否有效 原因
在 SSH 会话里按 Alt+SysRq 无效 内核无法通过网络接收命令
在图形界面的终端里按 Alt+SysRq 通常无效 X Server 拦截或无法传递命令
在物理控制台/VNC/Serial Console 里按 Alt+SysRq 有效 内核直接接收键盘输入

结论:SysRq 是一个强大的"最后手段",但它只能在"现场"(物理或虚拟控制台)使用,无法"远程"(通过SSH)触发。 这就是为什么云服务器的 VNC 控制台功能对于运维如此重要的原因之一。


我们使用这个能实现什么功能?

SysRq 能实现的功能非常强大,可以大致分为三类:急救类信息诊断类危险操作类。所有这些功能都是直接与 Linux 内核对话,绕过整个正常的用户空间。

以下是 SysRq 功能的详细分类说明:


第一类:急救与安全恢复(最常用)

这部分是系统管理员最常用的功能,目的是在系统濒临死亡时,进行有序的恢复或重启,最大限度地保护数据。

  1. s - Sync(同步)

    • 功能:立即将内核缓存中所有未写入磁盘的数据(包括文件元数据)强制同步到硬盘。

    • 场景 :系统卡死,你担心内存中的数据丢失。这是安全重启前最关键的一步,相当于不经过正常流程,直接喊内核"快把东西都存盘!"。

  2. u - Unmount(卸载)

    • 功能 :将所有已挂载的文件系统以只读方式重新挂载。

    • 场景:在同步数据后,这样做可以防止任何新的写操作,确保文件系统在重启过程中处于一个一致、安全的状态。

  3. b - Boot(重启)

    • 功能 :立即重启计算机,不进行任何进一步的清理

    • 场景 :在执行了 syncunmount 之后使用。警告:如果单独使用,相当于硬重启,可能导致数据损坏。

  4. e - Terminate(终止)

    • 功能 :向所有进程(除了 init)发送 SIGTERM 信号。这是一个友好的终止信号,允许进程保存状态、清理临时文件后退出。

    • 场景:给所有程序一个"体面结束"的机会。

  5. i - Kill(杀死)

    • 功能 :向所有进程(除了 init)发送 SIGKILL 信号。这是一个强制杀死信号,操作系统会立即收回进程占用的所有资源。

    • 场景 :清理那些不响应 SIGTERM 的"僵尸"进程或顽固进程。

经典组合:REISUB

将以上功能组合起来,就形成了著名的安全重启序列,它模拟了一个正常关机的流程:

  • r: 抢回键盘控制权

  • e: 友好地结束所有进程

  • i: 强制杀死剩余进程

  • s: 同步数据到磁盘

  • u: 将文件系统挂载为只读

  • b: 重启

  • 在整个 R-E-I-S-U-B 序列的输入过程中,Alt 键和 SysRq 键需要从头到尾保持按住状态 ,直到你按完最后一个字母 B 之后,才能松开它们。


第二类:信息诊断与调试

当系统出现问题但尚未完全死锁时,可以用这些命令来获取系统状态信息,帮助你定位问题根源。这些信息会直接打印在你的控制台屏幕上。

  1. t - Task list(任务列表)

    • 功能:将当前所有任务(进程)的列表及其详细信息(如状态、PID、内存占用等)输出到控制台。

    • 场景:系统极慢时,查看是哪个进程消耗了所有 CPU 或内存。

  2. m - Memory info(内存信息)

    • 功能:将当前系统的内存使用情况(包括物理内存、交换空间)转储到控制台。

    • 场景:怀疑内存耗尽(OOM)时,快速查看内存状态。

  3. p - Registers(寄存器)

    • 功能:将所有 CPU 寄存器的内容输出到控制台。

    • 场景:高级内核调试,用于分析导致内核恐慌或错误的精确指令。

  4. l - Backtrace(回溯)

    • 功能:为所有活动 CPU 打印堆栈回溯(stack backtrace)。这显示了每个 CPU 正在执行什么函数。

    • 场景:系统死锁时,查看内核卡在了哪个函数里。

  5. w - Task state(任务状态)

    • 功能 :输出处于 不可中断睡眠状态 (通常是等待 I/O,状态显示为 D)的任务列表。

    • 场景 :诊断系统是否因为 I/O 瓶颈而卡死。如果有很多 D 状态进程,通常是磁盘或存储出了问题。


第三类:特殊与危险操作

这类操作通常用于特定调试或极端情况,使用需格外谨慎。

  1. c - Crashdump(崩溃转储)

    • 功能 :手动触发一次系统崩溃,以便生成一个 kdump 崩溃转储文件(如果配置了 kdump 服务)。

    • 场景 :内核开发者和高级调试人员使用,用于事后分析内核崩溃的完整内存镜像。对普通用户来说,这会导致系统立即崩溃重启。

  2. o - Power Off(关机)

    • 功能:立即关闭计算机(如果硬件和内核支持)。

    • 场景 :比 b 更彻底,直接关电源。

  3. n - Nice(调整优先级)

    • 功能 :用于调整实时任务的优先级。极危险,可能导致系统立即锁死。

    • 场景:仅限内核 RT(实时)开发调试。

  4. f - OOM Killer(内存耗尽杀手)

    • 功能:手动触发 OOM(内存耗尽)杀手,让它选择一个高内存消耗的进程并杀死它,以释放内存。

    • 场景 :系统因内存耗尽而卡死,但你不知道是哪个进程,可以手动触发让它自动选择一个"牺牲品"。可能杀死关键进程。

  5. 0 - 9 - Log level(日志级别)

    • 功能 :设置内核控制台日志级别。例如,0 只显示紧急信息,7 显示所有调试信息。

    • 场景:控制控制台输出信息的详细程度。

总结表格

类别 关键命令 功能描述 使用场景
急救 s, u, b 同步、卸载、重启 安全重启系统 (REISUB)
急救 e, i 终止、杀死进程 清理进程,为重启做准备
诊断 t, m 显示进程和内存信息 诊断高负载、OOM问题
诊断 w 显示不可中断进程 诊断 I/O 瓶颈
诊断 l, p 显示堆栈和寄存器 高级内核调试
危险 c 触发崩溃转储 获取内核崩溃完整镜像
危险 f 触发 OOM Killer 强制释放内存(有风险)

如何查看所有命令?

在已启用 SysRq 的控制台上,按下 Alt + SysRq + h,系统就会在控制台上打印出完整的命令列表和帮助信息。

核心价值 :SysRq 让你在系统完全失控时,依然能执行有序关机获取诊断信息,从而避免数据损坏并找到问题根源。它是系统管理员手中最后的"王牌"。

相关推荐
RPA机器人就用八爪鱼3 小时前
RPA自动化程序:企业数字化转型的智能引擎
运维·自动化·rpa
FreeBuf_3 小时前
现代汽车确认遭遇数据泄露, 攻击者连续窃密9天获取用户驾照信息
安全·web安全·汽车
EkihzniY3 小时前
人证查验一体机:守护医院产房安全
安全
demodashi6663 小时前
Linux下ag搜索命令详解
linux·运维·windows
無识3 小时前
Linux-第四章web服务
linux·运维·服务器
Axis tech3 小时前
如何应用动作捕捉技术让户外重体力工作更安全
科技·安全
fie88893 小时前
在CentOS 7上集成cJSON库的方法
linux·运维·centos
爱吃橘的橘猫4 小时前
如何解决VMware虚拟机中Linux系统终端不显示ens33 inet IP地址的问题
linux·运维·服务器·虚拟机
佐杰4 小时前
Jenkins使用指南1
java·运维·jenkins