一、CentOS系統啓動流程圖解(本文主要以CentOS 6.7和7.1爲例講解)
POST-->BootSequence(BIOS)-->Bootloader(MBR)-->Kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()
說明:上圖是Linux系統啓動時的詳細流程,其中黑色部分爲主流程分支,藍色部分爲詳細流程分支,綠色部分是註釋部分
二、啓動詳解
1、POST:加電自檢
POST(PowerOnSelfTest)首先對每一個設備進行檢查。完成後會尋找存有引導記錄的設備,找到後讀入操作系統引導記錄,然後將系統控制權交給引導記錄,並由引導記錄來完成系統的順利啓動。
BOOT Sequence: 按次序查找各引導設備,第一個有引導程序的設備即爲本次啓動要用的設備
,一般電腦是按"F2"或"Del"鍵等等進入BIOS,在裏面我們可以調整硬盤的啓動順序。
2、MBR引導
MBR(Master Boot Record) MBR記錄一般是在磁盤 0 磁道 1 扇區,共512個字節。前446個字節是BootLoder,後 4*16 的 64 個字節是存放分區信息的,最後 2 個字節是校驗信息,一般是 55AA。
3.GRUP引導階段
這時候就可以看到我們的Centos系統了,但是一般都不需要操作,會自動啓動系統。其實我們也可以自己手動啓動系統的
3.1 手動在grub命令行接口啓動系統:
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
3.2 grub的命令行接口:
e: 編輯模式,用於編輯菜單;
c: 命令模式,交互式接口;
help: 獲取幫助列表
help KEYWORD: 詳細幫助信息
find (hd#,#)/PATH/TO/SOMEFILE:
root (hd#,#) 設定grup的根設備
kernel /PATH/TO/KERNEL_FILE: 設定本次啓動時用到的內核文件;額外還可以添加許多內核支持使用的cmdline參數;
例如:init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE: 設定爲選定的內核提供額外文件ramdisk;
boot: 引導啓動選定的內核;
3.3 配置文件:/boot/grub/grub.conf
配置項:
default=#: 設定默認啓動的菜單項;落單項(title)編號從0開始;
timeout=#:指定菜單項等待選項選擇的時長;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜單背景圖片文件路徑;
hiddenmenu:隱藏菜單;
password [--md5] STRING: 菜單編輯認證;
title TITLE:定義菜單項“標題”, 可出現多次;用來引導多個內核或者操作系統
root (hd#,#):grub查找stage2及kernel文件所在設備分區;爲grub的“根”;
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:啓動的內核
initrd /PATH/TO/INITRAMFS_FILE: 內核匹配的ramfs文件;
password [--md5] STRING: 啓動選定的內核或操作系統時進行認證
4、kernel階段
自身初始化 :
探測可識別到得所有硬件設備;
加載硬件驅動程序;(有可能會藉助於randisk加載驅動)
以只讀方式掛載根文件系統;
運行用戶空間的第一個應用程序:/sbin/init
5、啓動 init 進程
init程序的類型:
CentOS 5:SysV init
配置文件:/etc/inittab
CentOS 6:Upstart
配置文件:/etc/inittab
/etc/init/*.conf
CentOS 7:Systemd
配置文件:/usr/lib/systemd/system/,/etc/systemd/system
init 進程是系統啓動的第一個進程。其他進程都是有此進程控制fork出來的,也就是說,init是其他進程的“祖先”,PID=1。當然,PID=0進程我們稱爲空閒進程是屬於內核的。
init啓動後所做的事情:
1、讀取/etc/inittab來讀取默認級別 假設:讀取到的默認級別是 3
2、執行初始化系統腳本 /etc/rc.d/rc.sysinit 來初始化腳本
這個大家有機會可以讀讀,腳本主要的作用如下:
3、然後執行 /etc/rc.d/rc 腳本
此腳本運行的時候此腳本的時候,會讀取/etc/rc.d/rc3.d/下的所有腳本,來控制系統啓動的時候啓動或者關閉那些服務
這些腳本是否開機自啓動,可由 chkconfig 命令來管理。
4、執行/etc/rc.d/rc.local腳本,此腳本是啓動過程中最後啓動的一個腳本。
最後會執行 /bin/login 登錄用戶。至此係統啓動過程完成。