Linux 啟動故障與排除

文/圖:WJL

對於 Linux 系統管理員來說,日常的工作除了系統環境架設和部署服務外,各種故障的分析和處理也是家常便飯。上次我們詳細描述了 Linux 啟動所經過的四個階段,這次我們就來介紹常見的Linux 系統啟動相關的錯誤分析與排除方法。

不同的 Linux 版本在細節有些差異,但是其核心過程都是一樣的。充分了解 Linux 啟動的流程,能夠有助於我們透過不同的故障現象,快速判斷和定位問題所在,並提供正確的分析思路解決方案。在下面的這些例子中,我們統一以 CentOS 6.5 作為演示的系統版本,相關的操作也可以使用在 RHEL(Red Hat Enterprise Linux) 以及 Oracle Linux 系統上。

硬體錯誤

第一種錯誤類型是硬體錯誤,一般出現在系統啟動的第一階段,啟動過程會被終止。導致硬體錯誤原因很多,只要是伺服器上的 CPU、記憶體、網路卡、磁碟、設備匯流排、主機板、電路等出現故障,或者是設備的韌體不相容。BIOS  中的錯誤設置,也會觸發和導致自檢失敗和告警甚至伺服器直接重啟,在不同品牌錯誤的現象也不同。硬體錯誤其實和作業系統啟動無關,當系統自檢時,錯誤提示可告知用戶哪部分的設備會有問題,一些伺服器上會有專門的硬體故障報警燈亮起。如果啟動錯誤時,沒有任何與Linux相關的資訊出現(如 GRUB 啟動引導資訊),則有理由懷疑故障可能來自於硬體層面,而非作業系統。

錯誤設置磁碟順序

之前曾經接觸過一個一台 HP DL380 伺服器,而且該伺服器上原有 40GB 和 140GB 兩塊硬碟,分別作為系統和資料磁碟,同時在作業系統層中設定了 40GB 硬碟使用軟 RAID-0 模式。但後期系統磁碟空間不足,所以直接加入了新的 40GB 硬碟,並計畫在系統中對原有的 Raid-0 陣列進行擴容。但在插入硬碟重啟之後,伺服器顯示 None System or Disk Error,拔除該硬碟重啟之後還是出現同樣的資訊。此錯誤出現的時候,沒有任何的系統啟動以及裝載啟動引導管理器 GRUB 資訊,足以證明系統啟動時沒有任何讀取 MBR 的動作。新加入的磁碟一般情況下是空硬碟,自然沒有任何 MBR 以及啟動引導管理程式。如果因為種種設置原因伺服器又自動從該硬碟引導系統的話,則極有可能報上述的錯誤。

修復方法

原來 HP DL380 加入新硬碟後,必須在 BIOS 中為該磁碟建立一個陣列。但是新的陣列會預設跳到最前成為第一陣列,也就會成為系統能識別到的第一塊硬碟。由於這塊新硬碟本身是空的,故導致系統啟動的錯誤。修復的方法也簡單,在 BIOS 中重新設定系統從原來的陣列啟動,或者手動將新加的陣列調為第二陣列即可。針對這一類的問題,我們判斷的一個標準來源於用戶執行了什麼樣的操作,以及設備啟動之後,是否有任何與系統相關的資訊出現,如作業系統資訊,裝載啟動引導程式的資訊等,從而判斷問題出在硬體還是作業系統,減少不必要的麻煩。

GRUB 相關錯誤

圖1:去掉 /boot/grub/grub.conf 中的 rhgb quiet。
圖1:去掉 /boot/grub/grub.conf 中的 rhgb quiet。

排除設備硬體與 BIOS 設置問題後,錯誤不外乎在載入和運行載入啟動引導管理器、載入核心與映像檔檔案系統,或服務啟動和系統初始化這三個階段當中,當中大部分是與啟動引導管理器 GRUB 相關的問題。為了能更好地觀察和定位這類問題,建議安裝系統後,首先將 /boot/grub/grub.conf 中的 rhgb quiet 這個配置去掉(圖l)。這樣系統在啟動時將把包括核心載入、硬體檢測、系統初始化和服務啟動等方面的資訊顯示在螢幕上,以便觀察和排錯。

在系統啟動的第二階段,系統讀取 MBR 中的啟動管理器 stage1 之後,會載入 Start.S 以及啟動後面的 stage1.5 或 stage2,並由啟動引導管理器來載入作業系統核心,以及讀取和運行映像檔檔案系統 initramfs,完成這些步驟之後,便會以唯讀方式來掛載根檔案系統。確定開機磁碟分割以及根分割區、核心以及映像檔檔案系統 initramfs 等重要資訊,都是由設定檔 /boot/grub/grub.conf 來決定的。如果在此設定錯誤,必定會導致系統啟動錯誤,這是最常見的錯誤。要模擬出來很簡單,如果開機之後能看到 GRUB 啟動界面(圖2),並且按 e 可以進入到 GRUB 配置選項(圖3),啟動引導管理器包括 GRUB 的 stage1 和 stage2 應該都沒有問題,而且 grub.conf 也是存在的。

圖2:去掉 rhgb quiet 後的畫面。
圖2:去掉 rhgb quiet 後的畫面。

 

圖3:開機之後可看到 GRUB 啟動引導界面。
圖3:開機之後可看到 GRUB 啟動引導界面。

因為 GRUB 擁有類似 VI 編輯器的編輯模式「e」、附加模式「a」以及命令模式「c」。這些模式能夠被開啟的前提,就是 GRUB 的 stage2 被正常載入。而 stage2 能夠載入成功的前提,是stage1 和 Start.S 沒有問題。至於 gurb.conf 判斷起來就更簡單了,如果在沒有 grub.conf,系統會直接停在 GRUB 所提供的 GRUB Shell 上。如果 gurb.conf 存在,我們只是在 grub.conf 中指定了錯誤資訊的情況下,最終的錯誤是在啟動的第三階段被顯示出來的。那麼具體可能會在 grub.conf 中有哪些配置錯誤呢?其實無外乎三種:指定了錯誤的核心檔、指定了錯誤的 initramfs 檔以及指定錯誤的開機磁碟分割,我們來逐一看看這三種配置錯誤會分別導致什麼樣的現象。

發佈留言

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