1.硬體啟動階段
bios自檢
bios的功能由兩部分組成,
分別是post碼和runtime服務
。post階段完成後它將從儲存器中被清除,而runtime服務會被一直保留,用於目標作業系統的啟動。bios兩個階段所做的詳細工作如下:
步驟1:
上電自檢post(power-on self test),
主要負責檢測系統外圍關鍵裝置(如:cpu、記憶體、顯示卡、i/o、鍵盤滑鼠等)是否正常
。例如,最常見的是記憶體鬆動的情況,bios自檢階段會報錯,系統就無法啟動起來;
步驟2:
步驟1成功後,便會執行一段小程式用來列舉本地裝置並對其初始化。這一步
主要是根據我們在bios中設定的系統啟動順序來搜尋用於啟動系統的驅動器,如硬碟、光碟、u盤、軟盤和網路等
。我們以硬碟啟動為例,bios此時去讀取硬碟驅動器的第乙個扇區(mbr,512位元組),然後執行裡面的**。實際上這裡bios並不關心啟動裝置第乙個扇區中是什麼內容,它只是負責讀取該扇區內容、並執行。
至此,bios的任務就完成了,此後將系統啟動的控制權移交到mbr部分的**。
mbr引導
自檢硬體沒有問題時候,這裡以bios為例,bios將會直接去找硬碟是硬碟的0柱面,0磁軌、1扇區(第乙個扇區),稱為主引導扇區,也稱為主引導記錄,它由三部分組成:主引導程式(bootloader)、硬碟分割槽表dpt(disk partition table)和硬碟有效標誌(55aa)。
注:硬碟預設乙個扇區大小為512位元組。
第一部分,主引導程式(bootloader)佔446個位元組,負責從活動分割槽中裝載,並執行系統引導程式。
第二部分,硬碟分割槽表dpt佔64個位元組,有4個分割槽表項,每個分割槽表項佔16個位元組,硬碟中分割槽有多少以及每乙個分割槽的大小都記錄在其中。
第三部分,硬碟有效標誌,佔2個位元組,固定為55aa。如果這個標誌位0xaa55,就認為這個是mbr。
找到前446位元組,
將mbr載入到記憶體中
,mbr將告訴程式下一階段去**找系統grub引導。此階段屬於grub的第一階段。grub還有1.5階段和2階段。
2.grub啟動引導階段
grub的
主要作用是提供乙個選單,允許使用者選擇要啟動系統或不同的核心版本
,把使用者選定的核心裝載到記憶體的特定空間中,解壓展開,並把系統控制權移交給核心,
3.核心引導階段
簡單說一下這一步的流程:通過記憶體中的虛擬根檔案系統,載入驅動,然後切換到真正的根檔案系統,並執行/sbin/init程式。
由於init是第乙個執行的程式,
它的程序編號(pid)就是1。
其他所有程序都從它衍生,都是它的子程序。
4.系統初始化階段
簡單說一下這一步的流程:/sbin/init程式會讀取/etc/inittab檔案確認執行級別,然後執行/etc/rc.d/rc指令碼,根據確認的執行級別啟動對應/etc/rc.d/rc#.d/目錄下的服務(#為0~6),與此同時執行系統初始化指令碼/etc/rc.sysinit(軟鏈結,指向/etc/rc.d/rc.sysinit),還會載入/etc/rc.local(軟鏈結,指向/etc/rc.d/rc.local檔案)使用者自定義服務(指令碼)。
1、讀取/etc/inittab檔案
inittab檔案裡面定義了系統預設執行級別,這一步做了一些工作如下:
a)初始執行級別(run level)
b)系統初始化指令碼
c)對應執行級別的指令碼目錄
d)定義ups電源終端/恢復指令碼
e)在虛擬控制台生成getty,以生成終端
f)在執行級別5初始化x
2、執行/etc/rc.d/rc.sysinit程式
系統初始化一些指令碼,主要完成以下工作
a)設定主機名
b)設定歡迎資訊
c)啟用udev和selinux可以在grub.conf中,kernel行新增selinux=0以關閉selinux
d)掛載/etc/fstab檔案中定義的檔案系統
e)檢測根檔案系統,並以讀寫方式重新掛載根檔案系統
f)設定系統時鐘
g)啟用swap裝置
h)根據/etc/sysctl.conf檔案設定核心引數
i)啟用lvm及software raid裝置
j)載入額外裝置的驅動程式
k)清理操作
3、/etc/rc#.d/檔案(各種服務)
在不同的執行級別下,/etc/rc.d/rc這個指令碼會分別執行不同目錄下的指令碼
乙個數字代表乙個執行級別,共7個執行級別
裡面定義的是各種服務的啟動指令碼,可以ls檢視,
這些檔案其實都是軟鏈結,指向的都是/etc/rc.d/init.d/目錄下的檔案
4、/etc/rc.d/rc.local檔案
這裡面可以自定義開機啟動的命令。
5.啟動終端
完成了系統所有的啟動任務後,
linux會啟動終端或x-window來等待使用者登入
。tty1,tty2,tty3...這表示在執行等級1,2,3,4的時候,都會執行"/sbin/mingetty",而且執行了6個,所以linux會有6個純文字終端,mingetty就是啟動終端的命令。
CentOS6 X啟動流程
boot分割槽 啟動引導程式是預設可以識別boot分割槽的.因此在系統還無法載入硬碟的時候,boot分割槽是可以識別的 centos 6.x中使用initramfs記憶體檔案系統取代了centos 5.x中的initrd ram disk。他們的作用類似,可以通過啟動引導程式載入到記憶體中,然後載入...
CentOS 6 X啟動流程
boot分割槽 啟動引導程式是預設可以識別boot分割槽的.因此在系統還無法載入硬碟的時候,boot分割槽是可以識別的 centos 6.x中使用initramfs記憶體檔案系統取代了centos 5.x中的initrd ram disk。他們的作用類似,可以通過啟動引導程式載入到記憶體中,然後載入...
CentOS系統啟動流程
centos 6啟動流程 post boot sequence bios boot loader mbr kernel ramdisk rootfs readonly switchroot sbin init etc inittab,etc init conf 設定預設執行級別 執行系統初始化指令碼...