神奇的系统请求键SysRq

SysRq 是Linux系统中一个神奇的组合键,可以在内核完全锁定时仍然响应。启用SysRq需在内核配置时设置 Magic SysRq key,并通过调整/proc/sys/kernel/sysrq的值来控制启用或禁用。了解如何使用 SysRq 命令键以应对系统问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是SysRq

It is a 'magical' key combo you can hit which the kernel will respond to
regardless of whatever else it is doing, unless it is completely locked up.

如何使能SysRq?

内核配置SysRq

若使用SysRq,需要在内核配置时设置Magic SysRq key(CONFIG_MAGIC_SYSRQ)为Y,内核配置信息如下:

  CONFIG_MAGIC_SYSRQ:                                                 
                                                                      
  If you say Y here, you will have some control over the system even  
  if the system crashes for example during kernel debugging (e.g., you
  will be able to flush the buffer cache to disk, reboot the system   
  immediately or dump some status information). This is accomplished  
  by pressing various keys while holding SysRq (Alt+PrintScreen). It  
  also works on a serial console (on PC hardware at least), if you    
  send a BREAK and then within 5 seconds a command keypress. The      
  keys are documented in <file:Documentation/sysrq.txt>. Don't say Y  
  unless you really know what this hack does.                         
                                                                      
  Symbol: MAGIC_SYSRQ [=y]                                            
  Type  : boolean                                                     
  Prompt: Magic SysRq key                                             
    Location:                                                         
      -> Kernel hacking                                               
    Defined at lib/Kconfig.debug:352                                  
    Depends on: !UML                                                  
    Selected by: KGDB_SERIAL_CONSOLE [=y] && KGDB [=y] && TTY [=y] 

启用/禁用SysRq功能

/proc/sys/kernel/sysrq是内核提供给用户态可以控制SysRq启用与否的接口,如果/proc/sys/kernel/sysrq内容为0, 则SysRq被禁用; 如果/proc/sys/kernel/sysrq内容为1, 则SysRq被启用. 关于/proc/sys/kernel/sysrq的更多描述, 请参考path/to/kernel/Documentation/sysrq.txt

启用SysRq

echo "1" >/proc/sys/kernel/sysrq

禁用SysRq

echo "0" >/proc/sys/kernel/sysrq

如果需要永久启用或者禁用SysRq功能,则可在/etc/sysctl.conf中设置kernel.sysrq = 1 (启用SsyRq)或kernel.sysrq = 0 (禁用SysRq)

# sysctl kernel.sysrq
kernel.sysrq = 0

# sysctl -w kernel.sysrq=1
kernel.sysrq = 1

# vi /etc/sysctl.conf
...
# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 1
...

如何使用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重启系统.

参考资料

# 最权威的文档, 最好参考当前运行的kernel附带的文档

<Kernel Source>/Documentation/sysrq.txt: sysrq.txt

# 使用SysRq键安全重启挂起的Linux

http://www.vpsee.com/2013/10/safe-reboot-linux-with-the-magic-sysrq-key/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值