緯育 2026-0414

出自頂極製作所

本系列講座詳細解析了Linux系統從按下電源到出現登入畫面的完整開機流程,並深入探討了啟動載入器GRUB (Grand Unified Bootloader) 的運作原理、歷史與設定方式。講座將開機過程劃分為啟動載入器 (Boot Loader)、核心 (Kernel) 載入與初始化,以及作業系統初始化等三個主要階段,闡述了每個階段的任務、可能的故障點及其對應的螢幕現象,幫助聽眾根據顯示訊息診斷問題。

講座重點講解了目前主流使用的GRUB2,內容涵蓋其歷史背景、模組化設計、多階段啟動機制(Stage 1與Stage 2)、目錄結構、設定檔的產生方式,並比較了GRUB2與舊版GRUB Legacy在硬碟命名、設定檔管理等方面的差異。講師強調GRUB2的設定檔應透過update-grub等指令自動產生,不建議手動編輯。此外,講座也實際操作示範了如何修改設定檔以客製化開機選單(如顯示隱藏選單、設定倒數計時),旨在讓聽眾全面理解電腦開機的複雜性以及GRUB在其中扮演的關鍵角色。 知識點

Linux開機啟動過程

  • 開機過程概述
    • 講座範圍:從按下電源開關,到可以輸入密碼之前的過程。
    • 目的:讓聽眾瞭解開機啟動過程與細節,以便在電腦無法正常開機時,能根據過程中的資訊判斷問題點。
    • 開機過程是分層啟動與分層轉交的:硬體自檢(BIOS/UEFI) -> 轉交給硬碟的開機磁區(MBR/GPT) -> 啟動載入器(Boot Loader) -> 載入並執行核心(Kernel) -> 核心初始化並轉交給作業系統 -> 作業系統初始化。
  • 開機的三個主要階段
    • 第一階段:啟動載入器 (Boot Loader):對應開機選單。如果連開機選單都看不到,問題就出在第一階段。
    • 第二階段:核心 (Kernel) 載入:在開機選單選擇後,會有一段時間螢幕上跳動黑白字元,這就是核心在載入與初始化。
    • 第三階段:作業系統初始化 (System Initialization):當看到彩色的字元開始跳動時,代表進入了作業系統初始化階段。
  • 開機失敗的診斷方法
    • 看不到開機選單:問題在第一階段,與啟動載入器有關。
    • 看到開機選單,但選擇後停在黑白字元畫面:問題在第二階段,可能是核心(Kernel)出錯,或核心找不到作業系統無法讀取。
    • 看到彩色字元,但無法進入登入畫面:問題在第三階段,作業系統初始化失敗。畫面最後留下的訊息通常是錯誤提示。
  • 各階段的權責轉交
    • BIOS/UEFI:完成硬體檢測後,根據設定的開機順序,尋找硬碟的 MBR 或 GPT,並將主控權轉交給它。
    • 啟動載入器 (Boot Loader):從 MBR 啟動後,顯示開機選單。使用者選擇後,它會找到對應的核心檔案,載入到記憶體中,然後將主控權轉交給核心。
    • 核心 (Kernel):接管主控權後開始啟動,主要任務是識別電腦的所有硬體(CPU、記憶體等)並載入相應的驅動程式。識別完成後,將主控權轉交給作業系統的初始化程序。
    • 作業系統 (System):接管主控權後,開始啟動大量系統服務(如電源管理、安全服務等),螢幕上會顯示一連串的 "OK"。服務啟動完畢後,顯示登入畫面。

啟動載入器 (Boot Loader) 概論

  • 啟動載入器的作用與限制
    • MBR 結構:包含Bootloader (446 bytes)、分割區表 (64 bytes) 和結束標記 (55 AA)。
    • 主要任務:位於MBR中的第一階段啟動載入器(Stage 1),其目標是尋找並啟動第二階段的啟動載入器(Stage 2)。
    • 空間限制:由於 MBR 中的 Bootloader 區域只有 446 bytes,空間極小,難以塞入現代開機所需的所有複雜功能。
  • 現代啟動載入器所需具備的功能
    • 管理指令、模組化功能、版本更新、擴充功能(支援新檔案系統/解析度)。
    • 能識別不同類型的儲存設備(IDE, SATA, NVMe M.2, USB)、正確定址設備容量、辨識各種檔案系統(NTFS, FAT32, EXT4, XFS)。
  • 常見的啟動載入器類型
    • LILO (Linux Loader):早期啟動載入器,已不再使用。
    • Syslinux:輕量級啟動介面,常用於製作可開機隨身碟(如 Rufus)。
    • Loadlin:用於在同一分割區實現 DOS 與 Linux 雙系統啟動。
    • U-Boot (Das U-Boot):常見於嵌入式系統。
    • GRUB (GRand Unified Bootloader):目前PC上最主流的啟動載入器。
    • GRUB Legacy:舊版本,現在只修正安全性問題。
    • GRUB2:目前所有新安裝系統使用的版本,是課程講解的重點。

GRUB (Grand Unified Bootloader) 詳解

  • 簡介與歷史
    • 角色:在 BIOS 完成啟動程序後,負責載入並啟動作業系統核心。
    • 歷史淵源:最初為啟動 GNU Hurd 核心而開發,後來被 Minix 和 Linux 等作業系統採用,具備多重開機能力。
  • GRUB 的介面與特性
    • 開機選單:某些發行版(如 Ubuntu)預設隱藏,可透過修改設定或開機時按住 Shift 鍵使其顯示。
    • 圖形化支援:支援彩色介面、圖形化背景(如PNG)、甚至簡單動畫。
    • 設備識別能力:能識別多種檔案系統、設備(含USB)及其UUID。
  • GRUB 2 與 GRUB 1 的比較
    • 硬碟分割區命名:
    • GRUB 2: hd0,1 表示第一顆硬碟的第一個分割區,較直觀。
    • GRUB 1: hd0,0 表示第一顆硬碟的第一個分割區,易混淆。
    • 設定檔 (Configuration File):
    • GRUB 2: 主要設定檔位於 /boot/grub/grub.cfg,應由程式(如 grub2-mkconfig)自動產生,不建議手動修改。
    • GRUB 1: 設定檔 (menu.lst) 需使用者手動編輯。
    • 功能與指令:GRUB 2 支援腳本功能,但取消了在作業系統內執行 grub-shell 的功能,相關指令需在開機選單的指令模式下執行。
  • GRUB 啟動概念與流程
    • 兩種引導模式:
    • 直接引導 (Direct Guidance):直接啟動本機作業系統。
    • 鏈接引導 (Chained Guidance):從一個硬碟的選單轉接到另一顆硬碟的選單,適用於多系統環境。
    • 兩階段啟動 (Two-Stage Boot):
    • 第一階段 (Stage 1):位於 MBR (446 bytes),唯一功能是尋找並載入 Stage 2。
    • 第二階段 (Stage 2):通常位於 MBR 之後、第一個分割區之前的空間,是 core.img 的實體。它包含GRUB所有核心功能,負責載入模組、讀取設定檔、顯示選單,並最終將主控權交給作業系統核心。
    • 開機失敗情境分析:
    • 畫面全黑,僅游標閃爍:Stage 1 找不到 Stage 2。
    • 成功顯示選單,但選擇後無反應:Stage 2 載入成功,但選單設定錯誤,找不到開機目標。
  • GRUB 的檔案結構與設定
    • 主要目錄與設定檔:
    • /etc/default/grub:控制 GRUB 選單的顯示行為(如逾時、樣式)。
    • /etc/grub.d/:存放產生開機選單內容的腳本,檔名數字決定執行順序。
    • /usr/lib/grub/:存放 GRUB 的所有原始檔案,包含各種模組 .mod 和映像檔 .img。
    • /boot/grub/ (或 /boot/grub2/):存放開機時真正會用到的檔案,是從原始檔目錄複製而來的子集。
    • 核心映像檔與模組:
    • core.img:Stage 2 的備份檔,內含讀取檔案系統所需的基本模組。
    • .mod 檔案:讓 GRUB 能夠識別不同檔案系統(如 ext2.mod)、硬體(如 vga.mod)的模組。
    • boot.img:一個混合檔案,前半部是可用於修復 MBR 的 Stage 1 程式碼。
    • 更新 GRUB 設定:
    • 修改 /etc/default/grub 或 /etc/grub.d/ 後,必須執行指令重新產生主態檔 /boot/grub/grub.cfg。
    • 常用指令:update-grub (推薦) 或 grub-mkconfig > /boot/grub/grub.cfg。
    • 在開機選單中按 e 可臨時編輯當次開機指令,按 F10 或 Ctrl+X 繼續開機。

2026-0414-02.png

核心版本與硬體相容性

  • 新核心通常支援較新硬體與功能;過舊硬體可能被新版本移除支援(如 486)。
  • 發行版未必隨系統更新快速升級核心,需自行關注版本與相容性。
  • 建議自行編譯核心,只啟用所需架構與功能,使核心更小更快;內建功能需透過重新編譯才能變更。

Linux 兩階段啟動與核心映像

  • 由 MBR/GRUB 等 bootloader 啟動核心,核心常駐管理資源與系統呼叫。
  • 啟動初期以 initrd/initramfs 解壓於記憶體形成暫時根,載入必要模組並偵測硬體後,切換到磁碟上的正式根檔案系統再進入登入流程。
  • vmlinuz/vmlinux 為核心映像;initrd/initramfs 提供最小啟動環境與模組集合。

核心選項與模組管理

  • 編譯選項分為:編入核心(速度快)、編成模組(可按需動態載入)、關閉(不提供該功能)。
  • 已編譯模組位於 /lib/modules/$(uname -r)/,依子系統分類(檔案系統、網路、音效、arch 等)。
  • 工具與用法:
    • lsmod:列出已載入模組與相依關係。
    • modinfo <模組名>:顯示位置、授權、簡介、相依等。
    • insmod/rmmod:低階載入/移除,需要完整路徑與自行處理相依。
    • modprobe/modprobe -r:高階載入/移除,自動解析相依,較常用。
  • 範例:以 modprobe -r e1000 移除網卡模組網路中斷;再 modprobe e1000 載入網路恢復,驗證模組對功能的影響。

開機自動載入與持久化

  • 臨時載入重開機不保留;需將模組名寫入 /etc/modules 或 /etc/modules-load.d/ 以開機自動載入(建議使用 modules-load.d/ 結構化管理)。
  • 若重啟後裝置狀態不保,需強化持久化設定(將驅動模組加入自動載入、正確綁定)。

/boot 目錄與升級參考

  • 必要檔案:vmlinuz(核心映像)、initrd/initramfs(暫時根)。
  • 其他重要檔案:
    • config-:編譯設定檔,升級至新版本(如 7.0/7.1)時載入舊版 config 為基礎,針對新增選項決策以維持相容與穩定。
    • System.map:核心符號對應表,除錯用途。
  • 清理時務必保留目前使用中的核心映像與對應的 initrd/initramfs,以免無法開機。

核心編譯與設定複雜度

  • 目標:核心越小越穩定,只留必要內容以提升效能與啟動速度。
  • 以既有 config 為基礎做增量調整;核心設定項目上千至上萬,閱讀理解門檻高。
  • 編譯通常產生核心映像與相應的 initrd/initramfs,配合完整啟動流程。

原始碼位置與取得

  • 常見路徑:/usr/src(核心原始碼)、/lib/modules//(模組與建置資訊)。
  • 可透過發行版套件或官方來源取得原始碼;必要時補齊工具鏈與開發環境。

驅動安裝與排錯流程(顯示卡/網卡/音效卡等)

  • 來源:從官方或廠商取得驅動原始碼或套件;有時提供自動化腳本(如 AutoRun.sh、autoroll)協助編譯安裝。
  • 基本步驟:下載→解壓→補齊相依→編譯/安裝→載入模組→驗證裝置→設定持久化→重啟確認。
  • 相依套件:安裝失敗常因依賴缺失,依提示補齊後重試。
  • 驗證方法:以指令工具確認模組載入;在「硬體管理員」風格介面由問號轉為卡片表示驅動生效;重啟後狀態仍在表示持久化設定正確。
  • 環境差異:不同發行版或虛擬化設定可能採用不同驅動;透過 lsmod/modinfo 推測實際使用裝置與驅動。
  • 備援策略:若核心版本不支援某新卡,升級核心或以外部模組補強;在無網路環境以 SCP 傳遞驅動包。

2026-0414-03.png

Linux啟動流程與程序管理

  • 核心啟動與控制權轉交
    • 當Linux核心(Kernel)完成啟動後,會透過chroot將根目錄從記憶體切換至硬碟,並將控制權轉交給使用者空間的第一個程序/sbin/init。
    • init是作業系統啟動的第一支程式,其程序ID(Process ID, PID)永遠是1。
  • 現代化的Init系統:Systemd
    • 現代Linux發行版中,init的角色已由Systemd接管,它成為控制整台電腦程序的總管。
    • 使用者下達的指令,實際上是透過Systemd與核心溝通來進行程序管理。
    • ps -ef --forest指令的樹状圖可清晰顯示,PID為1的systemd是系統中所有程序的父程序,證明其對整個系統的主控權。
  • Systemd的角色與功能
    • 所有程序的總管理者:所有服務和程式都由Systemd管理。使用者啟動服務時,是向Systemd發出請求,由其決定是否執行。
    • 守護程序(Daemon):Systemd作為一個守護程序,在系統背景中持續運行,負責監控和控制所有程序。

初始化系統的演進與Systemd特性

  • 傳統初始化系統的演進
    • SysV init (傳統):採用循序啟動機制,服務依賴性強。單一服務啟動失敗會導致後續依賴的服務長時間等待或失敗,嚴重影響開機效率。
    • Upstart (過渡):透過分析依賴關係,並行啟動無依賴的服務,提升了效率。但仍未根本解決服務失敗導致的阻塞問題。
  • Systemd (現代主流) 啟動機制與特性
    • 並行啟動機制:無論服務間是否存在依賴,開機時「一次性」將所有服務同時啟動,極大縮短開機時間。Systemd會週期性地檢查並嘗試重啟失敗的服務。
    • 服務啟動的「假性成功」現象:systemctl start指令執行成功僅代表啟動命令已下達,不保證服務會持續運行。服務可能因設定錯誤而稍後停止,管理者必須主動使用systemctl status檢查服務的真實狀態。
    • 全面的系統管理套件:Systemd不僅是init系統,還整合了日誌(journald)、網路(networkd)、時間(timedated, timesyncd)、登入(logind)及DNS解析(resolved)等多種管理功能,成為一個全面的系統管理平台。

Systemd服務管理 (systemctl)

  • Systemd 單元 (Unit) 概念
    • Systemd將系統資源統一管理為「單元」(Unit),常見類型有.service、.socket、.target等。
    • .service: 指一個持續運行的服務程式,會佔用記憶體資源。
    • .socket: 僅監聽特定連接埠,本身佔用資源極少。當有連線請求時,才喚醒對應的.service來處理,實現按需啟動,節省系統資源。
  • 服務管理指令 (systemctl)
    • 這是Systemd環境下推薦使用的標準服務管理指令,取代了傳統的service指令。
    • 管理服務運行狀態:
    • 啟動服務:systemctl start [服務.service]
    • 停止服務:systemctl stop [服務.service]
    • 重啟服務:systemctl restart [服務.service] (先停後啟)
    • 重載設定:systemctl reload [服務.service] (不中斷服務,僅讓新連線採用新設定,建議優先使用)
    • 檢查服務狀態:
    • systemctl status [服務.service]:顯示服務是否運行、PID、日誌等詳細資訊。
    • 管理開機啟動設定:
    • 設定開機自啟:systemctl enable [服務.service]
    • 禁止開機自啟:systemctl disable [服務.service]
    • 檢查是否開機自啟:systemctl is-enabled [服務.service]
    • 列出系統單元:
    • systemctl list-units:列出當前系統中所有已載入的單元及其狀態。
  • 主要目錄結構
    • /usr/lib/systemd/system: 存放所有服務單元的「原始設定檔」。
    • /etc/systemd/system: 存放系統級的組態檔和服務啟用的符號連結,管理者通常透過systemctl enable/disable間接操作此目錄。
    • /etc/systemd/: 存放journald.conf, networkd.conf等Systemd子服務的主要組態檔。

實例分析與標準工作流程

  • 實例1:DNS解析服務 (systemd-resolved)
    • 在Ubuntu系統上,/etc/resolv.conf通常指向本地回環地址(127.0.0.53),DNS查詢由systemd-resolved.service服務處理。
    • 當使用systemctl stop systemd-resolved.service停止該服務後,系統將無法解析域名,證明了服務對系統功能的關鍵作用。
  • 實例2:設定SSH服務允許root登入
    • 預設情況下,多數Linux發行版出於安全考量,不允許root直接透過SSH遠端登入。
    • 設定步驟:
   1. 編輯SSH服務端設定檔:vi /etc/ssh/sshd_config。
   2. 找到PermitRootLogin選項,將其值修改為yes。
   3. 存檔後,執行systemctl reload ssh.service使新設定生效。
  • IT服務部署的標準工作流程
 1. 尋找:上網搜尋所需的功能或服務。
 2. 安裝:使用套件管理器(如apt或yum)安裝軟體。
 3. 修改:閱讀文件並編輯設定檔以符合需求。
 4. 重啟/重載:使用systemctl指令套用設定。
 5. 交付:告知客戶服務已設定完成。

2026-0415-01.png