CentOS系統啓動流程


 

一、CentOS系統啓動流程圖解(本文主要以CentOS 6.7和7.1爲例講解)


wKioL1b594yTE2MfAAUJLt7GbD4934.jpg

 

      POST-->BootSequence(BIOS)-->Bootloader(MBR)-->Kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()

  說明:上圖是Linux系統啓動時的詳細流程,其中黑色部分爲主流程分支,藍色部分爲詳細流程分支,綠色部分是註釋部分


 二、啓動詳解

 1、POST:加電自檢

    POST(PowerOnSelfTest)首先對每一個設備進行檢查。完成後會尋找存有引導記錄的設備,找到後讀入操作系統引導記錄,然後將系統控制權交給引導記錄,並由引導記錄來完成系統的順利啓動。


   BOOT Sequence: 按次序查找各引導設備,第一個有引導程序的設備即爲本次啓動要用的設備

,一般電腦是按"F2"或"Del"鍵等等進入BIOS,在裏面我們可以調整硬盤的啓動順序。

 

   wKiom1b6FrfA-MLvAAAvW1lXO4k953.png



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

  wKiom1b6G-eRQiR9AAAX5HH9nL4727.png


2、執行初始化系統腳本 /etc/rc.d/rc.sysinit 來初始化腳本

這個大家有機會可以讀讀,腳本主要的作用如下:

wKioL1b6HMfReP5bAABFKKqOKCA616.png


3、然後執行 /etc/rc.d/rc 腳本

此腳本運行的時候此腳本的時候,會讀取/etc/rc.d/rc3.d/下的所有腳本,來控制系統啓動的時候啓動或者關閉那些服務


wKiom1PSA-mDbCDSAAZ9kiqbBP4645.jpg

wKiom1b6HTCzbgjlAAAVZpOpADc483.png


這些腳本是否開機自啓動,可由 chkconfig 命令來管理。


wKiom1b6HWmyUDj6AAAaW1Xd4Gg426.png

4、執行/etc/rc.d/rc.local腳本,此腳本是啓動過程中最後啓動的一個腳本。

最後會執行 /bin/login 登錄用戶。至此係統啓動過程完成。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章