CentOs系統啟動流程
大綱
1、 什么是CentOs系統啟動流程
2、 為什么要了解CentOS系統啟動流程
3、 了解CentOS系統啟動流程對我們有什么幫助
4、 CentOs系統啟動流程詳解
正題
1、 什么是CentOs系統啟動流程
CentOs系統啟動流程是CentOs主機從開機加電自檢到整個系統(包括應用程序)都處于一個正常工作的狀態;
整個流程從宏觀可分為硬件與系統兩個層面,而系統又可以分為內核空間和用戶空間的啟動,每一塊都是按照某些規則自動運行。
2、 為什么要了解CentOS系統啟動流程
因為作為一名Linux技術人員,了解CentOs啟動流程是必要的,而且通過學習CentOs系統啟動流程可以對CentOs工作原理有更深入的了解。
3、 了解CentOS系統啟動流程對我們有什么幫助
在實際工作中,CentOs主機難免會出現無法啟動或啟動異常,而在了解了CentOs系統啟動流程后,可以針對問題對癥下藥,而且通過學習CentOs系統啟動流程后,可掌握部分的Linux工作機制,為以后的解決Linux故障打下扎實的基礎。
4、 CentOs系統啟動流程詳解
在講解CentOs系統啟動流程前,先講一下Linux系統的組成與運行中的系統環境分層,有助于掌握啟動流程的原理。
Linux系統的組成:
內核 + 根文件系統
內核可實現以下功能:
進程管理、內存管理、網絡協議棧、文件系統、安全功能、驅動程序。
內核是linux的整個核心,確切的說內核即是Linux,其他程序都是通過調度內核來實現其功能。
運行中的系統環境分層:
內核空間 + 用戶空間
內核空間: 由內核代碼組成,擁有系統級別權限,可直接更改硬件;
用戶空間: 由各種應用程序組成,通過調用內核來完成各種復雜的任務。
CentOs系統的啟動流程:
1、 POST:加電自檢
它是由主板中的BIOS完成的,主要功用是檢查主機的各個組件是否完好,例如:cpu、內存、硬盤、網卡、光驅等。
2、 Boot Sequence:啟動順序
這一步主要是根據Bios中的設置來按序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備,絕大部分為硬盤啟動;
Bootloader:引導加載器,是一個微小的程序,眾所周知MBR引導記錄大小為512字節,其中前446字節就是Bootloader,主要用來引導用戶選擇要啟動的系統或不同的內核版本;把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權移交到內核;
GRUB:是一個典型的BootLoader程序,因為MBR引導記錄限制,所以GRUB分為兩部分:
1、在MBR引導記錄中,大小為446字節,主要功用是引導啟動存儲在磁盤上的GRUB主體文件;
2、partition:/boot/grub ,此為GRUB的主體,由此來引導用戶。
3、 Kernel:加載內核
當用戶選定啟動的內核或系統,由Bootloader將內核加載到ram中特定空間中,解壓、展開,而后把系統控制權移交到內核時,Kernel會開始自身初始化:
探測可識別到的硬件設備;
加載硬件啟動程序;(有可能會借助于ramdisk加載驅動)
注:(Kernel在內存中加載時,為了模擬系統環境,會生成一個ramdisk文件,來進行下一步操作,等到加載到真正的根文件系統是,就會推出ramdisk,切換到真正的根文件系統中去。)
以只讀方式加載根文件系統;(會涉及到根切換)
運行用戶空間的第一個應用程序:/sbin/init
init程序類型:
centos5 :sysVinit
配置文件: /etc/inittab
centos6 :Upstart
配置文件:/etc/inittab
被架空,主要為了兼容5;
/etc/init/*.conf 主要
Centos 7 :Systemd
配置文件:/usr/lib/systemd/system/, /etc/systemd/system
ramdisk:(內存上臨時虛擬的系統)
Linux內核的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問;
ramdisk(虛擬磁盤,雙緩沖,雙緩存)–>ramfs(虛擬文件系統)
centos5:initrd
工具程序:mkinitrd
centos6,7:initramfs
工具程序:dracut,mkinitrd
系統初始化流程(內核級別):post(加電自檢)–>BootSequence(啟動順序選擇BIOS中實現)–>bootloder(引導加載器,MBR中實現)–>Kernel(加載內核,會生成ramdisk)–>rootfs(以readonly方式加載根文件系統)–>/sbin/init(運行第一個應用程序(相當于小管家))
至此,內核空間就已經啟動完畢,接下來講解用戶空間的啟動流程:
/sbin/init:
是除了內核外擁有最高權限與級別的應用程序,因為所有的應用程序都是由init創建而來,相當于都是init的子進程。
1、選擇默認運行級別
在運行init后,他會根據配置文件定義的運行級別而啟動
以/etc/inittab配置文件為例:(每行定義一種action以及與之對應的process)
id:runlevels:action:process
id:一個任務的標識符
runlevels:在哪些級別啟動此任務;#,###,也可以為空,表示所有級別;
action:在什么條件下啟動此任務;
process:任務;
action:
wait:等待切換至此任務所在的級別執行一次;
respawn:一旦此任務終止時,就自動重新啟動之;
initdefault:設定默認允許級別;此時process省略;
sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit腳本;
示例:
id:5:initdefault
默認以圖形化界面啟動
si::sysinit:/etc/rc.d/rc.sysinit 所有級別都以此腳本完成系統初始化方式;
2、運行系統初始化腳本,完成系統初始化
根據上一步的指定的rc.sysinit系統初始化腳本,完成以下操作:
設置主機名;
設置歡迎信息;
激活udev和SELinux;
掛載/etc/
fstab文件中定義的所有文件系統;
檢測根文件系統,并以讀寫方式重新掛載根文件系統;
設置系統時鐘;
根據/etc/sysctl.conf文件的設置,來設定內核參數;
激活lvm及軟raid設備;
激活swap設備;
加載額外設備的驅動程序;
清理操作
3、 關閉對應級別下要停止的服務和啟動對應級別下需要開啟的服務
根據init配置文件:
l0:0:wait:/etc/rc.d/rc 0
意味著去啟動或關閉/etc/rc.d/rcX.d/目錄下的服務腳本所控制服務;
K*:要停止的服務;K##*,優先級,數字越小,越是優先關閉;依賴的服務先關閉,而后關閉被依賴的;
S*:要啟動的服務;S##*,優先級,數字越小,越是優先啟動;被依賴的的服務先啟動,而依賴的訪問后啟動;
注:rcX.d 中的X代表默認啟動級別,如果之前定義的是5(圖形界面),他會在rc.d里查找rc5.d里的服務來啟動關閉;
rc腳本:接受一個運行級別為參數; 不適用os7
4、 設置登陸終端
其實到上一步時服務器已經完成了基本的啟動,這一步主要是開啟一個登陸終端,然后加載環境變量、和別名的配置文件,如果是圖形界面的話,會啟動圖形界面,然后加載圖形界面需要的各種插件。
總結:(用戶空間的啟動流程):/sbin/init(/etc/inittab)
設置默認允許級別–>允許系統初始化腳本,完成系統初始化–>關閉對應級別下要停止的服務,啟動對應級別下需要開啟的服務–>設置登陸終端–>[啟動圖形終端]
最后是總結CentOS系統啟動流程:
post(加電自檢) –> BootSequence(啟動順序選擇BIOS中實現)–> bootloder(引導加載器,MBR中實現 –> Kernel(加載內核,會生成ramdisk –> rootfs(以readonly方式加載根文件系統)–> /sbin/init(運行第一個應用程序(相當于小管家)) –> 設置默認允許級別 –> 允許系統初始化腳本,完成系統初始化 –> 關閉對應級別下要停止的服務,啟動對應級別下需要開啟的服務 –> 設置登陸終端 –> [啟動圖形終端]
原創文章,作者:N25_韓奇洋,如若轉載,請注明出處:http://www.www58058.com/69177
非常認真詳細的總結,看好你,再接再勵。