linux啟動

wongchaofan發表於2024-06-06

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”開頭的程式,分別表示啟動和終止。啟動程式在系統啟動期間執行,終止程式在關機期間執行。

相關文章