關鍵詞:系統 啓動 linux centos7 過程 grub2 內核 初始化 systemd
0. 思維導圖概覽
1. 系統固件初始化
1.1 加電
- 開機自檢
1.2 搜索可啓動設備
1.3 從磁盤中加載GRUB2
1.4 轉交控制權給GRUB2
2. 啓動引導器GRUB2
2.1 啓動GRUB2
- 從磁盤加載配置
- 向用戶顯示GRUB菜單
- 啓動項被選擇
2.2 加載 kernel 與 initramfs
-
從磁盤加載
-
加載到 ram
-
initramfs 是 cpio 歸檔文件
- 必要的 kernel 模塊
- 初始化腳本
- …
-
轉交控制權給 kernel
- 傳遞 kernel 命令行選項
- initramfs 在 ram 中的位置
3. Linux內核初始化
3.1 從 initramfs 啓動 systemd 的工作副本
- /sbin/init
- pid=0
3.2 initramfs 的 systemd 啓動 initrd.target
- 所有 units
- 包括依賴的 unit
3.3 kernel 在 initramfs 中查找所有硬件的初始化程序
- 初始化硬件
3.4 initrd-root-fs.target 將系統的root文件系統掛載
- 以只讀形式
- 掛載到 /sysroot
3.5 執行 initrd.target 目標的其他相關 unit
3.6 initrd-switch-root.target 切換 root文件系統
- 從 initramfs 的root文件系統
- 到系統實際root文件系統
3.7 將控制權交給實際root文件系統上的 systemd實例
4. 執行本地系統的第一個進程systemd
4.1 systemd 使用系統中安裝的 systemd 副本自行重新執行
- systemd 副本(PID=1)
4.2 systemd 查找系統配置或從內核命令行傳遞的默認目標
4.3 systemd 啓動默認目標 default.target 的所有 units
-
自動解決單元間的依賴關係
-
若默認目標爲multi-user.target
- 啓用文本登錄屏幕
-
若默認目標爲graphical.target
- 啓用圖形登錄屏幕
參考文檔
《Linux 基礎及應用教程》- 梁如軍等