章 28. 啟動及設定 Linux 系統

內容目錄

28.1. Linux 開機程序
28.2. init 程序
28.3. 透過 /etc/sysconfig 設定系統

摘要

啟動 Linux 系統需要各種不同的元件。本章將概略說明一些基本原則,並特別介紹與啟動相關的元件。本章也將說明 Runlevel 的觀念以及使用 sysconfig 進行 SUSE 系統組態。

28.1. Linux 開機程序

Linux 開機程序由數個階段所組成,每個階段分別由元件所代表。以下清單簡短概述開機程序,以及所有相關主要元件的功能。

  1. BIOS.  啟動電腦之後,BIOS 會啟始螢幕和鍵盤並測試主記憶體。在此階段中,機器不會存取大量儲存媒體。接著,會從 CMOS 值載入目前日期、時間和最重要的周邊。識別第一個硬碟及其幾何之後,系統控制將會從 BIOS 轉到開機載入器。

  2. 開機載入器.  第一顆硬碟的第一個實體 512 位元組資料磁區,會載入主要記憶體。接著,在此磁區開頭的開機載入器會接管開機程序。開機載入器執行的指令,決定其他部份的開機程序。因此,第一個硬碟的前 512 個位元組是主開機紀錄 (MBR)。然後,開機載入器會將控制傳送到實際作業系統,在這裡是指 Linux 核心。Linux 開機載入器的 GRUB 詳細資訊,請參閱 章 29, 開機載入器

  3. 核心和初始 RAM 檔案系統.  為了送出系統控制,開機載入器會將核心和初始 RAM 檔案系統 (initramfs,initial RAM-based file system) 兩者都載入記憶體。另外,核心可以直接使用 initramfs 的內容。init ramfs 包含一個名為 init 的小執行檔,它可以處理實體根目錄檔案系統的裝載。舊版的 SUSE Linux 中,這些工作分別是由 initrd 和 linuxrc 處理。如需有關 initramfs 的詳細資訊,請參閱 節 28.1.1, "initramfs"

  4. initramfs 上的 init.  本程式將執行裝載適當根目錄檔案系統所需的全部動作,例如提供需要的檔案系統核心功能,並且提供大量儲存控制器設備驅動程式。找到根目錄檔案系統後,將會檢查是否有錯誤並進行裝載。若裝載成功,將會清除 initramfs 並執行根目錄檔案系統上的 init 程式。如需有關 init 的詳細資訊,請參閱 節 28.1.2, "initramfs 上的 init"

  5. init.  init 透過提供的不同功能來負責系統實際開機的不同層級,init 相關資訊請參閱 節 28.2, "init 程序"

28.1.1. initramfs

initramfs 是一個小型檔案器統,核心可將此系統載入 RAM 磁碟。在實際根目錄檔案系統裝載之前,它提供可讓程式執行的最小 Linux 環境。BIOS 常式會將這個最小的 Linux 環境載入記憶體,且除了記憶體要求外沒有其他特定硬體需求。此外,initramfs 還必須提供一個名為 init 的執行檔,這個執行檔會在處理開機程序的根目錄檔案系統上執行實際的 init 程式。

在實際根目錄檔案系統能夠裝載以及實際作業系統可以啟動之前,核心需要相應的驅動程式來存取根目錄檔案系統所在的設備。這些驅動程式可能包含特定類型硬碟的特殊驅動程式,或者甚至包含存取網路檔案系統的網路驅動程式。initramfs 上的 init 還會載入根目錄檔案系統所需的模組,所以在整個開機過程中,initramfs 是為可用的。如此一來,才可以處理開機期間產生的所有 Hotplug 事件。

如果您要在已完成安裝的系統上變更硬體 (硬碟),且必須在核心中安裝開機時此硬體所需的驅動程式,那麼您就必須更新 initramfs。更新 initramfs 會採用與更新 initrd (initramfs 的前身) 一樣的更新方式,即是呼叫 mkinitrd。不使用任何引數來呼叫 mkinitrd 將會建立一個 initramfs。呼叫 mkinitrd -R 則會建立一個 initrd。在 SUSE Linux 中,/etc/sysconfig/kernel 中的 INITRD_MODULES 變數可以指定要載入的模組。 安裝後,此變數會自動設成正確的值。模組會確實依據它們在 INITRD_MODULES 中出現的順序來載入。如果使用到多個 SCSI 驅動程式時,這點尤其重要,因為不這麼做,硬碟名稱會有所變更。嚴格來說,載入那些存取根目錄檔案系統所需的驅動程式便足夠了。然而,因為後續載入可能會有問題,所以所有安裝所需的 SCSI 驅動程式都將透過 initramfs 或 initrd 載入。 

[Important]更新 initramfs 或 initrd

開機載入器將採用與核心相同的方式載入 initramfs 或 initrd。更新 initramfs 或 initrd 之後不需要重新安裝 GRUB,因為開機時 GRUB 會在目錄搜尋正確的檔案。

28.1.2. initramfs 上的 init

Initramfs 上的 init 其主要目的是準備裝載實際根目錄檔案系統,以及存取實際根目錄檔案系統。根據您實際系統組態,init 負責下列工作。

載入核心模組

根據硬體組態,存取您電腦的硬體元件可能需要特殊的驅動程式 (最重要的元件是硬碟)。若要存取最後根目錄檔案系統,核心需載入適當的檔案系統驅動程式。

管理 RAID 和 LVM 設定

如果您將系統設定為 RAID 或 LVM 之下的根目錄檔案系統,init 會設定 LVM 或 RAID,以便之後能夠存取檔案根目錄系統。RAID 相關資訊請參閱 節 2.3, " 軟體 RAID 組態"。LVM 相關資訊請參閱 節 2.2, " LVM 組態"

管理網路組態

如果您將系統設為使用網路裝載的根目錄檔案系統 (透過 NFS 裝載),那麼 init 必須確認是否已載入適當的網路驅動程式,還有是否設定為允許存取根目錄檔案系統。

在初始開機時呼叫 init 為安裝過程的一部份,該工作不同於先前所述。

尋找安裝媒體

啟動安裝程序時,您的機器會從安裝媒體使用 YaST 安裝程式,來載入一個安裝核心以及一個特殊 initrd。 在 RAM 檔案系統中執行的 YaST 安裝程式,必須具備安裝媒體的實際位置相關資訊,以便存取該程式和安裝作業系統。

啟始硬體辨識並載入適當核心模組

如同在 節 28.1.1, "initramfs" 所述,開機程序會以最少驅動程式啟動,供大部份的硬體組態使用。init 將啟動一個硬體掃描程序,該程序會判斷驅動程式是否適用您的硬體組態。這些值稍後會寫入 /etc/sysconfig/kernel 檔案中的 INITRD_MODULES,讓後續開機程序能夠使用自訂 initrd。安裝程序進行期間,init 會載入此模組。

載入安裝系統或救援系統

在硬體妥善識別及載入適當驅動程式後,init 會啟動安裝系統,其中包含實際 YaST 安裝程式或救援系統。

啟動 YaST

最後,init 將會啟動 YaST,而 YaST 會啟動套件安裝和系統組態。