🐧 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 的關鍵片段,我可以幫你一起判斷卡在哪一段。
🔗 延伸閱讀
- 🐧 Linux systemd 深入解析與啟動流程管理
- ⏱️ Linux Crontab vs systemd timer:排程機制完整比較與最佳實務
- 📜 Linux 日誌與稽核全攻略:auditd / journalctl / rsyslog / ELK / SIEM 完整指南
— WWFandy・Linux 系統筆記
沒有留言: