Linux啟動流程

這里主要分析使用BIOS的MBR分區(qū)的啟動流程
啟動流程概覽:

  • 加載BIOS的硬件信息,進(jìn)行自檢查,獲取第一個(gè)啟動設(shè)備(如:硬盤)
  • 讀取第一個(gè)啟動設(shè)備MBR的boot loader(grub)的啟動信息
  • 加載核心操作系統(tǒng)的核心信息,核心開始解壓縮,并嘗試驅(qū)動所有的硬件設(shè)備。
  • 核心執(zhí)行init程序,并獲取默認(rèn)的運(yùn)行信息(runlevel)
  • init程序執(zhí)行/etc/rc.d/rc.sysinit文件,準(zhǔn)備操作系統(tǒng)環(huán)境(如網(wǎng)絡(luò),時(shí)區(qū)等信息)
  • 啟動核心的外掛模塊
  • init執(zhí)行獲取到的runlevel對應(yīng)的服務(wù)腳本
  • init執(zhí)行/etc/rc.d/rc.local
  • 執(zhí)行/bin/login程序,等待用戶登錄
  • 登錄之后開始以Shell控制主機(jī)

1、BIOS

BIOS是英文"Basic Input Output System"的縮寫,直譯過來后中文名稱就是"基本輸入輸出系統(tǒng)"。
其實(shí),它是一組固化到計(jì)算機(jī)內(nèi)主板上一個(gè)ROM芯片上的程序,它保存著計(jì)算機(jī)最重要的基本輸入輸出的程序、開機(jī)后自檢程序和系統(tǒng)自啟動程序,它可從CMOS中讀寫系統(tǒng)設(shè)置的具體信息。 ——百度百科

POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個(gè)主要部分。負(fù)責(zé)完成對CPU、主板、內(nèi)存、硬盤子系統(tǒng)、顯示子系統(tǒng)、 串并行接口、鍵盤、 CD-ROM光驅(qū)等硬件情況的檢測。

這部分主要是硬件的啟動和檢測,就不細(xì)究了。

最關(guān)鍵的一部分是,BIOS要獲取到第一個(gè)啟動設(shè)備。

2、引導(dǎo)程序和grub

當(dāng)BIOS完成自檢并指定啟動設(shè)備后,就會將對系統(tǒng)的控制權(quán)過渡到引導(dǎo)程序(Boot Loader)。

Linux用的引導(dǎo)程序用的是grub。

grub通常分為兩個(gè)階段,分別是第1階段和第2階段。

  • 1階段
    包含在MBR(第一個(gè)啟動設(shè)備的0扇區(qū))中。由于受MBR的大小限制,第1階段所做的幾乎只是裝載GRUB的下一階段(存放在硬盤的其它位置)。- - - 1.5階段
    包含在MBR后面的30千字節(jié)中,一般使用的文件名是/boot/initrd,它能夠通過Boot Loader加載到內(nèi)存當(dāng)中,然后在內(nèi)存中仿真成一個(gè)虛擬的一個(gè)根目錄。
  • 2階段
    通過1.5階段提供的虛擬文件系統(tǒng),kernel就能夠加載需要的驅(qū)動程序,最終釋放虛擬文件系統(tǒng),并掛載實(shí)際的根目錄文件系統(tǒng)。

3、runlevel

當(dāng)內(nèi)核加載完整后,系統(tǒng)就會執(zhí)行第一個(gè)進(jìn)程init。

init進(jìn)程首先通過/etc/inittab獲取到系統(tǒng)默認(rèn)的runlevel。

  • runlevel等級

    • 0 -halt 關(guān)機(jī)
    • 1 -single user mode 單用戶模式
    • 2 -multi-user,without NFS 沒有NFS的多用戶模式
    • 3 -Full Multi-user mode 多用戶模式
    • 4 -unsed 保留
    • 5 -X11 桌面模式
    • 6 -reboot 重啟
  • /etc/inittab文件在Cenos6后基本上只保留了定義默認(rèn)runlevel這個(gè)功能。其格式如下:

[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è)置默認(rèn)runlevel為5模式
id:5:initdefault:

4、執(zhí)行/etc/rc.d/rc.sysinit

/etc/rc.d/rc.sysinit腳本執(zhí)行一系列的命令,去配置整個(gè)系統(tǒng)環(huán)境:
1、網(wǎng)絡(luò)環(huán)境、主機(jī)名
2、掛載內(nèi)存、usb設(shè)備等等
3、設(shè)置終端字體
...

5、執(zhí)行/etc/rc.d/rc$runlevel.d

根據(jù)之前獲取的runlevel,執(zhí)行對應(yīng)的運(yùn)行級別的服務(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)復(fù)位。后面的數(shù)字字符串表示執(zhí)行順序。先執(zhí)行K,后執(zhí)行S。

6、執(zhí)行/bin/login程序,等待用戶登錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 系統(tǒng)啟動是一項(xiàng)非常復(fù)雜的程序,因?yàn)閮?nèi)核得先檢測硬件并加載適當(dāng)?shù)尿?qū)動程序后,接下來則必須要調(diào)用程序來準(zhǔn)備好系統(tǒng)運(yùn)行的...
    Zhang21閱讀 11,778評論 3 10
  • 一:簡述 Linux-Ceentos系統(tǒng)開機(jī)啟動流程簡述如下,后續(xù)小節(jié)會對重要節(jié)點(diǎn)做詳細(xì)描述 1:加電自檢 --...
    mapipi閱讀 388評論 0 1
  • 經(jīng)過對Linux系統(tǒng)有了一定了解和熟悉后,想對其更深層次的東西做進(jìn)一步探究。這當(dāng)中就包括系統(tǒng)的啟動流程、文件系統(tǒng)的...
    大福技術(shù)閱讀 1,791評論 0 13
  • Linux的啟動流程如下: 1.計(jì)算機(jī)加載BISO,它其中一項(xiàng)很重要的功能是對自身的健康進(jìn)行檢查,只有在硬件沒有問...
    瘋狂的老鳥閱讀 178評論 0 0
  • 我們都知道,由于linux的穩(wěn)定性,通常被作為服務(wù)器系統(tǒng),要想稱為一個(gè)PHP的高手,linux是必修之課。那么li...
    李勁輝閱讀 108評論 0 0