神奇的系統請求鍵SysRq

什麼是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/

發佈了65 篇原創文章 · 獲贊 58 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章