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.target
或multi-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.service
或lightdm.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