1. BIOS
BIOS 代表基本輸入/輸出系統。簡單來說,BIOS 會載入並執行主開機記錄 (MBR) 引導載入程式。
首次開啟計算機時,BIOS 首先對 HDD 或 SSD 執行一些完整性檢查。
然後,BIOS 搜尋、載入並執行引導載入程式,該程式可以在主開機記錄 (MBR) 中找到。MBR 有時位於 USB 記憶棒或 CD-ROM 上,例如實時安裝 Linux 時。
一旦檢測到引導載入程式,它就會被載入到記憶體中,然後 BIOS 將系統的控制權交給它。
2. MBR
MBR 代表主開機記錄,負責載入和執行 GRUB 引導載入程式。
MBR 位於可啟動磁碟的第一個扇區,通常為/dev/hda
或/dev/sda
,具體取決於您的硬體。MBR 還包含有關 GRUB 或非常舊系統中的 LILO 的資訊。
- MBR 代表主開機記錄。
- 它位於可啟動磁碟的第一個扇區。通常為 /dev/hda 或 /dev/sda
- MBR 的大小小於 512 位元組。它包含三個部分:1) 前 446 位元組中的主引導載入程式資訊 2) 接下來 64 位元組中的分割槽表資訊 3) 最後 2 位元組中的 mbr 驗證檢查。
- 它包含有關 GRUB(或舊系統中的 LILO)的資訊。
- 因此,簡單來說,MBR 載入並執行 GRUB 引導載入程式。
3. GRUB
有時稱為 GNU GRUB,是 GNU GRand Unified Bootloader 的縮寫,是大多數現代 Linux 系統的典型引導載入程式。
GRUB 啟動畫面通常是您啟動計算機時看到的第一件事。它有一個簡單的選單,您可以在其中選擇一些選項。如果您安裝了多個核心映像,您可以使用鍵盤選擇要用於系統啟動的核心映像。預設情況下,會選擇最新的核心映像。
啟動畫面會等待幾秒鐘,以便您選擇選項。如果您不等待,它將載入預設核心映像。
/boot/grub/grub.conf
在許多系統中,您可以在或 處找到 GRUB 配置檔案。這是一個簡單檔案/etc/grub.conf
的示例:grub.conf
#boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu title CentOS (2.6.18-194.el5PAE) root (hd0,0) kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/ initrd /boot/initrd-2.6.18-194.el5PAE.img
4. 核心
核心通常被稱為任何作業系統的核心,包括 Linux。它完全控制系統中的所有內容。
在啟動過程的這個階段,GRUB 選擇的核心首先掛載檔案中指定的根檔案系統grub.conf
。然後它執行/sbin/init
程式,該程式始終是第一個要執行的程式。您可以透過其程序 ID (PID) 來確認這一點,該程序 ID 應始終為 1。
然後,核心使用初始 RAM 磁碟 (initrd) 建立一個臨時根檔案系統,直到掛載真實檔案系統。
- 按照 grub.conf 中的“root=”指定的方式掛載根檔案系統
- 核心執行/sbin/init程式
- 由於 init 是 Linux 核心執行的第一個程式,因此它的程序 ID (PID) 為 1。執行“ps -ef | grep init”並檢查 pid。
- initrd 代表初始 RAM 磁碟。
- initrd 是核心用來作為臨時根檔案系統的,直到核心啟動並掛載真正的根檔案系統為止。它還包含在內部編譯的必要驅動程式,可幫助核心訪問硬碟分割槽和其他硬體。
5. 初始化
此時,您的系統將執行執行級別程式。系統會先查詢 init 檔案(通常在 處找到),以/etc/inittab
確定 Linux 執行級別。
現代 Linux 系統使用 systemd 來選擇執行級別。根據TecMint 的說法,可用的執行級別如下:
執行級別 0由poweroff.target匹配(並且runlevel0.target是指向poweroff.target的符號連結)。
執行級別 1由rescue.target匹配(並且runlevel1.target是指向rescue.target的符號連結)。
執行級別3 由multi-user.target模擬(並且runlevel3.target是指向multi-user.target的符號連結)。
執行級別 5由graphic.target模擬(並且runlevel5.target是指向graphic.target的符號連結)。
執行級別 6由reboot.target模擬(並且runlevel6.target是指向reboot.target的符號連結)。
緊急情況由emergency.target匹配。
然後 systemd 將開始執行執行級別程式。
- 檢視 /etc/inittab 檔案來決定 Linux 執行級別。
- 以下是可用的執行級別
- 0 – 停止
- 1 – 單使用者模式
- 2 – 多使用者,無 NFS
- 3 – 完整的多使用者模式
- 4 – 未使用
- 5 – X11
- 6 – 重啟
- Init 從 /etc/inittab 中識別預設的 initlevel 並使用它來載入所有適當的程式。
- 在系統上執行“grep initdefault /etc/inittab”來識別預設執行級別
- 如果您想惹麻煩,您可以將預設執行級別設定為 0 或 6。既然您知道 0 和 6 的含義,那麼您可能不會這樣做。
- 通常,您會將預設執行級別設定為 3 或 5。
6. 執行級別程式
根據您安裝的 Linux 發行版,您可能會看到不同的服務正在啟動。例如,您可能會看到starting sendmail …. OK
。
這些被稱為執行級別程式,並根據您的執行級別從不同的目錄執行。上面描述的 6 個執行級別中的每一個都有自己的目錄:
- 執行級別 0 –
/etc/rc0.d/
- 執行級別 1 –
/etc/rc1.d/
- 執行級別 2 –
/etc/rc2.d/
- 執行級別 3 –
/etc/rc3.d/
- 執行級別 4 –
/etc/rc4.d/
- 執行級別 5 –
/etc/rc5.d/
- 執行級別 6 –
/etc/rc6.d/
請注意,這些目錄的確切位置因發行版而異。
如果您檢視不同的執行級別目錄,您會發現以“S”或“K”開頭的程式,分別表示啟動和終止。啟動程式在系統啟動期間執行,終止程式在關機期間執行。