linux啟動流程

pro111發表於2024-11-22

Linux 啟動流程筆記

系統目錄結構

/boot 目錄內容

[root@web01 boot]# ls
config-4.18.0-305.3.1.el8.x86_64                         initramfs-4.18.0-305.3.1.el8.x86_64kdump.img
efi                                                      loader
grub2                                                    System.map-4.18.0-305.3.1.el8.x86_64
initramfs-0-rescue-4396f3518626409aa9770c4df8d21cb2.img  vmlinuz-0-rescue-4396f3518626409aa9770c4df8d21cb2
initramfs-4.18.0-305.3.1.el8.x86_64.img                  vmlinuz-4.18.0-305.3.1.el8.x86_64
  • initramfs-4.18.0-305.3.1.el8.x86_64.img: 驅動檔案
  • vmlinuz-4.18.0-305.3.1.el8.x86_64: 核心檔案

系統核心版本和 CPU 資訊

shell複製程式碼[root@web01 boot]# uname -r
4.18.0-305.3.1.el8.x86_64
shell複製程式碼[root@web01 boot]# cat /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid pni pclmulqdq vmx ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch cpuid_fault invpcid_single ssbd ibrs ibpb stibp ibrs_enhanced tpr_shadow vnmi ept vpid ept_ad fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 xsaves arat umip pku ospke gfni vaes vpclmulqdq rdpid movdiri movdir64b fsrm md_clear flush_l1d arch_capabilities

網路配置及核心引數

shell複製程式碼# 是否開啟 IP 包轉發功能
[root@web11 ipv4]# cat /proc/sys/net/ipv4/ip_forward
1: 開啟
0: 關閉

# 是否忽略 ICMP 協議 (禁ping)
[root@web11 ipv4]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
1: 開啟
0: 關閉

# /etc/sysctl.conf 配置
[root@web11 ~]# cat /etc/sysctl.conf
vm.dirty_expire_centisecs = 4500
net.ipv4.ip_forward = 0
net.ipv4.icmp_echo_ignore_all = 1

# 修改後立即生效
[root@web11 ~]# sysctl -p

Linux 系統啟動流程

1. BIOS / UEFI 階段

  • 硬體檢測:系統通電後,BIOS 或 UEFI 韌體進行自檢,確保硬體正常。
  • 選擇引導裝置:BIOS/UEFI 會選擇啟動裝置(如硬碟、隨身碟、網路等)。

2. 引導載入程式 (GRUB2)

  • 載入 /boot 目錄到根分割槽

    :GRUB2 載入程式載入啟動配置。

    • set root='hd0,msdos1'
    • search --no-floppy --fs-uuid --set=root ...:根據 UUID 查詢並設定根分割槽。
  • 載入核心:GRUB2 載入 Linux 核心並將控制權交給核心。

3. 核心載入與初始化

  • Linux 核心啟動:核心開始初始化硬體、記憶體、裝置驅動等。

  • 初始化記憶體檔案系統 (initramfs)

    :核心掛載初始的

    initramfs
    

    檔案系統,提供必要的驅動和檔案系統支援。

    • 磁碟、檔案系統掛載、LVM、RAID 等初始化操作。
  • 掛載根檔案系統:核心根據 /etc/fstab 配置掛載實際的根檔案系統 /

4. systemd 啟動

  • systemd 啟動並初始化系統

    :核心初始化後,

    systemd
    

    作為系統初始化程式接管,管理系統服務的啟動。

    • 掛載所有檔案系統。
    • 啟動預設目標單元 (graphical.targetmulti-user.target)。
    • 啟動系統服務,如網路服務、SSH、資料庫等。

5. 目標單元 (Target Units)

CentOS 8 使用目標單元來管理系統啟動過程。常見的目標包括:

  • multi-user.target:無圖形介面的預設目標,相當於傳統的執行級別 3。
  • graphical.target:帶圖形介面的目標,依賴於 multi-user.target
  • basic.target:基礎環境,通常在 multi-user.target 前啟動。
  • reboot.target:系統重啟目標。
  • halt.target:系統關閉目標。

6. 啟動服務

  • systemd 啟動服務

    :根據目標單元的依賴關係,

    systemd
    

    啟動各種服務。

    • dbus.service:D-Bus 訊息匯流排服務,支援程序間通訊。
    • sshd.service:SSH 服務,允許遠端登入。
    • firewalld.service:防火牆服務,管理網路訪問。
    • NetworkManager.service:網路管理服務。
    • gnome-shell.servicelightdm.service:圖形介面相關服務。

7. 使用者登入

  • 登入管理器:如果啟動了圖形介面,登入管理器(如 GDM、LightDM)將顯示登入介面,使用者輸入使用者名稱和密碼。
  • 啟動使用者會話:使用者登入後,系統啟動使用者的桌面會話,載入環境並啟動相應應用。

8. 系統準備就緒

  • 當所有服務和程序都成功啟動並且沒有錯誤時,系統進入正常工作狀態,使用者可以開始使用系統。

CentOS 8 啟動過程示例

GRUB 配置檔案

  • /etc/default/grub 檔案:
shell複製程式碼GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
  • 更新 GRUB 配置
shell複製程式碼[root@web01 grub2]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
  • 安裝或修復 GRUB 載入程式
shell


複製程式碼
[root@web01 grub2]# grub2-install /dev/sda

載入核心與驅動

  • 載入核心檔案:核心載入後開始初始化。
  • 檢視已載入模組

[root@web01 grub2]# lsmod
  • 檢視模組詳細資訊

[root@web01 grub2]# modinfo kvm

相關文章