CentOS系統啓動流程

運行中的系統分爲兩層:

        用戶空間:運行應用程序(進程或線程)

        內核空間:運行內核代碼,通常爲特權級操作(系統調用)

系統在啓動是也會分成兩個層次進行。

----------------------------------------------------------------------------------------

內核初始化流程:

    POST加電自檢-->bootsquenceBIOS-->BootLoader(MBR) -->kernelramdisk-->rootfs(readonly)-->/sbin/init(/etc/inittab)

        POST加電自檢:主要檢測主機上的設備是否存在問題。

        bootsquenceBIOS:按次序查找各引導設備,第一個有引導程序的設備即爲本次啓動要用的設備。

        BootLoader(MBR):即NTloaderLILOGRUB等引導加載器程序,它存放在硬盤的MBR區域,也就是磁盤的0扇區的前512bytes,它提供一個菜單,允許用戶選擇要啓動的系統或用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而後把系統控制權移交給內核。而在linux系統中bootloader不是加載內核的而是加載GRUB第二階段,而第二階段在磁盤上,所有這個GRUB第二階段就不受MBR 512byte的限制,而能實現更多更強大的功能,然後再有GRUB第二階段再來加載內核。其實在GRUB第一階段和第二階段之間還有一個1.5階段,是負責連接第一階段與第二階段的。

        kernelramdisk:提供的功能有進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能,而內核本身是不具備這些能力的,這些功能都是由加載在內核上的各種模塊文件提供的。系統啓動前內核首先自身初始化,探測所有設備,驅動程序初始化可能會借組於randisk(由內存虛擬成的磁盤)加載驅動。內核啓動之前是不能識別根目錄的,所以也不能識別/boot,只有遵循FHS目錄結構的才能被當做根分區,並且還要擁有init程序,這是最重要的,所以這裏可能會借用到randisk來充當內核與設備之間溝通的橋樑。

        內核組成部分:

        核心文件:/boot/vmlinuz-VERSION-release

        模塊文件:/lib/modules/KERNELVERSION

        wKiom1aEuo-QsBYZAAAZ6_80olE902.png

內核運行起來就是需要去裝載根文件系統,要想裝載根就得先裝載磁盤驅動程序,而磁盤驅動程序又在根文件系統的模塊上,於是就產生了臨時根(ramdisk)這個概念,這是內存中的一段空間當做磁盤使用,臨時根能夠根據用戶的硬盤設備,自動加載相應的設備驅動,從而讓內核找到真正的根文件系統,找到磁盤上的根文件系統之後虛擬臨時根自動將根下的文件移到真正的根下。

        rootfs(readonly) :爲了防止內核有BUG或操作問題將根文件系統損壞,所以掛載根文件系統是以只讀方式進行的。

        /sbin/init(/etc/inittab):啓動第一個用戶進程init(PID=1)

用戶空間啓動流程:

        設置默認運行級別 --> 運行系統初始化腳本,完成系統初始化 --> 關閉對應級別下需要停止的服務,啓動對應級別下需要開啓的服務--> 設置登錄終端 --> 啓動圖形終端(需系統運行在5級別)

以下以CentOS 5systemV 爲例

運行級別:爲了系統的運行或維護等目的而設定的機制,共0-67個級別:

0:關機, shutdown

1:單用戶模式(single user)root用戶,無須認證;維護模式;

2、多用戶模式(multi user),會啓動網絡功能,但不會啓動NFS;維護模式;

3、多用戶模式(mutli user),完全功能模式;文本界面;

4、預留級別:目前無特別使用目的,但習慣以同3級別功能使用;

5、多用戶模式(multi user) 完全功能模式,圖形界面;

6、重啓,reboot

      級別切換可使用init #

      級別查看runlevel,默認運行級別是35

init初始化程序配置文件:/etc/inittab 

wKioL1aEu7nAiXvXAAARX-xIk-s735.png

    這裏每一行定義一種action,以及對應的process

id:runlevels:action:process

id:一個任務的標識符;

runlevels:在哪些級別啓動此任務;可以是一個或多個數字也可以是空。

action:在什麼條件下啓動此任務;

process:具體任務;

即某個任務:在哪個級別:在什麼樣條件下 :執行什麼樣的操作。

action

wait:等待切換至此任務所在的級別時執行一次;

respawn:一旦此任務終止時,就自動重新啓動;

initdefault:設定默認運行級別;此時,process省略;

sysinit:設定系統初始化方式,一般指定爲指定/etc/rc.d/rc.sysinit腳本;

系統初始化腳本:/etc/rc.d/rc.sysinit主要有以下功能:

     (1)設置主機名;

 (2)設置歡迎信息;

 (3)激活udevselinux

 (4)掛載/etc/fstab文件中定義的所有文件系統;

 (5)檢測根文件系統,並以讀寫方式重新掛載根文件系統;

 (6)設置系統時鐘;

 (7)根據/etc/sysctl.conf文件來設置內核參數;

 (8)激活lvm及軟raid設備;

 (9)激活swap設備;

 (10)加載額外設備的驅動程序;

 (11)清理操作;

        繼續來說說/etc/rc.d這個目錄,linux上服務是以腳本方式進行管理的,所有的服務腳本都存放在/etc/init.d目錄下,並由/etc/rc.d/rc[0-6]7個文件下的進行統一調用管理在各個級別下的運行狀態,這7個文件夾分別對應系統的7個運行級別,並以K*S*表示對應級別下是否開啓對應服務,並且以chkconfig命令來管理/etc/init.d下的腳本在各個級別下的運行狀態,即將這些腳本對應級別運行狀態存放到相應的/etc/rc.d/rc[0-6]中。

K*:要停止的服務;K##*,優先級,數字越小,越是優先關閉;依賴其他服務的服務先關閉,而後關閉被依賴的服務;

S*:要啓動的服務;S##*,優先級,數字越小,越是優先啓動;被依賴其他服務的服務先啓動,而依賴其他服務的服務後啓動;

chkconfig命令:管控/etc/init.d/每個腳本在各級別下的啓動或關閉狀態;

查服務在各個級別運行狀態看:chkconfig--list [name]

添加服務腳本:chkconfig--add name

刪除服務腳本:chkconfig--del name

修改指定鏈接類型:

chkconfig [--level  LEVELS]  name <on|off|reset>

--level LEVELS:指定要控制的級別;默認爲2345

例如:chkconfig--level 35 network on 就是說系統運行35級別是自動開啓network腳本

一般服務腳本頭部如下:

wKiom1aEu8SRmORCAABUjbRMO6w391.png

正常級別下,最後啓動的一個服務S99local沒有鏈接至/etc/init.d下的某腳本,而是鏈接至了/etc/rc.d/rc.local /etc/rc.local)腳本;因此,不便或不需寫爲服務腳本的程序期望能開機自動運行時,直接放置於此腳本文件中即可。

        在/etc/inittab文件中有

wKiom1aEu-XAX8l0AAAUI4wdVxY371.png

        這表示的其實就是要啓動的虛擬終端,而這個登陸提示符和登陸過程並不是由minggetty提供的,而是由minggetty調用login程序提供。這裏x:5:respawn:/etc/X11/prefdm-nodaemon 是圖形界面的活動,只在系統同運行在5級別下才啓動。到這裏整個系統初始化就已經完成了。

----------------------------------------------------------------------------------------

CentOS 6init程序爲upstart,但依然命名爲init/etc/init),其配置文件爲/etc/init/*.conf(多個文件)而不再像CentOS 5用一個上的/etc/inttab每行對應一個任務,而更像是每個任務對應一個文件。在CentOS6上的/etc/inittaba只是用來定義默認運行級別

----------------------------------------------------------------------------------------

CentOS 7 init則不復存在,並以新的systemd代替,在CentOS 7上面配置文件,已經變爲了/usr/lib/systemd/system/*/usr/systemd/system/*下的一堆文件,並且在CentOS 7上的服務從來沒有被訪問過,就不會啓動而不會像CentOS 5CentOS 6 開機只要在定義的級別就啓動。並且CentOS 7上運行級別的概念也不復存在,但卻能完全能夠兼容upstartsystemV的腳本機制。

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章