系統啟動流程:
POST-->BIOS(Boot Sequence)--> BootLoader(MBR)--> Kernel(initrd,initramfs)--> init (/etc/inittab)
1、家電自檢:POST(PowerOnSelfTest)
先載入一段程式,系統剛剛啟動時,能自動将某段rom中的程式映射到cpu可以尋址到的空間中去,并且讓cpu可以執行其中的指令。這些指令是為了完成系統檢測的。如果系統的基本硬體,核心硬體沒有問題的話,将進入下一步驟。
注:BIOS:系統首先由POST(PowerOnSelfTest,上電自檢)程式來對内部各個裝置進行檢查;自檢後,就首先按照系統CMOS設定中儲存的啟動順序搜尋軟硬碟驅動器及CD—ROM、網絡伺服器等有效地啟動驅動器,讀入作業系統引導記錄,然後将系統控制權交給引導記錄,并由引導記錄來完成系統的順利啟動。
2、BIOS
根據BIOS中所設定的系統啟用流程去找對應裝置的上的MBR,我們将這個啟動次序叫做(Boot Sequence)
3、MRB(BootLoader)
根據以上面的引導次序去逐個的找對應的儲存設備上的MBR,如果MBR存在的話,則會去讀取MBR中的BootLoader,BootLoader是一段程式,在其中配置了所要引導的作業系統的核心的位子,是以,BIOS被載入記憶體以後,然後其将控制權限交給BootLoader以後,BootLoader就接收了整個系統的控制權限,是以其就根據使用者的選擇去讀取相應作業系統的核心,将核心裝載進記憶體中合适的位子,解壓縮并完成核心初始化以後,接下來BootLoader會将控制權限轉交給核心。
注:
硬碟主引導記錄MBR(MasterBootRecord):位于硬碟0磁道0柱面1扇區,該扇區共512bytes,其中MBR占446bytes ;MBR所做的唯一的事情就是裝載第二引導裝載程式。
分區表DPT(Disk Partition Table)占64bytes;
硬碟有效标志(Magic Number)占2bytes;
4、Kernel(initrd,initramfs)
核心初始化:
注:核心:子產品化設計,大部分裝置子產品是在需要時加載驅動,并且大部分子產品的驅動放置于根分區上。
硬體探測
裝載驅動
--驅動可能在核心中 也可能在initrd中。紅帽5中叫做initrd,紅帽6中叫做initramfs.其中存儲着核心所依賴的額外的驅動,比如ext3,也就是根檔案系統。比如一些驅動在根檔案系統中,但是核心中沒有裝載讀取根檔案系統的驅動,那麼就是initrd的作用了,它首先給核心提供基本驅動去讀取根檔案系統。等核心豐滿以後,在逐漸失去其作用。
挂載根檔案系統
啟動使用者控件中的第一個程序init
5、執行init(/etc/inittab)
注:在紅帽6中,init程式變為了upstart,其為項名稱,為了相容名字依然為init,它的配置檔案在/etc/inittab與/etc/init/*.conf
inittab配置檔案的設定
設定預設運作級别
系統初始化腳本(/etc/rc.d/rc/sysinit)
運作指定級别的服務腳本
/etc/rc.d/init.d/都連結到/etc/rc.d/rc#.d
init.d中的腳本都是連接配接的,連接配接的名字比較獨特
K* S* 表示執行次序--數字越小越先被執行
checkconfig幫助建立這些連結
如3級别下啟動,先運作rc3.d裡面的以K98*開頭的服務,然後其會去rc.d/init.d裡面通過checkconfig來找腳本中98啟動級别的腳本來運作。如果腳本中有'. /etc/rc.d/init.d/functions'來讀取functions中的格式--定義顯示ok fauled格式
注:
rcN;表示用rc腳本去運作rcN.d目錄下的腳本;rc腳本就是去執行所需級别腳本的功能腳本;
目錄下的檔案均為腳本連結檔案,指向/etc/rc.d/rcN.d/目錄,并且命名時以S或K開頭,後面跟上
0-99的數字;S代表啟動時執行;K代表關閉時執行;01-99代表啟動或關閉的級别(數字越小越優先)
初始化結束前執行最後一個檔案:/etc/rc.d/rc.local,系統會讀取該腳本中的所有指令并執行一遍;但是該腳本隻在啟動時執行一次,系統關閉時不能執行,是以不要為了實作開機啟動而将某些服務寫入這個腳本,那樣會造成服務關機時的非正常關閉。
完成後設定ctrl alt delete的意義以及突然斷電怎麼辦,電源恢複怎麼辦
啟動虛拟終端
啟動圖形終端--運作級别5情況下
/etc/rc.d/rc.sysinit:系統初始化--更進階化(後續服務可以由它完成)
注:核心挂載根檔案系統的時候是隻讀方式挂載的,防止發生意外
檢測,并以讀寫方式重新挂載根檔案系統;
設定主機名;
檢測并挂載/etc/fstab中的其他檔案系統;
啟用swap分區;
初始化外圍硬體裝置的驅動:如網卡驅動,顯示卡等
根據/etc/sysctl.conf設定核心參數;
激活udev和selinux;
激活LVMhe RAID裝置;
清理過期鎖和PID檔案;
裝載鍵映射:如鍵盤上的每一個鍵的功能
是以第5步可以了解為:先讀取inittab中的運作級别,然後系統跑到rc.d中去找相應的運作級别的檔案如rc3.d,然後通過rc3.d中S98*開頭的檔案(裡面K開頭的可以為很多個一起去找)去rc.d/init.d中,通過checkconfig定義在腳本中的運作級别的檔案來讀取腳本并按照次序運作(如‘checkconfig 35 98 01’ 其中3 5 為運作級别'rc3.d為3級别',98對應rc3.d中S98開頭的檔案)。
本文轉自 陳延宗 51CTO部落格,原文連結:http://blog.51cto.com/407711169/1167660,如需轉載請自行聯系原作者