熱門分類
載入中…
目錄0%

🐧 Linux 開機流程完整解析:BIOS / UEFI、GRUB、Kernel、initramfs 到 systemd 的全生命週期

    🐧 Linux 開機流程完整解析

    多數人學 Linux,是從「systemctl restart 能用就好」開始的。 但當你真的遇到這些狀況時:

    • 機器開機卡住,看不到錯誤
    • 服務偶爾起不來,但重開又好了
    • 重開機要等十幾分鐘
    • 最後只能靠快照或備份救回

    其實問題常常不在「某一個指令」,而是在「開機流程的哪一段卡住」。 只要你把整條生命週期串起來,除錯會變得非常有方向。


    🔌 一、電源一按下:BIOS / UEFI 在做什麼?

    你按下電源鍵後,Linux 還沒出場。第一個工作的是 BIOS 或 UEFI。 它會先把硬體環境整理好,再把控制權交給下一階段。

    • 初始化 CPU、記憶體、主機板晶片、儲存控制器
    • 掃描可開機裝置(NVMe / SSD / SATA / USB)
    • 依開機順序選擇目標(Boot Order)

    如果你遇到「連 GRUB 都進不去」或「畫面停在主機板 Logo 很久」, 通常問題還停留在這一層:硬體、韌體設定、或開機裝置本身。


    🚦 二、GRUB:那個選單其實是「搬運工」

    很多人以為 GRUB 就是一個開機選單,但它真正的工作是: 把 Linux Kernel 與 initramfs 載入到記憶體,並把參數交給 Kernel。

    linux /vmlinuz-6.x.x root=/dev/mapper/vg-root ro quiet
    initrd /initramfs-6.x.x.img

    常見會卡在這一段的症狀:

    • 進入 rescue mode
    • Kernel panic(找不到 root filesystem)
    • 顯示找不到磁碟 / LVM / RAID

    這時候你要懷疑的不是 systemd,而是「root= 參數、磁碟 UUID、或 initramfs 內容」。


    🧠 三、Kernel:Linux 真正開始上工

    Kernel 接手後,會開始做一堆「很早期但很關鍵」的事情:

    • 初始化硬體驅動(尤其是磁碟與檔案系統)
    • 建立記憶體管理與程序模型
    • 掛載暫時性的 rootfs(接著通常會交給 initramfs)

    要回頭看 Kernel 早期到底做了什麼,最常用的入口就是:

    dmesg | less

    如果你是要看「這次開機」的完整紀錄,後面 systemd 階段也會把 Kernel log 一起收進 journal。


    🧰 四、initramfs:開機流程最常被低估的關鍵

    initramfs 可以把它想成「臨時的迷你 Linux」: 它的任務是先把真正的系統環境準備好,然後切換到正式的 root filesystem。

    它通常會負責:

    • 載入必要模組(磁碟、檔案系統、網卡等)
    • 組 RAID、啟用 LVM、解鎖加密磁碟(如果有)
    • 找到真正的 /(rootfs),再切換過去

    只要你用到 LVM / RAID / 加密,initramfs 幾乎就是「能不能順利開機」的門檻。


    ⚙️ 五、systemd:服務啟動與依賴關係的總指揮

    當真正的 root filesystem 掛載完成後,systemd(PID 1)開始接手整個使用者空間(userspace)。 從這刻開始,你熟悉的服務管理、啟動順序、失敗重試、紀錄追查,才算正式進入主場。

    常用三件套(真的很常用):

    systemctl list-dependencies multi-user.target
    systemd-analyze blame
    journalctl -b

    🧭 六、遇到「開機慢 / 開機卡」怎麼抓?先把段落分清楚

    除錯最怕的是亂猜。你只要先判斷「卡在哪一段」,就能直接縮小 80% 的範圍。

    BIOS / UEFI
      ↓
    GRUB(載入 Kernel / initramfs / 參數)
      ↓
    Kernel(硬體初始化、早期 driver、檔案系統)
      ↓
    initramfs(組 RAID / 啟 LVM / 解鎖、切換 rootfs)
      ↓
    systemd(啟動 target / service、收集日志)

    一個很實用的習慣:只要你覺得「開機慢」,先跑:

    systemd-analyze
    systemd-analyze blame
    systemd-analyze critical-chain

    如果 systemd 這邊看起來正常,但體感仍然「在 systemd 之前就慢」, 那就該把焦點移去 Kernel / initramfs(dmesg、磁碟、RAID/LVM、驅動初始化)那段。


    💬 互動留言引導

    💬 想交流一下你的環境嗎?

    如果你遇到「開機卡住 / 開機很慢 / 某個 service 起不來」,歡迎在留言貼上:
    systemd-analyze blame
    dmesg / journalctl -b 的關鍵片段,我可以幫你一起判斷卡在哪一段。


    🔗 延伸閱讀

    — WWFandy・Linux 系統筆記

    🔗 分享這篇 LINE Facebook X

    沒有留言:

    字級