創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2021年7月18日 星期日

Magic SysRq key

概要

使用電腦的人難免有當機的經驗,有時不得不把電腦強迫關機或重新開機,也許按Reset鈕或電源按鈕,再不行就把電源插頭拔了總可以吧。然而這麼做,可能讓電腦系統產生一些問題,例如資料遺失,或者檔案系統損壞而無法正常開機。如果是使用Linux,在採取這種強烈手段之前,請記得,Linux內核提供了“系統請求鍵”的功能,只要內核還能正常運行,利用一序列的幾個按鍵,即可把系統請求命令傳送給內核,如此就可以讓內核安全地重新啟動,不必冒著上述風險拔插頭。

本文只是簡單介紹如何使用Magic SysRq key讓Linux系統安全重啟,並不是這方面的詳盡使用指導,在文末的參考可以找到更清楚的解釋。

Magic SysRq key

要想使用Magic SysRq Key之前,有二先決條件:一是內核在編譯時啟用了 CONFIG_MAGIC_SYSRQ 選項;二是系統啟動後啟用想用的功能項目,這方面可有不同做法,像Ubuntu將設定值寫在 /etc/sysctl.d/10-magic-sysrq.conf 中。

除非特殊情形,否則一般目前的Linux發行版的內核在編譯時已啟用相關選項,也預設啟用了部分功能項目(預設全啟用可能導致安全性問題)。不同發行版也可能有不同作法,使用者不一定能做太多調整,而且多數使用者也無須做這方面調整。所以這裡就不耗時間介紹如何啟用,直接講如何使用。

以104鍵盤而言,SysRq鍵的位置在F12右邊,Insert的上面,與Print Screen同一按鍵,但有些鍵盤並不會印出SysRq字樣。若仍不清楚,請見下圖[1]標示的紅框處:

如果是筆記本電腦的鍵盤,該鍵的位置極可能不同,而且多半還要結合Fn鍵來使用,有必要時請查閱筆記本電腦的說明書。以下為方便說明,僅以104鍵的QWERT鍵盤為例;再者,不同CPU架構機器所用的按鍵組合有所不同,以下僅以x86做說明。

要在Linux上以SysRq鍵傳送命令給內核的按鍵組合是:ALT + SysRq + 命令鍵。若碰到所用鍵盤難以同時處理多鍵齊按,可以試試:按 ALT ,再按 SysRq,放開 SysRq ,按命令鍵,完成後放開所有鍵。

幾個命令鍵說明

  • b:馬上重啟reboot系統,不做sync或unmount磁碟。
  • e:傳送SIGTERM給所有程序,除了init。
  • h:顯示幫助。實際上,非列在命令鍵的鍵都是顯示幫助。
  • i:傳送SIGKILL給所有程序,除了init。
  • o:關機,如果有正確設置且支援的話。
  • r:關閉鍵盤raw mode(X11用)。
  • s:同步sync所有已掛載的檔案系統。
  • u:以唯讀方式重新掛載所有已掛載的檔案系統。

※Linux內核說明文件[2]說命令鍵是case sensitive大小寫有別,但在本人的機器上實際測試時並非如此。

如果正在使用桌面環境,使用上述SysRq鍵組合並無法看到回應的訊息,可以先切換到某個tty,如按 Ctrl+Alt+F1 切到 tty1 ,再按上述SysRq鍵組合時即可看到回應的訊息。

安全重啟

當Linnux發生當機,想安全重啟時,按下 ALT + SysRq 別放,然後依序逐一緩慢按一下這六個鍵[3]:

r e i s u b

記得這六個鍵之間要稍暫停一下,好讓前一工作完成再繼續往下。如果可能的話,可以在 tty 觀察一下執行命令時所回應的訊息。

有幾種方式可方便記住這六個鍵序,譬如把更忙錄的英文字 busier 的六個字母前後順序㒹倒過來就成了reisub。

結語

Magic SysRq key只要是Linux內核還在正常運行,不論目前電腦正在進行什麼事,內核都會做出相對的回應。也就是說上述安全重啟的動作,即使在非當機的狀況下也是會有作用的,並不建議在非當機時隨意執行。

以上只淺談了Magic SysRq key的一個使用場景:安全重啟。實際上它還有其他方面的用途,想進一步了解的人可自行從文末的參考找到更多資料。

最後要提醒一點,在特定情況下,像內核錯誤kernel panic或硬體失效導致內核無法正常運行時,Magic SysRq key可是沒作用的。

參考

  1. System request
  2. Linux Magic System Request Key Hacks
  3. Magic SysRq key
  4. 使用 SysRq 鍵讓當機的 Linux 安全地重新開機

沒有留言:

張貼留言