1. 程式人生 > >CentOS5/6啟動過程

CentOS5/6啟動過程

6 centos5 啟動流程

CentOS系列的操作系統的架構類型是X86架構,其內核實現方式是單內核,單內核的意義的在於他對外表現為一個應用程序即一個進程啟動整個系統,所有的功能都集中在這一個進程裏;而windows系列的內核實現方式是微內核,每種功能使用單獨一個子系統來實現;CentOS系列是由內核核心結合內核模塊來一起實現內核功能的,將內核所必須的功能放入內核文件當中,而將內核不一定必須的功能放入內核模塊當中,當需要這類功能時,再將內核模塊插入內核中,在不使用時,再將內核模塊從內核中移除即可;

CentOS5系列操作系統的啟動流程:

CentOS5在啟動時,首先要進行POST加電自檢,由BIOS將ROM只讀存儲器加載只RAM內存當中,由RAM檢查ROM是否有損壞,若無,則正常啟動,若有,則啟動應急方案,當加電自檢沒有問題後,再有BIOS按一定順序去檢索BIOS中的設備,找到第一個Bootloader,引導加載程序,則該設備便為本次啟動所需要的設備;Bootloader引導加載程序接手後,BIOS就退出,由Bootloader去找設備中的內核文件,若找到,則將內核文件載入內存,至此Bootloader退出,由內核進行接下來的操作;

Bootloader,引導加載程序;其作用在於決定到何種硬件設備下加載操作系統;Bootloader目前應用廣泛的兩種類型是LuLo和grub,但LuLo的缺陷在於不能支持大硬盤,常用於手機的引導加載程序,而grub就是廣泛應用於Linux的操作系統引導程序,CentOS5和6的引導程序用的就是grub legacy版本,而CentOS7用的則是grub2,兩種的功能相差較大;grub的主要作用是提供一個交互的菜單界面,上面列舉了當前系統所有內核版本;為系統找到啟動的內核,並將內核載入到RAM內存當中,將權限移交給內核;grub還可以提供一個命令行交互界面,可以讀取指定磁盤內的內核信息以及init信息,從而創建一個小的Linux;grub legacy主要分為三個組成,stage1,是MBR的前446字節,而stage1.5則可以幫助stage1識別stage2的文件系統,而內核核心文件又一定與stage2放在一起,所以stage1.5就可以幫助找到系統中的核心文件,並加載到內存;

內核,當Bootloader退出,由內核接手後,內核進行系統初始化,它可以找到系統中的硬件設備,對硬件設備進行驅動,當遇到其不能驅動的硬件設備時,就啟用ramdisk程序加載驅動,然後掛載根文件系統,最後啟動可以間接啟動所有應用程序的那個唯一的進程/sbin/init進程;之前有說,內核包含內核核心文件以及內核模塊文件,當內核需要時則將模塊導入,否則刪除,在這裏說一些有關內核的一些基本命令;

lsmod:顯示內核核心中已經裝載的內核模塊;

insmod:插入內核模塊到內核核心,但這個命令並不會解決依賴關系,當依賴關系有缺失時,該命令不會生效;

rmmod:卸載內核模塊;

modinfo:可以獲取內核模塊信息

-n:獲取內核模塊的絕對路徑;

-a:顯示模塊的作者信息;

-d:顯示模塊的描述;

-F:僅顯示所提取的信息,只能提一個;

modprobe:可以動態裝載內核模塊以及卸載內核模塊;它可以解決內核模塊的依賴關系,即便缺失,也可以裝載到內核中;

modprobe 內核模塊名:裝載內核模塊;

modprobe -r 內核模塊名:卸載內核模塊;

內核在掛載完rootfs之後,所執行的init的進程;這個進程可以說是所有應用程序或所有進程所以來的進程,啟動它,就可以啟動下屬所有子進程;

init進程在CentOS系列中典型的三個類別:

CentOS5:Sysv init,其配置文件為/etc/inittab

CentOS6:Upstart init,其配置文件為/etc/inittab

CentOS7:Systemd,其配置文件為/etc/systemd/system

/usr/lib/systemd/system

CentOS7的Systemd就相當於正常意義下的init;

首先說明一下CentOS5的Sysv init

CentOS5的init的特點在於,他要去逐個去執行配置文件中的每個腳本來完成系統初始化;

init的配置文件/etc/inittab:

1.確定系統初始化所要完成的任務

需要開啟或關閉哪些服務;

當電源失效時,需要進行什麽操作;

當驗證用戶身份無誤時,如何提供登錄提示符;

如何完成系統初始化;

定義了按下"Ctrl + Alt + Delete"組合鍵時,系統將采取什麽行為;

2.規定任務執行:

執行任務的格式

id:runlevel:action:process

id:操作的唯一標識符;

runlevel:運行級別;

運行級別:

0:關機;

1:單用戶模式,無需驗證,直接登錄;

2:多用戶模式,會啟動網絡功能,但不會啟動NFS;

3:多用戶模式,完全的功能模式,僅使用命令行界面,不使用圖形化界面;

4:預留級別;

5:多用戶模式,可使用命令行界面,也可使用圖形界面,默認使用圖形界面;

6:開機;

action:執行任務所需要的操作;

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

respawn:一旦此任務結束,就自動重新啟動此任務;

initdefault:用於設定默認的運行級別,通常後面的process省略

sysinit:設置系統初始化的方式,一般情況下此處運行/etc/rc.d/rc.sysinit腳本;

/etc/rc.d/rc.sysinit作用:

1.設置主機名稱;

2.設置系統歡迎語;

3.激活swap設備;

4.掛載/etc/fstab中的所有文件系統;

5.激活lvm和raid設備;

6.以讀寫的方式掛載rootfs文件系統;

7.激活udev和SELinux;

8.根據/etc/sysctl.conf文件設置內核參數;

9.加載額外的驅動程序;

10.完成系統清理工作;

CentOS5中/etc/rc.d/rc.sysinit中的部分內容

技術分享

當執行該腳本時,執行腳本中的任務,上述任務格式,第一行表示,id為l0,執行級別為0,wait表示等待達到運行級別0時,執行/etc/rc.d/rc0腳本;

/etc/rc.d/rc#系列腳本中,“#”表示與運行級別相對應的腳本,rc#中的腳本命名都是一些K和S開頭的腳本,K表示關閉,K後面的兩位數字表示優先級,數字越小優先級越高,依賴於其他服務的服務先關閉;SS表示開啟,S後面的兩位數字表示優先級,數字越小優先級越高,被其他服務所依賴的服務先開啟;

腳本框架:

for i in /etc/rc.d/rc#.d/K* ; do

$i stop

done


for i in /etc/rc.d/rc#.d/S* ; do

$i start

done

所有由rc腳本關閉或啟動的鏈接文件的源文件都存在於/etc/rc.d/init.d,系統為了方便使用,為此目錄創建了鏈接/etc/init.d

所有/etc/init.d(/etc/rc.d/init.d)目錄中的腳本執行方式:

# /etc/init.d/SRV_SCRIPT {start|stop|restart|status}

# service SRV_SCRIPT {start|stop|restart|status}


CentOS5啟動流程:

第一:加電自檢,BIOS將ROM導入到RAM內存中,檢查是否有錯;

第二:BootSequence,按一定順序查找BIOS設備中的第一個引導程序,找到引導程序後,BIOS交權,退出;

第三:Bootloader,引導程序通過三層stage結構,找到與stage2一塊的內核文件,將內核載入內存,並交權;

第四:內核,以只讀方式掛載根文件系統,驅動物理設備,當無法驅動某個物理設備時,調用ramdisk裝在驅動;執行/sbin/init命令設置默認運行級別,實現系統初始化,一個一個去開啟和關閉某些服務;Ctrl+Alt+Del熱鍵功能,UPS電源的失效與恢復之後的操作,直到生成終端[啟動圖形界面]


CentOS6啟動流程與CentOS5很相似,唯一不同在於CentOS6的init是upstart,而5的init是Sysv,6的init可以並行執行/etc/inittab中的腳本,速度比5的要快得多;

CentOS5啟動流程:

第一:加電自檢,BIOS將ROM導入到RAM內存中,檢查是否有錯;

第二:BootSequence,按一定順序查找BIOS設備中的第一個引導程序,找到引導程序後,BIOS交權,退出;

第三:Bootloader,引導程序通過三層stage結構,找到與stage2一塊的內核文件,將內核載入內存,並交權;

第四:內核,以只讀方式掛載根文件系統,驅動物理設備,當無法驅動某個物理設備時,調用ramdisk裝在驅動;執行/sbin/init命令,設置默認運行級別,系統初始化,並行地去開啟和關閉某些服務;











CentOS5/6啟動過程