在Linux中,開機啟動過程是什麼?

黄嘉波發表於2024-06-07

Linux系統的開機啟動過程是一個複雜但有序的序列,它確保系統從硬體初始化到提供一個完全功能的操作環境。以下是這個過程的詳細步驟:

  1. BIOS/UEFI啟動

    • 當計算機加電時,首先執行的是基本輸入輸出系統(BIOS)或更現代的統一可擴充套件韌體介面(UEFI)。BIOS/UEFI主要負責硬體自檢(POST,Power-On Self Test),檢測和初始化系統中的硬體元件,並根據使用者設定(如啟動裝置順序)找到合適的啟動裝置。
    • 對於UEFI,還會載入EFI系統分割槽上的EFI應用程式,這通常是引導載入程式的一部分。
  2. 載入程式載入

    • 一旦BIOS/UEFI完成其任務,它會載入引導載入程式(Bootloader),最常用的引導載入程式是GRUB(Grand Unified Bootloader),但也可能是LILO, systemd-boot等。
    • 引導載入程式提供了使用者選擇作業系統的介面(如果安裝了多個系統),並載入使用者選定的核心及初始RAM磁碟(initrd),後者包含啟動過程中所需的驅動程式和模組,用於掛載根檔案系統前所需的硬體支援。
  3. 核心初始化

    • Linux核心(通常以vmlinuz檔案形式存在)被載入到記憶體中並開始執行。核心初始化包括檢測和設定硬體,載入必要的驅動程式(或從initrd中解壓),以及設定記憶體管理、程序管理和檔案系統等核心子系統。
  4. 初始化系統與執行級別

    • 在較舊的系統中,使用SysV init作為初始化系統,它會根據/etc/inittab檔案定義的預設執行級別執行一系列初始化指令碼。而在現代系統中,大多采用systemd作為初始化系統,它管理服務的啟動順序,並根據.target(相當於舊系統的執行級別)來決定啟動哪些服務。
    • systemd會啟動基礎系統服務,如udev(管理裝置節點)、systemd-logind(管理使用者會話)、systemd-journald(日誌系統)等。
  5. 系統初始化指令碼和服務啟動

    • 無論是SysV init還是systemd,接下來都會按預定的順序啟動系統服務和守護程序。這些服務包括網路管理、SSH訪問、資料庫伺服器、Web伺服器等,具體取決於系統配置和需求。
  6. 登入管理

    • 啟動圖形介面系統時,顯示管理器(如GDM、LightDM或SDDM)將啟動,等待使用者登入。使用者透過圖形介面輸入使用者名稱和密碼,或者在文字模式下透過getty和login程式登入。
  7. 使用者會話啟動

    • 成功登入後,使用者的shell(bash、zsh等)啟動,載入個人環境變數、啟動檔案(如~/.bashrc)和啟動應用程式。使用者可以在命令列介面或圖形桌面環境中開始工作。

綜上所述,整個啟動過程涉及大量的硬體互動、軟體初始化和配置讀取,且隨著技術的進步,具體的實現細節(如systemd替代SysV init)一直在演變。此外,系統管理員可以透過修改配置檔案來調整啟動服務的順序和狀態,以最佳化啟動時間和系統效能。

相關文章