CentOS 6中所採用的Bootloader程序爲grub,init爲upstart。開機啓動的大致流程圖如下:
步驟圖分解如下:
1、加電自檢,當按下電源時,計算機通過BIOS去加載CMOS的信息,取得主機的各項硬件配置,並會進行硬件檢測和硬件初始化。
2、BIOS根據Boot Sequence(設備啓動次序)取得第一個可啓動設備。按次序查找,如果當前設備沒有MBR時,跳過當前設備查找下一個設備,直到找到含有MBR的設備。如果MBR出現損壞等故障,啓動則會失敗,且不會繼續往下查找可引導的設備。否則,進行下一步操作。
3、BIOS會讀取選定設備的MBR中的信息,並加載Bootloader。只要BIOS能識別硬盤,就可以通過硬件的INIT 13中斷功能讀取硬盤設備的第一個扇區內的MBR。
由於根據MBR的結構Bootloader佔據了446字節,而存儲在MBR中的bootloader代碼因此受到了限制,爲了解決這個問題,bootloader將功能切割成幾個部分,因此MBR中只存儲了bootloader的主程序,配置相關文件則存儲在文件系統中。
grup的功能由三個模塊完成:Stage1,Stage1_5和Stage2。Stage1即存儲在MBR中的Bootloader,Stage1_5存儲在MBR後面的扇區中,而Stage2則一般存儲於文件系統中,/boot目錄下。Stage1和Stage1_5所要完成的任務是去加載Stage2,Stage2纔是功能實現的模塊。Stage1並不能識別文件系統,因此需要加載Stage1_5,而Stage1_5具備識別文件系統的功能,因此可以到文件系統中加載Stage2模塊。注意:當Stage1可以識別Stage2固定存儲的物理空間時,不需要通過Stage1_5就可以直接加載Stage2。
Stage2加載相關的配置文件後,實現的功能如下:
提供選擇菜單,並提供交互式接口。
用戶可以選擇不同的啓動選項,可實現多重引導功能;碼。
加載內核文件(或initramfs)
直接指向內核文件所在的位置來開始啓動操作系統。
轉交其他loader
將引導功能移交給其他的loader負責。
4、kernel被加載到內存後開始進行自身初始化,主要操作爲:探測可識別到的所有硬件設備並加載相應的硬件驅動;安全起見,以只讀方式掛載根文件系統, (等到啓動完成,各項功能正常,再重新以讀寫方式掛載);調用用戶空間的第一個應用程序/sbin/init 。
因爲kernel無法識別磁盤,所以要藉助initramfs的獲取磁盤的驅動程序。 initramfs類似一個精簡的內核,裏面包含了啓動過程中所需要的模塊(在安裝系統的時候確定了需要哪種硬盤驅動,也一併集成到initramfs中)。initramfs需不需要被加載取決於kernel能否識別磁盤,一般來說需要init的時刻爲:
根目錄所在磁盤爲SATA,SCSI,SAS,USB等接口,IDE除外
根目錄所在文件系統爲LVM,RAID等格式
其他必須在內核加載時就提供的模塊
5、init最主要的功能是準備軟件執行的環境,調用執行相關腳本文件來實現,
如/etc/inittab、/etc/init/*.conf等
獲取默認運行級別,/etc/inittab
系統初始化,/etc/rc.d/rc.systinit
關閉或啓動對應級別下的服務,並啓動啓動終端等,/etc/init/*.conf與/etc /rc.d/rc#.d
/etc/rc.d/rc.sysinit初始化時所進行的操作
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,並以讀寫方式重新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操作