這里主要分析使用BIOS的MBR分區(qū)的啟動流程
啟動流程概覽:
- 加載BIOS的硬件信息,進行自檢查你雌,獲取第一個啟動設(shè)備(如:硬盤)
- 讀取第一個啟動設(shè)備MBR的boot loader(grub)的啟動信息
- 加載核心操作系統(tǒng)的核心信息故爵,核心開始解壓縮吁伺,并嘗試驅(qū)動所有的硬件設(shè)備涛目。
- 核心執(zhí)行init程序,并獲取默認的運行信息(runlevel)
- init程序執(zhí)行/etc/rc.d/rc.sysinit文件愧捕,準備操作系統(tǒng)環(huán)境(如網(wǎng)絡(luò),時區(qū)等信息)
- 啟動核心的外掛模塊
- init執(zhí)行獲取到的runlevel對應(yīng)的服務(wù)腳本
- init執(zhí)行/etc/rc.d/rc.local
- 執(zhí)行/bin/login程序申钩,等待用戶登錄
- 登錄之后開始以Shell控制主機
1次绘、BIOS
BIOS是英文"Basic Input Output System"的縮寫,直譯過來后中文名稱就是"基本輸入輸出系統(tǒng)"。
其實邮偎,它是一組固化到計算機內(nèi)主板上一個ROM芯片上的程序管跺,它保存著計算機最重要的基本輸入輸出的程序、開機后自檢程序和系統(tǒng)自啟動程序禾进,它可從CMOS中讀寫系統(tǒng)設(shè)置的具體信息豁跑。 ——百度百科
POST:Power-On-Self-Test,加電自檢泻云,是BIOS功能的一個主要部分贩绕。負責完成對CPU、主板壶愤、內(nèi)存淑倾、硬盤子系統(tǒng)、顯示子系統(tǒng)征椒、 串并行接口娇哆、鍵盤、 CD-ROM光驅(qū)等硬件情況的檢測勃救。
這部分主要是硬件的啟動和檢測碍讨,就不細究了。
最關(guān)鍵的一部分是蒙秒,BIOS要獲取到第一個啟動設(shè)備勃黍。
2、引導程序和grub
當BIOS完成自檢并指定啟動設(shè)備后晕讲,就會將對系統(tǒng)的控制權(quán)過渡到引導程序(Boot Loader)覆获。
Linux用的引導程序用的是grub。
grub通常分為兩個階段瓢省,分別是第1階段和第2階段弄息。
- 1階段
包含在MBR(第一個啟動設(shè)備的0扇區(qū))中。由于受MBR的大小限制勤婚,第1階段所做的幾乎只是裝載GRUB的下一階段(存放在硬盤的其它位置)摹量。- - - 1.5階段
包含在MBR后面的30千字節(jié)中,一般使用的文件名是/boot/initrd馒胆,它能夠通過Boot Loader加載到內(nèi)存當中缨称,然后在內(nèi)存中仿真成一個虛擬的一個根目錄。 - 2階段
通過1.5階段提供的虛擬文件系統(tǒng)祝迂,kernel就能夠加載需要的驅(qū)動程序睦尽,最終釋放虛擬文件系統(tǒng),并掛載實際的根目錄文件系統(tǒng)液兽。
3骂删、runlevel
當內(nèi)核加載完整后掌动,系統(tǒng)就會執(zhí)行第一個進程init。
init進程首先通過/etc/inittab獲取到系統(tǒng)默認的runlevel宁玫。
-
runlevel等級
- 0 -halt 關(guān)機
- 1 -single user mode 單用戶模式
- 2 -multi-user,without NFS 沒有NFS的多用戶模式
- 3 -Full Multi-user mode 多用戶模式
- 4 -unsed 保留
- 5 -X11 桌面模式
- 6 -reboot 重啟
/etc/inittab文件在Cenos6后基本上只保留了定義默認runlevel這個功能粗恢。其格式如下:
[root@CentOS6 boot]#vim /etc/inittab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
# 設(shè)置默認runlevel為5模式
id:5:initdefault:
4、執(zhí)行/etc/rc.d/rc.sysinit
/etc/rc.d/rc.sysinit腳本執(zhí)行一系列的命令欧瘪,去配置整個系統(tǒng)環(huán)境:
1眷射、網(wǎng)絡(luò)環(huán)境、主機名
2佛掖、掛載內(nèi)存妖碉、usb設(shè)備等等
3、設(shè)置終端字體
...
5芥被、執(zhí)行/etc/rc.d/rc$runlevel.d
根據(jù)之前獲取的runlevel欧宜,執(zhí)行對應(yīng)的運行級別的服務(wù)
init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit
[root@CentOS6 rc.d]#[root@CentOS6 boot]#cd /etc/rc.d/
-bash: [root@CentOS6: command not found
[root@CentOS6 rc.d]#[root@CentOS6 rc.d]#ls
-bash: [root@CentOS6: command not found
[root@CentOS6 rc.d]#init.d rc rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d rc.local rc.sysinit^C
[root@CentOS6 rc.d]#ls rc3.d
K01smartd K60nfs K88sssd S10network S24rpcgssd S80postfix
K02oddjobd K61nfs-rdma K89netconsole S11auditd S25blk-availability S82abrt-ccpp
K05wdaemon K69rpcsvcgssd K89rdisc S11portreserve S25cups S82abrtd
K10psacct K73winbind K92pppoe-server S12rsyslog S25netfs S90crond
K10saslauthd K74ntpd K95firstboot S13cpuspeed S26acpid S95atd
K15htcacheclean K75ntpdate K95rdma S13irqbalance S26haldaemon S99certmonger
K15httpd K75quota_nld K99rngd S13rpcbind S26udev-post S99local
K30spice-vdagentd K76ypbind S01sysstat S15mdmonitor S27pcscd
K36mysqld K84NetworkManager S02lvm2-monitor S22messagebus S28autofs
K50dnsmasq K84wpa_supplicant S08ip6tables S24nfslock S50bluetooth
K50kdump K87restorecond S08iptables S24openct S55sshd
例如/etc/rc.d/rc3.d目錄下有很多K或者S開頭的文件,這些文件會被一一執(zhí)行拴魄。其中K表示殺死對應(yīng)服務(wù)冗茸,S表示啟動對應(yīng)復位。后面的數(shù)字字符串表示執(zhí)行順序匹中。先執(zhí)行K夏漱,后執(zhí)行S。