秘密武器:使用 SysRq 鍵安全重啟掛起的 Linux

發表於2013-10-04

最近有臺 NFS 伺服器掛機,可以 ping 通,但不能 ssh 登陸,也不能透過本地終端登陸,只能重啟了。我們一般處理檔案伺服器這種型別的重啟都格外小心,不到迫不得已不會直接硬重啟。Linux 執行過程中(為了提高效能)會把大量的資料暫時放在記憶體快取中,而不是實時同步寫入到磁碟,Linux 根據情況只有在需要(觸發某條件)的時候才寫入磁碟,所以這個時候掛機,資料還留在記憶體,沒有辦法及時寫到磁碟,強制斷電重啟會造成資料不一致、部分資料丟失、檔案系統損壞等。

為了在這樣的情況下實現安全重啟,我們可以利用 SysRq,當然有個條件是,系統雖然罷工停止了對大部分服務的響應,但仍然能處理鍵盤的中斷請求。SysRq (System request) 常被稱為 Magic SysRq key,在 Linux 下它被定義為一系列按鍵組合,之所以說它 magic,是因為它常能在系統掛起、多數服務都無法響應的時候做點事(預定義的操作),而且能在磁碟資料安全的情況下完成重啟,除此之外還能捕獲一些有用的系統執行資訊。

首先確認當前使用的 Linux 核心支援 SysRq:

# grep "CONFIG_MAGIC_SYSRQ" /boot/config-`uname -r`
CONFIG_MAGIC_SYSRQ=y

如果系統預設關閉了 kernel.sysrq 的話,需要開啟。為了保證每次系統重啟核心引數都生效,建議把配置寫到 sysctl.conf 檔案裡:

# 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 安全重啟的推薦按鍵組合是 Alt + SysRq + R-E-I-S-U-B,先按下 Alt 鍵和 SysRq 鍵,然後依次按下 R E I S U B 鍵(不區分大小寫)。這個 R E I S U B 序列組合的意思是:

R – 把鍵盤設定為 ASCII 模式
E – 向除 init 外所有程式傳送 SIGTERM 訊號
I – 向除 init 外所有程式傳送 SIGKILL 訊號
S – 磁碟緩衝區同步
U – 重新掛載為只讀模式
B – 重啟系統

需要注意的是這些按鍵之間有順序,而且按鍵之間有時間間隔(因為要等待前一個操作的完成),推薦的時間間隔是:

R – 1 秒 – E – 30 秒 – I – 10 秒 – S – 5 秒 – U – 5 秒 – B

原文處,Terry 評論:

即使是 Magic Sysrq 對不 non-interruptible 的 system hang 也沒辦法。不過 Sysrq 在關鍵時刻能幫上大忙,避免資料不一致和丟失,甚至檔案系統損壞。

一般是這麼記的 => BUSIER 順序倒過來,意味著接下去會越來越忙?

我們通常只在意資料是否安全的同步到了磁碟,所以我們一般只用 S-B 組合,按下 Alt + SysRq + S 後等待 Emergency Sync complete 提示,同步完成確認後用 Alt + SysRq + B 立刻重啟。

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

相關文章