centos系列的啓動流程及基礎知識點

下面介紹的是基於Intel x86架構的CentOS系列操作系統的啓動流程。


1、Linux系統基礎簡介

(1)、Linux【系統組成】:內核+應用程序 或 內核+rootfs

(2)、Linux的【運行環境】:內核空間 --------內核進程佔用CPU和內存資源總和

                            用戶空間 --------應用程序佔用CPU和內存資源總和

(3)、【內核】主要具有6個【功能】:進程管理、文件系統管理、內存管理、網絡協議管理、驅動管理、內存功能。

  對於內核,有兩種設計:單內核、微內核。單內核,是所有功能聚集於一個程序,表現爲一個進程。微內核,是所有功能都有單獨的子系統。對於Linux系統,採用的是單內核、模塊化設計。


(4)、Linux內核的三部分:內核核心文件、內核對象文件、ramdisk

 Linux的【核心文件】 ----------/boot/vmlinuz

 內核【模塊文件】 --------/lib/moduls/2.6.32-573.el6.x86_64/kernel

 ramdisk ------------/boot/initramfs-2.6.32-573.el6.x86_64.img  (其以.img結尾)

   centos5的ramdisk 爲 /boot/initrd -----------用mkinitrd 工具生成

   centos6/7的ramdisk 爲 /boot/initramfs -------用dacut 工具生成(限於7使用),但也兼容mkinitrd

 ramdisk 是雙緩衝和雙緩存。


2、CentOS6 操作系統啓動流程

(1)、POST加電自檢

    加電自檢中,運用ROM中的BIOS程序。主板上ROM中存儲的BIOS程序,被主板芯片映射入內存,從而協助CPU完成。

(2)、Bootsequence啓動程序

    據BIOS找啓動程序,找第一個引導程序。根據BIOS的啓動順序,一次訪問各個存儲設備,檢查其MBR中是否有引導程序,如果有則將引導程序加載至內存,並且將硬件的管理權移交給引導程序。

(3)、引導加載器BootLoader

    一般使用MBR中的grub,應用grub加載文件系統,grub能提供一個用戶菜單,命令行接×××互操作。-----------應用grub legacy。

    引導程序grub,開始加載stage1.5,以驅動根文件系統,然後從根設備加載stage2至內存,stage2的代碼將會從同一磁盤分區加載kernel至內存,同時將硬件的管理權移交給kernel

(4)、加載內核kernel ----------------內核核心文件放在【基本分區】上

    對內核進行初始化,加載硬件的驅動程序。

    kernel試圖掛載根文件系統,如果其內部有直接編譯成內核的文件系統驅動程序,則無需其他輔助直接以只讀方式掛載根文件系統即可,否則,必須依賴於ramdisk提供的臨時根文件系統作爲過渡,待根文件系統驅動成功以後,完成切換的工作,以只讀方式掛載真正的文件系統。

(5)、加載根文件系統rootfs -----以只讀的方式掛載根文件系統。

    如果沒有驅動,藉助於ramdisk加載驅動。

(6)、運行用戶空間的第一個應用程序: /sbin/init。

  CentOS 6的Init程序爲:upstart(基於事務驅動)。

  配置文件:/etc/inittab ----------僅定義默認運行級別

            /etc/init/*.conf --------rcS.conf(系統初始化腳本); rc.conf(運行級別關閉或開啓系統服務的任務); start-ttys.conf(終端相關的任務); prefdm.conf(圖形界面的任務)。

(7)、設定默認運行級別 ----------/etc/inittab

(8)、系統初始化 ------------/etc/init/*.conf

(9)、並行執行任務:定義ctrl+alt+del熱鍵功能;關閉對應級別下應停止的服務,開啓對應級別下應開啓的服務;電源管理;dbus管理等。根據運行級別,選擇打開的終端數量及位置。

(10)、登錄提示符

  使用mingetty命令來調用login命令,來爲用戶打印登錄提示符。



3、CentOS5基礎

(1)、CentOS基礎

  CentOS5的7個運行級別爲0-6,0爲關機、6爲重啓、1爲單用戶模式、2-5爲多用戶模式,3爲多用戶的命令行界面,5爲多用戶的圖形化界面。

  

  查看運行級別:# who -r 或 # runlevel

  切換運行級別:# init 0-6


  CentOS5的第一個引用程序爲Init,其配置文件爲/etc/inittab。配置文件指明系統初始化的任務

  執行【規定的任務】,格式爲:id:runlevels:action:process。 action表示啓動此任務,通常爲sysinit,一般是運行/etc/rc.d/rc.sysinit腳本。所有由rc腳本關閉或啓動的鏈接文件的源文件都在/etc/rc.d/init.d,該目錄創建了鏈接/etc/init.d。

  在init引導啓動用戶空間進程時,不需要寫在系統服務中的內容,寫在/etc/rc.d/rc.local腳本中。


(2)、chkconfig命令

  chkconfig命令 ------------查看和管理系統服務的運行狀態。

    # chkconfig --list [name]

    # chkconfig --add name

    # chkconfig --del name

  修改/etc/rc.d/rc#.d/,管理系統服務。例如:# chkconfig: 2345 90 60 (其中,2345爲運行級別,90爲開啓的優先級,60爲關閉的優先級。)

  單獨制定系統服務開啓或關閉:# chkconfig [--level levels] name <on|off|reset>

  在init引導啓動用戶空間進程時,不需要寫在系統服務中的內容,寫在/etc/rc.d/rc.local腳本中。


(3)CentOS5操作系統的啓動流程

    1)、POST加電自檢

      加電自檢中,運用ROM中的BIOS程序。主板上ROM中存儲的BIOS程序,被主板芯片映射入內存,從而協助CPU完成。

    2)、Bootsequence啓動程序

      據BIOS找啓動程序,找第一個引導程序。根據BIOS的啓動順序,一次訪問各個存儲設備,檢查其MBR中是否有引導程序,如果有則將引導程序加載至內存,並且將硬件的管理權移交給引導程序。

    3)、引導加載器BootLoader

      一般使用MBR中的grub,應用grub加載文件系統,grub能提供一個用戶菜單,命令行接×××互操作。-----------應用grub legacy。

      引導程序grub,開始加載stage1.5,以驅動根文件系統,然後從根設備加載stage2至內存,stage2的代碼將會從同一磁盤分區加載kernel至內存,同時將硬件的管理權移交給kernel

    4)、加載內核kernel ----------------內核核心文件放在【基本分區】上

      對內核進行初始化,加載硬件的驅動程序。

      kernel試圖掛載根文件系統,如果其內部有直接編譯成內核的文件系統驅動程序,則無需其他輔助直接以只讀方式掛載根文件系統即可,否則,必須依賴於ramdisk提供的臨時根文件系統作爲過渡,待根文件系統驅動成功以後,完成切換的工作,以只讀方式掛載真正的文件系統。

    5)、加載根文件系統rootfs -----以只讀的方式掛載根文件系統。

      如果沒有驅動,藉助於ramdisk加載驅動。

    6)、運行用戶空間的第一個應用程序: /sbin/init。

      kernel試圖啓動第一個進程:/sbin/init,而後kernel轉入後臺,將用戶空間的進程管理任務交給init進程來完成

      配置文件:/etc/inittab  /etc/init/*.conf  /etc/rc.d/rc.sysinit  /etc/rc.d/rc

    7)、執行/sbin/init 和 /etc/inittab文件

    8)、設置默認的運行級別

    9)、執行/etc/rc.d/rc.sysinit腳本,完成系統初始化

    10)、執行/etc/rc.d/rc腳本,關閉對應級別下應停止的服務,開啓對應級別下應開啓的服務

    11)、設置熱鍵,如:Ctrl+Alt+Del熱鍵功能

    12)、UPS電源的失效與恢復

    13)、生成終端,默認啓動圖形界面。


4、Bootloader

 grub通用統一加載器有兩種,即grub legacy和grub2。

 grub legacy分爲三個階段,分別是第一階段、第二階段和中間的1.5階段。中間階段的作用是,讓第一階段的引導程序識別第二階段分區的文件系統。stage2提供了很多功能,其中最重要的是加載操作系統的內核核心文件,還可以提供菜單和交互接口、允許用戶編輯菜單、命令行操作模式、具身份驗證機制。

 

 grub命令行常用的6個命令如下:

  1)、help:獲得grub命令的名稱列表

  2)、help GRUB_CMD:特定命令的詳細幫助信息

  3)、root (hd#,#):指定grub程序的根設備(磁盤的指定分區)。hd# 爲磁盤編號,# 爲分區編號,# 一般是從0開始的數字,如0表示第一個分區,如 (hd0,0),表示當前計算機上的第一塊磁盤的第一個分區。

  4)、find (hd#,#):指定分區中搜索文件,顯示出文件所在的位置

  5)、kernel /PATH/TO/KERNEL_CORE_FILE:本次啓動的內核文件的絕對路徑。額外內核參數:ro root=/dev/sda3 selinux=0 init=/sbin/init quiet rhgb {1|s|S|single}

  6)、initrd /PATH/TO/initramfs-VERSION-release.img:內核所對應的ramdisk(ramfs)文件


 grub的配置文件爲 /boot/grub/grub.conf 和 /etc/grub.conf(鏈接)。配置文件裏的內容如下:

   default=0 ------默認啓動菜單項,title是從0開始編號

   timeout=5 ------倒計時

   splashp_w_picpath=(hd0,0)/grub/splash.xpm.gz -----圖片背景

   hiddenmenu ------------(是否)隱藏grub的啓動菜單

   password --md5 CRYPTED_PASSWORD ------------菜單的保護密碼

   title CentOS 6 (2.6.32-573.el6.x86_64) ------菜單標題,可多個title

     root (hd0,0)

     kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=UUID=5ebb0e76-bb19-4a80-9c70-0d101c0778e1 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_NO_DM rhgb quiet

     initrd /initramfs-2.6.32-573.el6.x86_64.img

     password --md5 CRYPTED_PASSWORD


5、CentSO7 操作系統啓動流程

(1)、POST加電自檢

    加電自檢中,運用ROM中的BIOS程序。主板上ROM中存儲的BIOS程序,被主板芯片映射入內存,從而協助CPU完成。

(2)、Bootsequence啓動程序

    據BIOS找啓動程序,找第一個引導程序。根據BIOS的啓動順序,一次訪問各個存儲設備,檢查其MBR中是否有引導程序,如果有則將引導程序加載至內存,並且將硬件的管理權移交給引導程序。

(3)、引導加載器BootLoader

  一般使用MBR中的grub2,應用grub2加載文件系統,grub2能提供一個用戶菜單,命令行接×××互操作。

(4)、裝載引導程序的配置文件:/etc/grub.d /etc/default/grub /boot/grub2/grub.cfg

(5)、加載initramfs驅動模塊

(6)、加載內核kernel ----------------內核核心文件放在【基本分區】上

  對內核進行初始化,加載硬件的驅動程序。

(7)、內核以只讀方式掛載rootfs,啓動systemd進程。

(8)、執行initrd.*.target所有的unit,包括掛載/etc/fstab所有有效的文件系統

(9)、根切換

(10)、systemd執行默認的target



6、centos7基礎

 centos7的init程序採用systemd風格,systemctl命令,使用兼容以前的版本,所以也可以使用service類的命令。

Systemd具有許多centos6裏面沒有的四個特點:(1)、並行開啓,即在系統引導的時候可以實現服務的並行開啓;(2)、按需激活,即能夠實現按需激活進程,即在系統啓動時,需要隨系統啓動服務,其服務進程並沒有啓動,但是Ststemd爲每一個此類服務進程都註冊了套接字,我們稱這種服務處理方式爲“半激活狀態”。(3)、快照功能,即能夠對當前系統的用戶空間的每個進程進行狀態快照,以後如果進程出現問題或故障,可以迅速恢復進程狀態至過去的某一時候。(4)、服務控制邏輯,systemd內部有一種基於基於依賴關係來定義的服務控制邏輯。

  # systemctl {start|stop|restart|status} name[.service] ----------管理服務

  # systemctl set-default {multi-user.target | graphical.target} ----------設置運行級別

  # systemctl get-default  -----------設置默認運行級別

  # systemctl set-default muti-user.target  ------改回命令行界面


 centos7採用unit文件進行核心管理,由Systemd相關的配置文件進行各種標識、識別、和配置功能的實現。unit文件分爲    系統服務類、socket、目標類、快照類等幾類。這些配置文件主要保存在以下三個文件中:

    /etc/lib/systemd/system/*

    /etc/systemd/system/* ---------符號鏈接

    /run/systemd/system/* ---------非配置關鍵項

 unit常見的8種類型如下:

    Service unit:擴展名爲.service ----------用於定義系統服務,可省

    Target unit:擴展名爲.target ------------init程序的運行級別

    Decvice unit:擴展名爲.device --------內核識別的設備

    Mount unit:擴展名爲.mount ------------systemd管理的文件系統的掛載點

    automount unit:擴展名爲.automount --------------掛載點的位置

    Socket:擴展名爲.socket -------------標識進程間通信的socket文件

    Swap unit:擴展名爲.swap ------------標識swap設備

    Path unit:擴展名爲.path ------------監控指定目錄中的一個文件或一個子目錄,沒有則自動創建。

 target unit模擬6中的運行級別:

    級別0:runlevel0.target,poweroff.target

    級別1:runlevel1.target,rescue.target

    級別2:runlevel2.target,multi-user.target:

    級別3:runlevel3.target,multi-user.target

    級別4:runlevel4.target,multi-user.target

 systemd的四種實現方式如下:

    (1)、基於socket unit的方式實現進程激活機制

    (2)、基於device unit的方式實現設備的自動識別,掛載

    (3)、基於bus的激活機制

    (4)、基於path的激活機制

 

 如果自行編寫unit file,可以直接將文件放置於/etc/systemd/syetem目錄中,也可以將其放在/usr/lib/systemd/system/目錄中。unit file通常分爲三段,分別爲 [Unit]、[Service]、[Install],各部分解釋如下:

    (1)、[Unit]:定義域Unit類型無關的通用選項。

    常用的選項語句:

      Description ------相關服務描述

      After -------服務啓動前依賴的內容

      before ------------依賴此服務啓動的服務

      Wants --------指明依賴關係

      Requires -----------指明依賴關係

      Conflict -----------各unit之間可能存在的衝突

      Documentation ---------------管理命令的文檔所在位置

    (2)、[Service]:定義與系統服務相關的專用的選項語句。

    常用的選項語句:

      Type ----------定義影響ExecStart及相關參數的功能:simple、forking、oneshot、notify

      EnvironmentFile ------------------環境配置文件

      ExecStart ----------啓動此服務所需要運行的命令或腳本

      ExecReload -------------指明重載配置文件所需要運行的命令或腳本

      ExecStop --------------指明停止此服務所需要運行的命令或腳本

      ExecStartPre -----------指明啓動ExecStart所指明的命令【之前】所需要運行的命令或腳本

      ExecStartPost -----------指明啓動ExecStart所指明的命令【之後】所需要運行的命令或腳本

      Restart ------------表示如果服務遇到意外而終止,則會自動重啓該服務

    (3)、[Install]:服務啓動或禁用時用到的專用選項語句

      WantedBy ------弱依賴關係

      RequiredBy ---------強依賴關係 


systemctl命令 ---------------控制系統和服務管理

 以下是centos6和centos7實現相同功能,所使用的不同的命令行,及其區別:

 (1)、啓動:

    centos6:service NAME start 

    centos7:systemctl start NMAE[.service]

 (2)、停止:

    centos6:service NAME stop

    centos7:systemctl stop NMAE[.service]

 (3)、重啓:

    centos6:service NAME restart

    centos7:systemctl restart NMAE[.service]

 (4)、狀態:

    centos6:service NAME status

    centos7:systemctl status NMAE[.service]

 (5)、服務開機自啓:

    centos6:chkconfig --level runlevels NAME on

    centos7:systemctl enable NAME.service

 (6)、禁止服務的開機自啓:

    centos6:chkconfig --level runlevels NAME off

    centos7:systemctl disable NAME.service

 (7)、查看是否開機自啓:

    centos6:chkconfig --list NAME

    centos7:systemctl is-enabled NAME.service

 (8)、條件式重啓:

    centos6:service NAME condrestart

    centos7:systemctl try-restart NAME.service

 (9)、重載或重啓:

    systemctl reload-or-restart NAME.service

 (10)、重載或條件式重啓:

    systemctl reload-or-try-restart NAME.service

 (11)、查看是否激活

    systemctl is-active NAME.service

 (12)、查看所有激活:

    systemctl list-units 

    systemctl list-units --type=NUIT_TYPE:查看指定unit類型的處於活躍狀態的服務

    systemctl list-units --all:顯示所有包括處於活躍狀態和處於非活躍狀態的各服務

 (13)、查看服務的依賴關係:

    systemctl list-dependencies NAME.service

 (14)、禁止開機自啓:

    systemctl mask NAME.service

 (15)、取消禁止的開機自啓:

    systemctl unmask NAME.service、

 (16)、運行級別之間的切換:

    centos6:init # 

    centos7:systemctl isolate NAME.target

 (17)、查看運行級別:

    centos6:runlevel :

    centos7:systemctl list-units --type=target --all

             systemctl get-default

 (18)、修改默認運行級別:

    systemctl set-default NAME.target


  # systemctl halt,systemctl poweroff ------關機

  # systemctl reboot ------重啓

  # systemctl suspend ------掛起

  # systemctl hibernate --------休眠

  # systemctl hybrid-sleep ----------掛起並休眠


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