Linux 啟動故障與排除

啟動服務相關錯誤

第四種錯誤類型是與啟動服務相關的錯誤。當系統啟順利地經歷了前三個階段,在最後一個階段即系統初始化和啟動服務的過程中出錯的概率較低,很少會導致嚴重的系統故障。但由於最後一個階段中涉及的內容比較多,尤其是系統的初始化會牽涉很多系統功能,所以仍然有可能會產生一些比較奇怪的問題。環境是一台單獨的 DL386 G6 的伺服器,無外接儲存裝置。具體故障現象是系統運行正常,但是每次當重啟伺服器的時候,所有的重啟命令包括 reboot,init 6 和 shutdown -r now 都不能執行成功,在終端上會出現錯誤資訊。
INIT: no more processes left in this runlevel
只能通過在伺服器上強行執行電源 reset,或者在系統中執行 poweroff 加冷開機的方式完成重啟。而且在系統正常運行時,也無法執行 setup 或者是 chkconfig –list 這一類的命令來定制服務自啟動狀態,且同樣會在終端上顯示以上錯誤訊息。這個問題看起來不嚴重,但是使用者每次對系統的重啟都不得不跑到資料中心去現場操作,非常麻煩和頭疼。在對該問題進行分析的時候,通過日誌檢查發現其實在終端和系統日誌 /var/log/messages,都同時出現了上述錯誤訊息,除此之外沒明顯錯誤。檢查的重點將集中在 /etc/inittab、/etc/rc.sysinit、/etc/rc.local 以及 /etc/rc.d/* 等檔案上。

不過顯然不能靠一個個地核對檔內容來對這些設定檔和腳本進行檢查,所以最簡單的方法,是借助於 rpm 命令的校驗功能,查看作業系統上由不同 rpm 安裝包所提供的檔裡哪些是經過修改的,然後再從中過濾一些可疑的檔進行進一步確認。
rpm -Va > rpm_Va    (ENTER)
以上命令表示校驗所有安裝套件,並將校驗結果輸出為一個文字檔。查看結果時,注意那些提示 MD5 值已經改變的設定檔(表示檔經過用戶手動修改)以及處於 Missing 狀態的檔(表示由 rpm 套件安裝的某個檔已經被刪除)。其實 rpm 的校驗命令在系統的 sosreport 功能中已經提供,sosreport 是系統組態資訊與日誌收集的工具,專門用來收集和打包常用系統資訊以提交給技術支援人員進行故障分析。該命令執行完成之後預設會在 /tmp 目錄下產生一個 bz2 格式的壓縮檔,所有 rpm 命令加不同選項的執行結果,都會在該壓縮包的 sos_command/rpm 目錄中。從收集的 rpm 命令校驗結果,很容易就會發現一些奇怪的地方。我們發現 /etc/rc.d/rc6.d 整個目錄都是處於 Missing 狀態的(圖29)。在 /etc/rc.d 目錄下其他的幾個 rc<N>.d 的目錄以及其中的服務連結檔,都是完好的。

圖29:通過校驗發現了被誤刪除的檔。
圖29:通過校驗發現了被誤刪除的檔。

同時使用 rpm 的反查功能,可發現 /etc/rc<N>.d 這幾個目錄其實都是由 chkconfig 以及 initscripts 這兩個包所安裝的。
rpm -qf /etc/rc3.d    (ENTER)
再去查看 chkconfig 以及 initscripts 會向系統安裝哪些檔時,也發現實際上 /etc/rc.d/rc0.d-/etc/rc.d/rc6.d 這幾個目錄,以及其中的連結檔,預設都是應該被安裝的。
rpm -ql chkconfig    (ENTER)
rpm -ql initscripts    (ENTER)
這就進一步說明了 /etc/rc.d/rc6.d,很可能是遭到了用戶的誤刪除,為了驗證這個想法,我們可以採用下面兩種方法,對 /etc/rc.d/rc6.d 目錄進行恢復。

第一種方案是使用 rpm,嘗試重新安裝 initscripts 以及 chkconfig 套裝,不過安裝的時候需要使用「–force、選項來強行覆蓋安裝。第二種方法是將 /etc/rc6.d 目錄,以及裡面的內容整個複製到 /erc/rc.d 目錄下。最終結果證明在恢復了 /erc/rc.d/rc6.d 目錄以及下面所有的連結檔之後原來的故障徹底消失。

這就是一個典型的因服務配置缺失所導致的服務異常的問題。

總結

在本文中我們完整地介紹了 Linux 作業系統啟動流程,歸納和總結了在 Linux 系統啟動過程中不同階段可能出現的問題。同時也通過一些具有代表性的案例,介紹了這類問題的分析思路和排除方法。事實上這些案例都來自於筆者所接觸過的使用者故障環境,而且其中有些問題,可能仍然會在不同生產環境中頻頻出現。希望該文能夠為廣大的 Linux 系統管理員和工程師,更有效率地分析和解決這類問題提供有價值的參考與借鑒。

作者簡介
WJL
資深Linux專家,具有多年大型Linux系統的管理經驗,現歸隱山林之中,以教導後學為樂。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。