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 開機啟動流程深度剖析:從 BIOS 到 systemd

編輯:Linux 教學

理解開機流程是排查啟動故障、優化啟動速度、實作自定義啟動邏輯的前提。本文按階段拆解 x86_64 架構下傳統 SysV init 與現代 systemd 並行的完整啟動鏈路。

階段 0:硬體初始化 (BIOS/UEFI)

  • POST:加電自檢 (CPU、記憶體、顯示卡、磁碟)
  • BIOS/UEFI 設定:啟動順序、硬體參數、安全啟動
  • MBR/GPT:讀取啟動磁碟第一扇區 (512 Bytes MBR) 或 EFI 系統分區

階段 1:Boot Loader (GRUB 2)

  • Stage 1 (MBR):極小程式碼 (< 446 Bytes),唯一任務載入 Stage 1.5/2
  • Stage 1.5:檔案系統驅動 (如 ext2.mod),位於 MBR 後間隙或 /boot/grub/
  • Stage 2 (/boot/grub2/):完整功能——讀取 grub.cfg、顯示選單、載入核心與 initramfs
  • grub.cfg 關鍵段:
    menuentry 'CentOS Linux' {
        linux   /vmlinuz-4.18.0 root=/dev/mapper/cl-root ro
        initrd  /initramfs-4.18.0.img
    }

階段 2:核心啟動

  1. 解壓核心映像:Uncompressing Linux... OK, booting the kernel.
  2. 硬體偵測與驅動載入:PCI 總線、磁碟控制器、網卡、檔案系統模組
  3. 掛載根檔案系統:initramfs 提供臨時根目錄,透過 switch_root 切換至真實根目錄
  4. 啟動 PID 1:start_kernel() → kernel_init() → run_init_process("/sbin/init")

階段 3:init 系統 (SysV vs systemd)

特性SysV init (傳統)systemd (現代標準)
PID 1 程式/sbin/init/usr/lib/systemd/systemd
配置方式/etc/inittab + /etc/rc.d/rc*.d/ 腳本.unit 檔案 (/usr/lib/systemd/system/)
啟動模式串行 (依 runlevel 順序)並行 (依賴圖自動解析)
服務管理service / chkconfigsystemctl
日誌syslog / /var/log/messagesjournald / journalctl
相容性systemd 可執行 SysV 腳本原生支援 Socket/D-Bus/Path 啟動

systemd 關鍵啟動流程

  1. default.target (通常指向 graphical.target 或 multi-user.target)
  2. 解析依賴圖 → 並行啟動 .service、.socket、.mount、.target
  3. basic.target → sysinit.target (早期服務:udev、sysfs、swap、fsck)
  4. multi-user.target (文字模式完整) → graphical.target (啟動 display manager)

關鍵檢測指令

systemd-analyze                    # 總啟動時間
systemd-analyze blame              # 各服務耗時排序
systemd-analyze critical-chain     # 關鍵路徑
systemctl list-unit-files --state=enabled  # 開機自啟服務
journalctl -b                      # 本次啟動日誌
dmesg -T                           # 核心環形緩衝區 (人類可讀時間)
cat /proc/cmdline                  # 核心啟動參數

常見故障排查

症狀排查方向
GRUB 救援模式核心/initramfs 路徑錯誤、磁碟 UUID 變更、grub2-install 重裝
緊急模式journalctl -xb、/etc/fstab 掛載錯誤、SELinux 標籤錯誤
啟動卡住systemd-analyze critical-chain 找阻塞服務、systemctl mask 暫停
雙系統 GRUB 消失Windows 更新覆蓋 MBR → LiveCD grub2-install /dev/sda

結語

現代 Linux 啟動鏈路:UEFI → GRUB2 → 核心 + initramfs → systemd 並行啟動。掌握各階段產物 (grub.cfg、vmlinuz、initramfs、unit 檔) 與診斷工具 (systemd-analyze、journalctl、dmesg),即可從容應對啟動故障與效能優化。

Copyright © Windows教程網 All Rights Reserved