centos系統(tǒng)啟動過程詳解


??本文以centos5為例,詳細(xì)說明從按下電源直到屏幕出現(xiàn)命令行提示符的Linux整個啟動過程。當(dāng)用戶按下電源,BIOS開機(jī)自檢,按BIOS中設(shè)置的啟動設(shè)備啟動,接著啟動設(shè)備上安裝的引導(dǎo)程序grub開始引導(dǎo)Linux。Linux首先進(jìn)行內(nèi)核的引導(dǎo),接下來執(zhí)行init程序,init調(diào)用了rc.sysinit和rc等程序,rc.sysinit和rc完成系統(tǒng)初始化和運(yùn)行服務(wù)的任務(wù)后,返回init;init啟動了mingetty后,打開了終端供用戶登錄系統(tǒng),用戶登錄成功后進(jìn)入了Shell,這樣就完成了從開機(jī)到登錄的整個啟動過程。
??整個Linux啟動過程分成以下幾個部分:

  • POST加電自檢
  • 引導(dǎo)加載器引導(dǎo)程序
  • 加載內(nèi)核
  • 運(yùn)行init
  • 系統(tǒng)初始化
  • 啟動對應(yīng)運(yùn)行級別的守護(hù)進(jìn)程
  • 建立終端
  • 登錄系統(tǒng),啟動完成

POST加電自檢

??開機(jī)按下電源鍵后,計算機(jī)加電,主板上的BIOS或UEFI基本輸入輸出程序開始對計算機(jī)硬件進(jìn)行檢查,主要是負(fù)責(zé)完成對CPU、主板、內(nèi)存、硬盤子系統(tǒng)、顯示子系統(tǒng)、 串并行接
口、鍵盤、 CD-ROM光驅(qū)等硬件情況的檢測。當(dāng)檢測到錯誤的時候,機(jī)器有可能會中斷或者啟動不了。如果沒什么重大錯誤,接下來就會按次序查找引導(dǎo)設(shè)備,第一個有引導(dǎo)程序的設(shè)備為本次啟動設(shè)備。

引導(dǎo)加載器引導(dǎo)程序

??確定引導(dǎo)介質(zhì)后,便開始從介質(zhì)中裝載引導(dǎo)程序如grub,這是一個微小程序,我們知道MBR引導(dǎo)記錄大小為512字節(jié),其中前446個字節(jié)就是Bootloader,主要用來引導(dǎo)用戶選擇要啟動的系統(tǒng)或不同的內(nèi)核版本,把用戶選定的內(nèi)核裝載到RAM中的特定空間中,解壓,展開,而后把系統(tǒng)控制權(quán)移交給內(nèi)核。
??grub是Linux中Bootloader程序,由于MBR記錄大小的限制,所以grub分為三個部分:

  • stage1: mbr,引導(dǎo)啟動介質(zhì)的grub主體文件
  • stage1_5: mbr之后的扇區(qū),讓stage1中的bootloader能識別stage2所在的分區(qū)上的文件系統(tǒng)
  • stage2:磁盤分區(qū)(/boot/grub/)

??需要注意的是:stage1和stage1_5不屬于任何分區(qū),這兩個階段是沒有文件系統(tǒng)的,都是以磁盤0101的方式直接訪問的。
??stage2階段中,會進(jìn)入/boot/grub/,里面有g(shù)rub.conf配置文件,根據(jù)里面的內(nèi)核配置信息去加載內(nèi)核。

加載內(nèi)核

??這時候kernel開始進(jìn)行自身初始化:探測可識別的硬件設(shè)備,加載硬件驅(qū)動程序(借助于ramdisk加載驅(qū)動,ramdisk是輔助的偽根系統(tǒng),虛擬磁盤),并且以只讀方式掛載根文件系統(tǒng),運(yùn)行用戶空間的第一個應(yīng)用程序 /sbin/init。
??kernel在內(nèi)存中加載時,為了模擬系統(tǒng)環(huán)境,會生成一個ramdisk文件,來進(jìn)行下一步操作,等到加載到真正的根文件系統(tǒng)時,就會退出ramdisk,切換到真正的根文件系統(tǒng)中去。
??/boot/initrd-VERSION-release.img,也就是上面提到的ramdisk,存放了和內(nèi)核啟動相關(guān)的最基本驅(qū)動,和啟動無關(guān)的一般都放在/lib/modules/下面。/boot/initrd-VERSION-release.img是解決根的掛載問題,掛載根之前必然已經(jīng)進(jìn)入/boot了。進(jìn)/boot 是grub來負(fù)責(zé)的,注意/boot 和/ 的文件系統(tǒng)是可以不一樣的,這兩個是獨(dú)立的分區(qū)。內(nèi)核是放在/boot下面的,先加載內(nèi)核,然后掛載根/,掛載根的時候需要用到文件系統(tǒng)驅(qū)動,而文件系統(tǒng)的驅(qū)動放在/lib/modules/下面,就是在根下面,就矛盾了。而ramdisk就是來解決這個問題的 。

運(yùn)行init

??init的進(jìn)程號是1,從這一點就能看出,init進(jìn)程是系統(tǒng)所有進(jìn)程的起點,Linux在完成內(nèi)核引導(dǎo)以后,就開始運(yùn)行init進(jìn)程。init進(jìn)程需要讀取配置文件/etc/inittab。inittab是一個不可執(zhí)行的文本文件,它有若干行指令所組成。
??/sbin/init:運(yùn)行系統(tǒng)的第一個進(jìn)程。這個進(jìn)程會讀取相應(yīng)配置文件,比如Centos 5的配置文件:/etc/inittab。init讀取其初始化文件: /etc/inittab,來確定初始運(yùn)行級別(RUN LEVEL),運(yùn)行系統(tǒng)初始化腳本以及對應(yīng)運(yùn)行級別的腳本目錄里面的腳本等。

系統(tǒng)初始化

??在init的配置文件/etc/inittab中有這么一行: si::sysinit:/etc/rc.d/rc.sysinit,這是調(diào)用系統(tǒng)初始化腳本,主要實現(xiàn)的功能:

(1) 設(shè)置主機(jī)名
(2) 設(shè)置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統(tǒng)
(5) 檢測根文件系統(tǒng),并以讀寫方式重新掛載根文件系統(tǒng)
(6) 設(shè)置系統(tǒng)時鐘
(7) 激活swap設(shè)備

(8) 根據(jù)/etc/sysctl.conf文件設(shè)置內(nèi)核參數(shù)
(9) 激活lvm及software raid設(shè)備
(10) 加載額外設(shè)備的驅(qū)動程序
(11) 清理操作

啟動對應(yīng)運(yùn)行級別的守護(hù)進(jìn)程

??在rc.sysinit執(zhí)行后,將返回init繼續(xù)其它的動作,通常接下來會執(zhí)行到/etc/rc.d/rc程序。以運(yùn)行級別5為例,init將執(zhí)行配置文件/etc/inittab中的以下這行: l5:5:wait:/etc/rc.d/rc 5。
??這一行表示以5為參數(shù)運(yùn)行/etc/rc.d/rc,/etc/rc.d/rc是一個Shell腳本,它接受5作為參數(shù),去執(zhí)行 /etc/rc.d/rc5.d/目錄下的所有的rc啟動腳本,/etc/rc.d/rc5.d/目錄中的這些啟動腳本實際上都是一些軟鏈接文件,而不是真正的rc啟動腳本,真正的rc啟動腳本實際上都是放在/etc/rc.d/init.d/目錄下。而這些rc啟動腳本有著類似的用法,它們一般能接受 start、stop、restart、status等參數(shù)。
??/etc/rc.d/rc5.d/中的rc啟動腳本通常是K或S開頭的軟鏈接文件,對于以以S開頭的啟動腳本,將以start參數(shù)來運(yùn)行。而如果發(fā)現(xiàn)存在相應(yīng)的腳本也存在K打頭的鏈接,而且已經(jīng)處于運(yùn)行態(tài)了(以 /var/lock/subsys/下的文件作為標(biāo)志),則將首先以stop為參數(shù)停止這些已經(jīng)啟動了的守護(hù)進(jìn)程,然后再重新運(yùn)行。這樣做是為了保證是當(dāng) init改變運(yùn)行級別時,所有相關(guān)的守護(hù)進(jìn)程都將重啟。

建立終端

??rc執(zhí)行完畢后,返回init。這時基本系統(tǒng)環(huán)境已經(jīng)設(shè)置好了,各種守護(hù)進(jìn)程也已經(jīng)啟動了。init接下來會打開6個終端,以便用戶登錄系統(tǒng)。通過按Ctrl+Alt+Fn(n對應(yīng)1-6)可以在這6個終端中切換。在inittab中的以下6行就是定義了6個終端:

??1:2345:respawn:/sbin/mingetty tty1
  2:2345:respawn:/sbin/mingetty tty2
  3:2345:respawn:/sbin/mingetty tty3
  4:2345:respawn:/sbin/mingetty tty4
  5:2345:respawn:/sbin/mingetty tty5
  6:2345:respawn:/sbin/mingetty tty6

??從上面可以看出在2、3、4、5的運(yùn)行級別中都將以respawn方式運(yùn)行mingetty程序,mingetty程序能打開終端、設(shè)置模式。同時它會顯示一個文本登錄界面,這個界面就是我們經(jīng)??吹降牡卿浗缑?,在這個登錄界面中會提示用戶輸入用戶名,而用戶輸入的用戶將作為參數(shù)傳給login程序來驗證用戶的身份。

登錄系統(tǒng),啟動完成

??對于運(yùn)行級別為5的圖形方式用戶來說,他們的登錄是通過一個圖形化的登錄界面。登錄成功后可以直接進(jìn)入KDE、Gnome等窗口管理器。


??至此,centos5的系統(tǒng)啟動過程就大致介紹完了,不足之處,請多多指正。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • CentOS 6啟動流程CentOS 5,6的init啟動過程詳解grub啟動過程詳解啟動過程錯誤修復(fù) 一、Cen...
    哈嘍別樣閱讀 2,248評論 0 2
  • 經(jīng)過對Linux系統(tǒng)有了一定了解和熟悉后,想對其更深層次的東西做進(jìn)一步探究。這當(dāng)中就包括系統(tǒng)的啟動流程、文件系統(tǒng)的...
    大福技術(shù)閱讀 1,852評論 0 13
  • linux資料總章2.1 1.0寫的不好抱歉 但是2.0已經(jīng)改了很多 但是錯誤還是無法避免 以后資料會慢慢更新 大...
    數(shù)據(jù)革命閱讀 13,230評論 2 33
  • 系統(tǒng)啟動是一項非常復(fù)雜的程序,因為內(nèi)核得先檢測硬件并加載適當(dāng)?shù)尿?qū)動程序后,接下來則必須要調(diào)用程序來準(zhǔn)備好系統(tǒng)運(yùn)行的...
    Zhang21閱讀 12,320評論 3 10
  • 一天,A君問我,世界上有多少種朋友?對于A君突發(fā)起來的提問,竟然沒有一下回過神來。從來沒有思考過,朋友還分多少種,...
    酒拾叁閱讀 942評論 0 2

友情鏈接更多精彩內(nèi)容