開發環境 -- 強制重新啟動Linux的幾種好方法

2020-10-25 17:00:41

實際生產環境中某些情況下 Linux 伺服器系統在出現致命錯誤需要遠端進行重新啟動,通過常規的 reboot、init 6 等方法無法正常重新啟動(例如重新啟動時卡在驅動程式裡等情況),這時就需要通過下面介紹的幾種特殊的方法進行強制重新啟動。注意這些強制重新啟動的方法都是直接跳過 umount 檔案系統及 sync 等操作,可能導致資料損壞,不在特殊情況下請勿使用,當然這些都是 root 超級使用者才有許可權的哦。

 

1、reboot 命令:

直接通過執行 reboot -nf 命令,這樣重新啟動時可以指定跳過 init 的處理和 sync 操作,這樣可以避免大多數情況下的問題。

2、magic SysRq key 方法:

magic SysRq key 通過 proc 介面提供使用者直接發底層命令給 kernel 的功能,可以實現關機、重新啟動、宕機等操作,Linux kernel 需要開啟 CONFIG_MAGIC_SYSRQ 才可以支援 magic SysRq key。

執行下面兩條命令就可以直接強制重新啟動系統:

echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger

相應的直接強制關機的命令:

echo 1 > /proc/sys/kernel/sysrq echo o > /proc/sysrq-trigger

3、watchdog 方法:

如果 Linux kernel 未開啟 magic SysRq key 或者不起作用,可以嘗試使用 watchdog 重新啟動方法。watchdog 通過監控資料輸入是否正常可以實現在系統出現異常時自動重新啟動系統,這裡我們剛好可以借用的。

首先需要載入 watchdog 支援,這個和主機板硬體裝置有關,如果只需要軟體模擬的,可以執行:

modprobe softdog

命令載入軟體 watchdog 支援,接著再執行:

cat /dev/watchdog

命令,該命令會馬上退出並報錯,同時系統紀錄檔中就會提示:

softdog: Unexpected close, not stopping watchdog!

這就表示 watchdog 裝置是被意外關閉的而不是正常停止的,大約等待 60 秒之後你就會發現 Linux 系統自動重新啟動了。Linux watchdog 的異常等待時間是通過 /proc/sys/kernel/watchdog_thresh 設定的,一般預設為 60 秒。

4、IPMI 方法:

上面幾種方法都不能用?如果你的主機板剛好支援 IPMI 管理介面的話,那可以直接通過 IPMI 實現硬體上的強制關機或重新啟動。

首先載入 IPMI 支援:

modprobe ipmi_msghandler ipmi_devintf ipmi_si

確認 IPMI 裝置是否已找到:

ls -l /dev/ipmi*

如果輸出正常的話表示 IPMI 被正確載入了,接著安裝 ipmitool 這個管理工具。ipmitool 可以通過 IPMI 介面完成對本機或遠端主機的一系列管理操作。

這裡我們就用直接電源管理的,重新啟動系統:

ipmitool power reset

執行完成後主機就會馬上重新啟動,相應的關閉主機可以執行:

ipmitool power off

ipmitool 還可以實現在系統未啟動時遠端檢視監控主機板硬體狀態等功能,在 IPMI 可用的情況下 ipmitool 還是比較方便好用的。