CentoOS 系統的啟動流程
作為一個Linux運維工程師,必須要熟悉Linux系統的啟動流程,才能在Linux系統出現故障時及時地發現問題,解決問題;下面將為大家介紹一下CentOS系統的系統啟動流程。
CentOS啟動流程
根據上圖所示,centos系統總體可分為5個階段:POST加電自檢—BOOT啟動引導階段—Grub啟動引導階段—Kernel初始化階段—進程引導階段(init)。
一. POST加電自檢
此階段是所有操作系統都必須的階段,就是設備開機,主板硬件檢測的階段,
二. BOOT啟動引導階段
當硬件自檢沒有問題之後,BIOS會按照次序查找各個引導設備,第一次有引導程序的設備,即為本次啟動要用到的設備,一般為磁盤的第一個扇區,上面有MBR的系統引導加載器,MBR為用戶提供了一個菜單,允許用戶選擇要啟動的系統或不同的內核版本,把用戶選定的內核裝載到RAM中的特定空間中,進行解壓、展開,而後把系統控制權移交給內核。
三. Grub啟動引導階段
GRUB(GRand Unified Bootloader簡稱“GRUB”)是一個來自GNU項目的多操作系統 啟動程序。GRUB是多啟動規範的實現,它允許用戶可以在計算機內同時擁有多個操作系統,並在計算機啟動時選擇希望運行的操作系統。GRUB可用於選擇操作系統分區上的不同內核,也可用於向這些內核傳遞啟動參數。
Grub的引導可以分為三步: Stage 1:mbr引導 Stage 1_5:mbr之後的扇區,讓stage1中BootLoader能識別stage2所在分區上的文件系統 Stage 2:將主引導程序載入磁盤分區中(CentOS 6 /boot/grub/,CentOS 7 /boot/grub2)
四. Kernel初始化階段
當系統讀取到grub.conf文件中的內核啟動參數後,內核隨即進入內核初始化啟動階段。內核初始化進程分為四個步驟進行,首先內核會探測可識別到的所有硬件設備;接著為硬件設備加載硬件驅動程序,加載硬件驅動時,內核需要借助偽文件系統ramdisk進行加載驅動;當硬件驅動加載完成後,內核會以只讀的方式掛載一個根文件系統,並且移交根文件系統給正常的系統;然後運行用戶空間的第一個程序:/sbin/init,至此,內核的初始化階段就完成了。
五. 進程引導階段
在內核啟動用戶空間的第一個程序/sbin/init之後,init將全面接管centos系統,init也是所有其他進程的父進程;
Init程序在centos系統的不同版本中各不一樣,在centos 5中,init程序是SysV init,其配置文件為/etc/inittab;在centos 6中,init程序是upstart,其配置文件為/etc/init/&.conf,而/etc/inittab文件僅用於定義默認運行級別;在centos 7中,init程序是systemctl,其配置文件為/usr/lib/system/或/etc/system/system/。
Init引導階段可分為四個部分,1.設置默認運行級別;2.運行系統初始化腳本,完成系統初始化;3.關閉對應級別下需要停止的服務,啟動對應級別下需要啟動的服務;4.設置登錄終端(如需啟動圖形界面,則啟動圖形界面)
1.設置默認運行級別
Centos系統的運行級別是為了系統運行或維護等目的設定的運行機制,分為7個級別,分別是
0:關機,shutdown
1:單用戶模式(single user),登錄用戶為root用戶,無須認證,為維護模式
2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS,為維護模式
3:多用戶模式(multi user),完全功能模式,文件界面
4:預留級別,目前無特別適用目的,但習慣以同3級別功能使用
5:多用戶模式(multi user),完全功能模式,圖形界面
6:重啟,reboot
級別3和5是centos系統的默認級別,如需要進行級別切換,可以使用init+#,進行級別切 換,如需查看當前所在的運行級別可以使用who -r或runlevel命令查看
2.運行系統初始化腳本
系統初始化的腳本為/etc/rc.d/rc.sysinit腳本,腳本執行後會設置下列信息
(1)設置主機名
(2)設置歡迎信息
(3)激活udev和selinux
(4)掛載/etc/fstab文件中定義的所有文件系統
(5)檢測根文件系統,並以讀寫方式重新掛載根文件系統
(6)設置系統時鐘
(7)根據/etc/sysctl.conf文件來設置內核參數
(8)激活lvm及軟raid設備
(9)激活swap設備
(10)加載額外設備的驅動程序
(11)清理操作
- 關閉對應級別下需要停止的服務,啟動對應級別下需要啟動的服務
當系統選擇了啟動的運行級別#後,init進程會在/etc/rc.d/rc#.d/運行對應的服務腳本,關閉對應級別下需要停止的服務,啟動對應級別下需要啟動的服務。
K:要停止的服務,K##,優先級,數字越小,越是優先關閉,依賴的服務先關閉,而後關閉被依賴的
S:要啟動的服務,S##,優先級,數字越小,越是優先啟動,被依賴的服務先啟動,而依賴的服務後啟動
4.設置登錄終端(如需啟動圖形界面,則啟動圖形界面)
當init進程啟動完對應級別下需要啟動的服務後,將進入系統啟動進程的最後一步,就是設置登錄終端,如需要啟動圖形界面的,則啟動圖形界面,當登錄終端啟動完成後,centos系統的啟動流程就完成了,輸入正確的用戶名跟密碼後將可以正常使用centos系統。
以上為本人對於Centos系統啟動流程的一些總結理解,如有不當之處,希望各位大神多多指導,感謝每位朋友的閱讀。
CentoOS 系統的啟動流程