当前位置: 首页 > news >正文

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

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

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

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

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

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

  • 典型排列顺序Insert | Home | Page Up → Delete | End | Page Down → Print Screen SysRqScroll 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

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

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

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

    • 按下:Alt + SysRq + h (按住 Alt 和 SysRq,再按 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(重启)

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

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

  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 显示所有调试信息。

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

总结表格

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

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

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

http://www.dtcms.com/a/581461.html

相关文章:

  • word插入的图片显示不完全解决方法
  • 北京响应式h5网站开发网站优化排名推广
  • 面向强化学习的状态空间建模:RSSM的介绍和PyTorch实现(3)
  • 网站建设如何上传图片阿里云虚拟主机可以做几个网站吗
  • 文章精读:(CVPR2024)DemosaicFormer:用于HybridEVS相机的粗到细去马赛克网络
  • 红帽Linux-基本管理存储
  • LangGraph基础教程(1)---LangGraph的简介
  • IDEA + Spring Boot 的三种热加载方案
  • 有哪些摄影网站甘肃省建设厅官网
  • presto安装与使用
  • 信息论(三):霍夫曼编码
  • 002-GD32L235KBQ6 Keil工程移植J-Link RTT
  • 手机网站建设 苏州企石镇做网站
  • java的设计模式之桥接模式(Bridge)
  • 【Unity踩坑】Error MSB3774: 找不到 SDK“WindowsMobile, Version=10.0.26100.0
  • 网站二维码可以做长按识别吗深圳专业网站建设制作价格低
  • 图片优化 上传图片压缩 npm包支持vue(react)框架开源插件 支持在线与本地
  • React Native CLI的搭建
  • 世界互联网大会乌镇峰会:共话数字未来新可能
  • TeamCity更新包
  • 第8届 AiDD峰会 深圳 | “AI+领域”线:解锁未来科技新图景
  • 网站搭建服务器需要多少钱网站运营seo招聘
  • 结构自由度
  • Effective Python 第49条:用__init_subclass__记录现有的子类
  • 《PLC编程与MES系统开发学习指南》详细大纲
  • AbMole小课堂丨L-NAME:一氧化氮合酶(NOS)经典抑制剂在心血管及免疫研究中的应用
  • 【AI入门】通俗易懂讲AI(初稿)
  • 静力水准仪监测核心原理:如何实现高精度沉降监测?
  • 谷歌网站为何打不开网站栏目定位
  • 基于西门子1500仿真软件PLCSIM Advanced 7.0的本机Modbus TCP通信实例之Modbus TCP Sever建立(一)