Linux 作業系統啟動過程分析

文/圖:WJL

對於 Linux 系統管理員來說,日常的工作除了系統環境架設和部署服務外,各種故障的分析和處理也是家常便飯。了解 Linux 作業系統啟動過程,正是解決系統故障的第一步。

在形形色色的 Linux 作業系統故障當中,與系統啟動相關的問題出現的機率非常高,破壞程度也比較嚴重。很多系統管理員因為對系統啟動的過程不太熟悉,當出現這類問題時往往束手無策,只能靠重裝系統和恢復備份來予以解決。雖然問題最終能搞定,但整個過程費時費力,而且也無法真正找到原因。

系統啟動過程分析

其實很多與系統啟動相關的故障雖然現象上比較恐怖,但是其原因很簡單。尤其是當對 Linux 系統啟動過程有了比較充分了解的情況下,可能只需要幾個簡單步驟就能夠修復。本文將以與 Red Hat Enterprise Linux(RHEL) 相容的 Oracle Linux 為例,重點地分析和介紹一下 Linux 作業系統啟動過程。

目前市面上所發行的 Linux 版本多達幾百種,雖然使用方法各有不同,但其運行結構都是一樣的,包括核心、執行函式庫、Shell 以及應用工具集四個部分,故啟動過程也大同小異。我們可以根據這些特點,將系統啟動過程分成四個階段,分別是硬體自檢、作業系統啟動引導管理器載入和運行、核心和映像檔案系統載入、及服務啟動和初始化。

BIOS 啟動自檢

在主流伺服器和個人電腦主機板上,都會被嵌入一顆可反復寫入的記憶體晶片,保存當前系統的硬體設定和操作人員對參數的設置,稱為 CMOS(Complementary Metal Oxide Semiconductor) 晶片。既然是記憶體晶片,由使用者設置的內容,就必須靠主機板電池供電方可保存。在該晶片中,存放著一段稱為 BIOS(Basic Input/Output System) 的程式碼。我們可以把它理解為一個小型、功能單一的嵌入式系統,用於連接週邊關鍵設備,與硬體的最底層級別界面,並接受使用者對設備環境的一些初始設置如 CPU 特性、軟硬、顯示器、鍵盤等部件的底層資訊。BIOS 程式本身被固化在 CMOS 中,每次設置的結果,需要通過主機板電池供電才能在 CMOS 中保存(圖1)。

圖1:2000 年前的 BIOS 界面。
圖1:2000 年前的 BIOS 界面。

POST 自檢

當每次開機時 BIOS 都會運行 POST (Power on Self Test) 程式,對整個伺服器所配置的硬體設備如 CPU、記憶體、顯示卡、輸入輸出設備等自檢。完成之後將會根據使用者設置去尋找相應的啟動設備如硬碟、光碟機、支援 PXE 功能的網路卡以及USB設備等,並移交引導權給該設備。初始化後系統會讀取硬碟設備上的 0 磁頭 0 柱面 1 磁區。這個磁區一般是作業系統引導磁區,因為在這個 512 位元組大小的磁區中,存放著整個系統的主引導記錄 MBR(Master Boot Record)。BIOS 會將該磁區內容讀取並載入到記憶體中運行,然後由作業系統的啟動引導管理程式,實現後續的啟動過程(圖2)。

圖2:POST 自檢過程。
圖2:POST 自檢過程。

UEFI 替代 BIOS

在伺服器上,由於 BIOS 中整合了如 RAID 控制器、電源管理卡,硬體設備健康檢查等額外功能,所以設置內容較桌面機複雜。較新款的伺服器設備已經開始支援使用 UEFI (Unified Extensible Firmware Interface) 來替代 BIOS。UEFI 提供了更好的互通性,更強大的硬體設備和檔案系統支援,以及更豐富的設置項,但卻會導致自檢過程延長,過程甚至可能會達到十多分鐘。在長時間的啟動自檢過程中,錯誤隨時可能出現。當出現問題時,BIOS 通常會出現各種類型的報警提示,包括長短不一的警告音效,伺服器面板上的不同訊號燈也會有進一步指示。如果系統啟動到這個過程中報錯或者無法進行下去,即表示整個硬體環境有問題,和作業系統無關。因此排查的方向和思路,自然是在硬體層面上(圖3)。

圖3:BIOS 後繼者 UEFI。
圖3:BIOS 後繼者 UEFI。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *