Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 系統啟動流程 10 步深度解析(含圖示邏輯)

編輯:Linux 教學

前言

從按下電源鍵到呈現登入提示符,Linux 經歷了一系列精密協作的階段。理解這 10 個關鍵步驟,不僅能協助排除開機故障,更是系統工程師、嵌入式開發者的核心內功。本文依照傳統 SysV init 流程(systemd 另文詳述)逐層拆解。

十大啟動階段總覽

  1. BIOS/UEFI 固件初始化
  2. MBR/GPT 引導區載入
  3. Boot Loader(GRUB/LILO)執行
  4. 核心映像載入與解壓
  5. 核心初始化(start_kernel)
  6. init 進程啟動(PID 1)
  7. 執行 rc.sysinit 系統初始化
  8. 載入核心模組
  9. 依運行等級執行 rcN.d 腳本
  10. 執行 rc.local 使用者自訂
  11. 啟動 getty/login 進入登入介面

逐階段深度解析

1️⃣ BIOS/UEFI 固件初始化

  • POST(Power-On Self-Test)檢測 CPU、記憶體、磁碟、鍵盤等硬體。
  • 讀取 CMOS 設定:啟動順序、時鐘、PnP 資源分配。
  • UEFI 直接載入 EFI/BOOT/BOOTX64.EFI 或 grubx64.efi,跳過 MBR 階段。

2️⃣ MBR/GPT 引導區載入

  • 傳統 BIOS:讀取啟動磁碟第 0 軌第 1 扇區(512 Bytes)MBR。
  • MBR 結構:446 Bytes 啟動代碼 + 64 Bytes 分區表 + 2 Bytes 魔數 (0x55AA)。
  • 啟動代碼將自身複製至記憶體 0x7C00,接管控制權。

3️⃣ Boot Loader(以 GRUB2 為例)

  • Stage 1(boot.img):嵌入 MBR,僅負責載入 Stage 1.5/Core.img。
  • Stage 1.5(core.img):含檔案系統驅動(ext2/xfs/btrfs/lvm/raid),能讀取 /boot/grub。
  • Stage 2:顯示選單,讀取 /boot/grub/grub.cfg,載入指定核心與 initramfs。
  • 關鍵指令:linux /vmlinuz-... root=UUID=... ro quiet、initrd /initramfs-...img。

4️⃣ 核心映像載入與解壓

  • 核心映像通常為壓縮格式(vmlinuz = gzip/xz/lz4 壓縮的 Image)。
  • 早期啟動代碼(arch/x86/boot/compressed/head_64.S)建立臨時頁表、解壓核心至高端記憶體。
  • 螢幕輸出:Uncompressing Linux... OK, booting the kernel.

5️⃣ 核心初始化(start_kernel())

  • 初始化記憶體管理(buddy、slab、vmalloc)、中斷描述表(IDT)、時鐘源。
  • 掛載 rootfs(initramfs 先行,再切換真實根檔案系統)。
  • 啟動核心執行緒:kthreadd、ksoftirqd、migration、rcu_sched 等。
  • 最終呼叫 rest_init() → kernel_init() → run_init_process("/sbin/init")。

6️⃣ init 進程(PID 1)啟動

  • 傳統 SysV:/sbin/init 讀取 /etc/inittab 判斷預設運行等級(id:3:initdefault: 或 id:5:initdefault:)。
  • systemd:/sbin/init 為 systemd 符號連結,並行啟動單元,無運行等級概念(對應 graphical.target/multi-user.target)。

7️⃣ 執行 rc.sysinit(/etc/rc.d/rc.sysinit)

  • 設定 PATH、HOSTNAME、網路介面、啟用 swap、掛載 /proc//sys、載入核心參數(sysctl -p)、檢查根檔案系統、設定 SELinux 標籤。
  • 此腳本極長,耗時佔整個開機過程 30% 以上。

8️⃣ 載入核心模組

  • 依據 /etc/modules.conf(舊)或 /etc/modules-load.d/*.conf(新)自動 modprobe。
  • 典型模組:檔案系統(ext4/xfs/nfs)、驅動(raid/iscsi/virtio)、硬體監控。

9️⃣ 依運行等級執行 rcN.d 腳本

  • 目錄結構:/etc/rc.d/rc[0-6].d/,符號連結指向 /etc/rc.d/init.d/ 服務腳本。
  • 命名規則:Sname(啟動)、Kname(停止),NN 決定順序。
  • 範例:S10network → S55sshd → S99local。

🔟 執行 rc.local(/etc/rc.d/rc.local)

  • 所有服務啟動後最後執行,供管理員放置個性化指令(掛載遠端儲存、啟動自製服務、設定防火牆規則等)。
  • 需具備執行權限:chmod +x /etc/rc.d/rc.local。

1️⃣1️⃣ 啟動 getty/login 進入登入狀態

  • inittab 中 1:2345:respawn:/sbin/agetty --noclear tty1 linux。
  • 顯示 Login: 提示符,驗證帳密後啟動使用者 Shell(/bin/bash)。

Systemd 時代的對應關係

SysV 階段Systemd 對應單元/目標
rc.sysinitsystemd-sysinit.service、sysinit.target
rcN.d S*multi-user.target / graphical.target 依賴鏈
rc.localrc-local.service(需啟用)
inittab 運行等級runlevelN.target(符號連結至 multi-user/graphical)

總結

Linux 啟動是「固件 → 引導載入器 → 核心 → PID 1 → 使用者空間」的接力賽。掌握各階段關鍵檔案(grub.cfg、inittab、rc.sysinit、rc.local)與除錯入口(grub> 編輯、init=/bin/bash、systemd.debug-shell),即可從容應對開機掛掛、根檔案系統損壞、服務啟動失敗等棘手場景。

Copyright © Windows教程網 All Rights Reserved