Centos 5/6啓動過程略解

CentOS(RHEL)系列操做系統的啓動流程:Intel X86兼容架構
  c#

系統初始化流程(內核級別)
POST --> BootSequence(BIOS) --> BootLoader(MBR) --> kernel(內核核心文件只能放置在基本分區上) [--> ramdisk] --> rootfs(read-only) --> /sbin/init安全

 

 1.POST:Power-On Self Test,加電自檢;
  ROM:Read-Only Memory,只讀存儲器;
   CMOS:BIOS,Basic Input and Output System,基本輸入輸出系統;網絡

 

 2.BootSequence:啓動順序
  做用:決定到何種硬件設備上加載操做系統;
  方式:按照指定的次序查找各個引導設備,第一個被找出有引導程序的設備即爲本次啓動要用到的設備;架構

   BootLoader:引導加載器,程序;
    MBR:
     Master(Main) Boot Record:
      0磁道0扇區:
       446Byte: bootloader
       64Byte:FAT,File Allocation Table;
       2Byte:magic-number,55AA,表示MBR有效;
    GPT:框架

   Windows:NTLDR
   Linux:
    LILO:LInux LOader,有缺陷:不能支持大硬盤;不超過1024柱面;
    GRUB:GRand Uniform Bootloader,全球統一引導加載器;
     CentOS 6-:
      GRUB 0.x:grub legacyide

     CentOS 7:
      GRUB 1.x:grub2spa

    grub提供的功能:
     1.爲用戶提供一個菜單,菜單中列舉的是各個能夠啓動的操做系統內核;
     2.能夠將用戶選定的內核核心文件裝載到RAM中,解壓縮並展開,將系統控制權移交給內核;
     3.交互式的命令行接口;
     4.菜單及內核啓動的安全保障;操作系統

 3.內核:
  自身初始化:
   1) 探測可以識別到的全部的硬件設備;
   2) 加載硬件的驅動程序,有可能會藉助於ramdisk加載驅動;
   3) 以只讀的方式掛載根文件系統;
   4) 運行用戶空間的第一個應用程序: /sbin/init命令行

 4.Init:
  Init程序的類型:
   CentOS 5:SysV Init
    配置文件:/etc/inittabrest

   CentOS 6:Upstart Init
    配置文件:/etc/inittab 幾乎被廢棄;
     /etc/init/*.conf

   CentOS 7:Systemd
    配置文件:/usr/lib/systemd/system/*
         /etc/systemd/system/*


----------------------------------------------------------------------------------------------------------
 

在系統初始化流程CentOS 5的SysV Init的工做過程:

 CentOS 5 SysV Init:
  運行級別(run level):爲了系統的運行或維護等目的而設置的管理機制;
   0-6 : 七個運行級別;
    # 0 - 關機,halt,shutdown
    # 1 - 單用戶模式(Single user mode),root,無需驗證;維護模式;
    # 2 - 多用戶模式(Multiuser),會啓動網絡功能;但不會啓動NFS,維護模式;
    # 3 - 多用戶模式(Full multiuser mode),徹底的功能模式,僅使用CLI,不激活GUI;
    # 4 - 預留級別,目前無特別使用的目的;可是習慣上認爲與3運行級別相同;
    # 5 - 多用戶模式(Full multiuser mode),徹底的功能模式,默認激活GUI和CLI
    # 6 - 重啓,reboot

   一般會使用3,5運行級別做爲這次系統啓動的默認運行級別;
  查看當前系統的運行級別:
   who -r
   runlevel

  切換運行級別:
   init [0-6]

----------------------------------------------------------------------------------------------------------

  

Init的配置文件:/etc/inittab,此配置文件有以下功能:
   1.在整個系統初始化的過程當中要作哪些任務;
    啓動或關閉哪些後臺服務;
    如何進行系統初始化;
    在驗證用戶的身份無誤以後,如何爲用戶提供登陸提示符,還要區分是圖形界面仍是文件界面;
    當備用電源失效或從新生效時,如何指揮系統操做;
    定義了按下"Ctrl + Alt + Delete"組合鍵時,系統將採起什麼行爲;

   2.全部規定的任務如何執行;
    每一行定義一種操做,格式以下:
     id:runlevels:action:process

     id:一種操做的惟一標識符;
      l#, id, pf, pr, #, x,
     runlevel:指定任務執行所依賴的運行級別;
      ####, #, 留空
     action:在何種條件下啓動此任務;
      wait:等待切換至此任務所在的運行級別時,運行一次;
      respawn:一旦此任務結束,就自動從新啓動此任務;
      initdefault:用於設定默認的運行級別,一般後面的process省略
      sysinit:設置系統初始化的方式,通常狀況下此處運行/etc/rc.d/rc.sysinit腳本;
      powerfail:
      powerokwait:
      ctrlaltdel:

       /etc/rc.d/rc.sysinit:
        1.設置主機名稱;
        2.設置啓動的歡迎信息;
        3.激活udev和SELinux
        4.掛載/etc/fstab文件中定義的全部有效文件系統;
        5.激活各個swap設備;
        6.檢測rootfs,而且以讀寫的方式從新掛載rootfs;
        7.設置系統時間;
        8.根據/etc/sysctl.conf文件設置內核參數;
        9.激活lvm和軟RAID等高級邏輯設備;
        10.加載額外的設備的驅動程序;
        11.完成清理工做;

       /etc/rc.d/rc:
        根據特定的運行級別,啓動或關閉/etc/rc.d/rc$runlevel.d/*
         K*:要中止的服務;K字母后面的兩位數字表示優先級;數字越小優先級越高;依賴其餘服務的服務應該優先關閉,被其餘服務依賴的服務應該稍後關閉;

         S*:要啓動的服務;S字母后面的兩位數字表示優先級;數字越小優先級越高;被其餘服務依賴的服務應該優先啓動,依賴其餘服務的服務應該稍後啓動;

         rc腳本能夠接受一個運行級別做爲其參數運行內容的;

         腳本框架:
          for i in /etc/rc.d/rc#.d/K* ; do
           $i stop
          done

          for i in /etc/rc.d/rc#.d/S* ; do
           $i start
          done

         全部由rc腳本關閉或啓動的連接文件的源文件都存在於/etc/rc.d/init.d,系統爲了方便使用,爲此目錄建立了連接/etc/init.d

         全部/etc/init.d(/etc/rc.d/init.d)目錄中的腳本執行方式:
          # /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
          # service SRV_SCRIPT {start|stop|restart|status}

          chkconfig命令:
           chkconfig - updates and queries runlevel information for system services
           查看系統服務相關運行級別下的運行狀態:
            chkconfig --list [name]

           管理系統服務在/etc/rc.d/rc#.d/目錄下的服務腳本的連接:
            chkconfig --add name
            chkconfig --del name
            爲了可以讓chkconfig命令管理系統服務的腳本的連接,每一個腳本中都必須有這樣的格式:
             # chkconfig: 2345 90 60
              2345:在哪一個運行級別下,此服務是自動啓動狀;也就是說,在對應的運行級別的rc#.d目錄中,是以S開頭的文件;若是改位置爲"-",則表示全部運行級別都爲K開頭的;
              90:若是在某個運行級別下爲開啓狀態,該數字爲S後面的優先級數字;
              60:若是在某個運行級別下爲中止狀態,該數字爲K後面的優先級數字;
             # description: 對於此係統服務的摘要性描述信息;
           單獨設置指定運行級別下系統服務的自動啓動或關閉的狀態;
            chkconfig [--level levels] name <on|off|reset>

         /etc/rc.d/rc.local腳本:
          是init程序在引導用戶空間進程啓動的過程當中,所執行的最後一個腳本;所以,不便於或不須要寫在系統服務相關的腳本中的內容但又指望能夠開機即運行的功能,能夠直接寫在此腳本中;

        # Run gettys in standard runlevels
        1:2345:respawn:/sbin/mingetty tty1
        2:2345:respawn:/sbin/mingetty tty2
        3:2345:respawn:/sbin/mingetty tty3
        4:2345:respawn:/sbin/mingetty tty4
        5:2345:respawn:/sbin/mingetty tty5
        6:2345:respawn:/sbin/mingetty tty6

        mingetty會調用login程序,打開虛擬終端;出了mingetty以外,諸如getty之類的程序也能夠生成虛擬終端控制檯;

        若是默認的運行級別時5,則咱們須要/etc/X11/prefdm腳本打開圖形界面終端;


----------------------------------------------------------------------------------------------------------
  

用戶空間的啓動流程,/sbin/init

  /sbin/init --> /etc/inittab --> 設置默認運行級別 --> /etc/rc.d/rc.sysinit腳本,完成系統初始化 --> 關閉那些對應運行級別下須要中止的服務,啓動那些對應運行級別下須要開啓的服務 --> Ctrl+Alt+Del熱鍵功能 -->UPS電源的失效與恢復以後的操做 --> 生成終端[啓動圖形界面


----------------------------------------------------------------------------------------------------------


CentOS 6:
 Init程序:upstart,其應用程序依然是/sbin/init,其配置文件:
  /etc/inittab:僅僅只是用於定義默認運行級別;
  /etc/init/*.conf:
   rcS.conf:執行系統初始化腳本的任務;
   rc.conf:執行根據運行級別關閉或開啓系統服務的任務;
   start-ttys.conf:執行打開終端相關的任務;
   prefdm.conf:執行大小圖形界面的任務;

  upstart機制:基於事件驅動的程序管理模型;Driven-envet


CentOS 6 系統啓動流程: POST --> BootSequence(BIOS) --> Bootloader --> kernel [-->ramfs] -->rootfs(ro) --> /sbin/init --> 設定默認運行級別 --> 系統初始化 --> 能夠並行執行ctrl+alt+del熱鍵功能定義,系統服務的開啓和關閉,電源管理,dbus管理等 --> 登陸提示符

相關文章
相關標籤/搜索