Linux 開機程序由數個階段所組成,每個階段分別由元件所代表。以下清單簡短概述開機程序,以及所有相關主要元件的功能。
BIOS 啟動電腦之後,BIOS 會啟始螢幕和鍵盤並測試主記憶體。在此階段中,機器不會存取大量儲存媒體。接著,會從 CMOS 值載入目前日期、時間和最重要的周邊。識別第一個硬碟及其幾何之後,系統控制將會從 BIOS 轉到開機載入器。
開機載入器 第一顆硬碟的第一個實體 512 位元組資料磁區,會載入主要記憶體。接著,在此磁區開頭的開機載入器會接管開機程序。開機載入器執行的指令,決定其他部份的開機程序。因此,第一個硬碟的前 512 位元組是主開機紀錄 (MBR)。然後,開機載入器會將控制傳送到實際作業系統,在這裡是指 Linux 核心。如需更多關於 GRUB (也就是 Linux 開機載入器) 的詳細資訊,請參閱節 18.0, 開機載入器。
核心和初始 RAM 檔案系統 為了送出系統控制,開機載入器會將核心和初始 RAM 式檔案系統 (initramfs) 兩者都載入記憶體。核心可以直接使用 initramfs 的內容。initramfs 包含一個名為 init 的小執行檔,它可以處理實體根目錄檔案系統的裝載。若存取大量儲存之前需要什麼特殊硬體驅動程式的話,那一定就是 initramfs 了。如需有關 initramfs 的詳細資訊,請參閱節 17.1.1, initramfs。
initramfs 上的 init 本程式將執行裝載適當根目錄檔案系統所需的全部動作,例如提供必要檔案的系統核心功能,並且提供包含 udev 之大量儲存控制器的設備驅動程式。找到根目錄檔案系統後,將會檢查是否有錯誤並進行裝載。若裝載成功,將會清除 initramfs 並執行根目錄檔案系統上的 init 程式。如需有關 init 的詳細資訊,請參閱節 17.1.2, initramfs 上的 init。如需更多有關 udev 的詳細資訊,請參閱節 21.0, 使用 udev 進行動態核心設備管理。
init init 會透過提供數個不同層級所提供的不同功能來負責系統實際開機作業。節 17.2, init 程序 中會描述 init。
initramfs 是一個小型 cpio 歸檔,其可由核心載入 RAM 磁碟。在實際根目錄檔案系統裝載之前,它提供可讓程式執行的最小 Linux 環境。BIOS 常式會將這個最小的 Linux 環境載入記憶體,且除了記憶體要求外沒有其他特定硬體需求。此外,initramfs 還必須提供一個名為 init 的執行檔,這個執行檔會在處理開機程序的根目錄檔案系統上執行實際的 init 程式。
在根目錄檔案系統能夠裝載以及作業系統可以啟動之前,核心需要相應的驅動程式來存取根目錄檔案系統所在的設備。這些驅動程式可能包含特定類型硬碟的特殊驅動程式,或者甚至包含存取網路檔案系統的網路驅動程式。initramfs 上的 init 還會載入根目錄檔案系統所需的模組。當模組載入完成之後,udev 便會為 initramfs 提供所需的設備。在後來的開機程序中,變更根目錄檔案系統後,必須重新產生這些設備。這是由 init 執行。
如果您要在已完成安裝的系統上變更硬體 (硬碟),且必須在核心中安裝開機時此硬體所需的驅動程式,那麼您就必須更新 initramfs。更新 initramfs 與更新其前身 initrd 是採用一樣的更新方式,即是呼叫 mkinitrd。不使用任何引數來呼叫 mkinitrd 將會建立一個 initramfs。呼叫 mkinitrd -R 則會建立一個 initrd。在 SUSE Linux Enterprise® 中, /etc/sysconfig/kernel 內的變數 INITRD_MODULES 會指定要載入的模組。 安裝之後,此變數會自動設定為正確值。 模組會確實依據它們在 INITRD_MODULES 中出現的順序來載入。只有當您依靠 /dev/sd? 設備檔案的正確設定時,這一點才重要。然而在目前系統中,您也可以使用 /dev/disk/ 底下以幾個不同子目錄分類的設備檔案,這些子目錄的名稱為 by-id、by-path 和 by-uuid,而且總是代表相同磁碟。
重要: 更新 initramfs 或 initrd
開機載入器將採用與核心相同的方式載入 initramfs 或 initrd。更新 initramfs 或 initrd 之後不需要重新安裝 GRUB,因為開機時 GRUB 會在目錄搜尋正確的檔案。
Initramfs 上的 init 其主要目的是準備裝載實際根目錄檔案系統,以及存取實際根目錄檔案系統。根據您的系統組態,init 負責下列工作。
根據硬體組態,存取您電腦的硬體元件可能需要特殊的驅動程式 (特別是您的硬碟)。若要存取根目錄檔案系統,核心需載入適當的檔案系統驅動程式。
核心為每個載入的模組產生設備事件。udev 會處理這些事件,並且會在 RAM 檔案系統的 /dev 中產生所需要的設備特殊檔案。如果沒有這些特殊檔案,檔案系統就無法進行存取。
如果您將系統設定為 RAID 或 LVM 之下的根目錄檔案系統,init 會設定 LVM 或 RAID,以便之後能夠存取檔案根目錄系統。如需有關 RAID 的資訊,請參閱節 7.2, 軟體 RAID 組態。如需更多關於 LVM 的詳細資訊,請參閱節 7.1, LVM 組態。如需更多 EVMS 與特殊儲存設定的相關資訊,請參閱《儲存管理指南》。
如果您將系統設為使用網路裝載的根目錄檔案系統 (透過 NFS 裝載),那麼 init 必須確認是否已載入適當的網路驅動程式,還有是否設定為允許存取根目錄檔案系統。
安裝程序中,當 init 在初始開機時被呼叫,它的工作會與之前討論的不同:
啟動安裝程序時,您的機器會從安裝媒體使用 YaST 安裝程式,來載入一個安裝核心,以及一個特殊 initrd。在 RAM 檔案系統中執行的 YaST 安裝程式,必需具備安裝媒體的實際位置相關資訊,以便存取該程式和安裝作業系統。
如同在節 17.1.1, initramfs所述,開機程序會以最少驅動程式啟動,供大部份的硬體組態使用。init 將啟動一個硬體掃描程序,該程序會判斷驅動程式是否適用您的硬體組態。開機程序所需的模組名稱會寫入 /etc/sysconfig/kernel 的 INITRD_MODULES 中。這些名稱是用來產生系統開機所需的自定 initramfs。如果模組不是開機所需,而是供 coldplug 使用,則模組會寫入 /etc/sysconfig/hardware/hwconfig-*。用此目錄中的組態檔案描述的所有設備都會在開機程序中初始化。
在硬體妥善識別、適當驅動程式完成,以及 udev 已建立設備特殊檔案之後,init 就會啟動安裝系統,其中包含實際 YaST 安裝程式或救援系統。
最後,init 將會啟動 YaST,而 YaST 會啟動套件安裝和系統組態。