Linux SysRq

当Linux 系统不能正常响应用户请求时, 可以使用SysRq小工具控制Linux.

一 SysRq的启用与关闭 

要想启用SysRq, 需要在配置内核时设置Magic SysRq key (CONFIG_MAGIC_SYSRQ)为Y. 对于支持SysRq的内核, /proc/sys/kernel/sysrq控制SysRq的启用与否. 如果/proc/sys/kernel/sysrq内容为0, 则SysRq被禁用; 如果/proc/sys/kernel/sysrq内容为1, 则SysRq被启用. 关于/proc/sys/kernel/sysrq的更多描述, 请参考<Kernel Source>/Documentation/sysrq.txt

可通过运行命令echo "0" >/proc/sys/kernel/sysrq和echo "1" >/proc/sys/kernel/sysrq暂时启用或禁用SysRq. 如果需要永久启用或者禁用SysRqs, 则可在/etc/sysctl.conf中设置kernel.sysrq = 1 (启用SsyRq)或kernel.sysrq = 0 (禁用SysRq)

二 SysRq的使用 

SysRq的命令键有 

'r'     - Turns off keyboard raw mode and sets it to XLATE. 

'k'     - Secure Access Key (SAK) Kills all programs on the current virtual 
          console. NOTE: See important comments below in SAK section. 

'b'     - Will immediately reboot the system without syncing or unmounting 
          your disks. 

'o'     - Will shut your system off (if configured and supported). 

's'     - Will attempt to sync all mounted filesystems. 

'u'     - Will attempt to remount all mounted filesystems read-only. 

'p'     - Will dump the current registers and flags to your console. 

't'     - Will dump a list of current tasks and their information to your 
          console. 

'm'     - Will dump current memory info to your console. 

'0'-'9' - Sets the console log level, controlling which kernel messages 
          will be printed to your console. ('0', for example would make 
          it so that only emergency messages like PANICs or OOPSes would 
          make it to your console.) 

'e'     - Send a SIGTERM to all processes, except for init. 

'i'     - Send a SIGKILL to all processes, except for init. 

'l'     - Send a SIGKILL to all processes, INCLUDING init. (Your system 
          will be non-functional after this.) 

'h'     - Will display help ( actually any other key than those listed 
          above will display help. but 'h' is easy to remember :-) 


在终端上同时按Alt, SysRq和命令键则会执行SysRq命令, SysRq键就是"Prent Screen"健. 比如Alt+SysRq+b则重启机器.  

如果使用telnet 或ssh连接到服务器则可以使用echo '<SysRq命令键>' > /proc/sysrq-trigger的方式执行SysRq命令, 比如echo 'b' > /proc/sysrq-trigger重启系统.

三 常用的SysRq命令(序列) 

3.1 重启机器的SysRq命令序列是 k(SAK) s(sync) u(umount) b(reboot) 

3.2 显示内存信息的SysRq命令是m(memory) 

3.3 显示当前任务信息的SysRq命令是t(task) 

四 参考材料 

<Kernel Source>/Documentation/sysrq.txt: sysrq.txt最权威的文档, 最好参考当前运行的kernel附带的文档. 或者去http://lxr.linux.no/source/Documentation/sysrq.txt查看

Oracle Metalink Note 228203.1: Alt SysRq Keys Utility on Linux
### Linux SysRq 调试使用方法 #### 什么是 SysRq 键? SysRq 是一种特殊的键盘组合键,用于触发内核级别的操作。它可以帮助管理员在系统出现问题时获取更多信息或执行某些紧急操作[^1]。 #### 如何启用 SysRq 功能? 要启用 SysRq 功能,可以采取以下两种方式之一: 1. 修改 `/etc/sysctl.conf` 文件并添加 `kernel.sysrq=1` 来永久启用该功能[^3]。 2. 动态修改配置文件中的值: ```bash echo 1 > /proc/sys/kernel/sysrq ``` 可以通过读取 `/proc/sys/kernel/sysrq` 的内容来确认当前状态: ```bash cat /proc/sys/kernel/sysrq ``` 返回值为 `1` 表示完全启用了 SysRq 功能[^2]。 #### 常见的 SysRq 组合键及其用途 以下是常用的 SysRq 组合键以及它们的功能: | 组合键 | 描述 | |--------|------| | Alt + SysRq + h | 显示帮助信息 | | Alt + SysRq + r | 将键盘切换回原始模式,恢复输入设备控制权 | | Alt + SysRq + s | 同步磁盘缓存到存储介质上 | | Alt + SysRq + u | 卸载所有已挂载的文件系统 | | Alt + SysRq + b | 强制重启系统 | | Alt + SysRq + o | 安全关闭系统 | 这些命令对于排查和修复严重问题非常有用[^4]。 #### 使用 SysRq 进行调试 当需要深入了解系统的运行状况或者捕获特定事件日志时,可以利用 SysRq 提供的相关选项完成任务。例如,调整 printk 日志级别以便于观察实时消息流: ```bash echo 8 > /proc/sysrq-trigger ``` 此命令会将打印等级设为最高级(即显示所有类型的日志),从而方便开发者定位潜在错误位置[^5]。 另外,在遇到极端情况下无法正常登录 shell 或者图形界面崩溃等问题时,上述提到的一些基本操作如同步数据(`s`)、卸载分区(`u`)再强制关机(`b`)就显得尤为重要了。 #### 注意事项 尽管 SysRq 非常强大,但在生产环境中应谨慎使用部分危险指令(比如无条件重启动作)。建议仅限维护人员掌握其具体实现细节,并合理规划权限管理策略以防止误操作带来的风险。 --- ### 示例代码展示如何动态开启 SysRq 并测试同步功能 下面是一个简单的脚本例子演示怎样临时激活 sysrq 特性和尝试发送 sync 请求给内核: ```bash #!/bin/bash # Enable SysRq temporarily by writing '1' to the control file. echo "Enabling SysRq..." echo 1 > /proc/sys/kernel/sysrq # Send a Sync request using SysRq mechanism. echo "Syncing disks via SysRq..." echo s > /proc/sysrq-trigger echo "Disk syncing completed." ``` 以上脚本先确保 SysRq 已被打开,接着发出一次安全的数据刷新请求至硬盘控制器层面上去处理未决更改项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值