CentOS6系統啟動流程分析

Linux系統組成

       從動態視角看:由內核+根文件系統組成

       從靜態視角看:由磁盤分區及相關文件組成

內核設計流派

       單內核:所有內核功能集中于同一程序;

       微內核:每種功能使用一個單獨的子系統實現;內核中某一模塊或功能的破壞不會影響其他功能的正常運行。

linux內核特點

       支持模塊化:模塊文件.ko結尾(kernel object)

       支持模塊運行時動態裝載或卸載:

linux內核組成部分

    核心文件:/boot/vmlinuz-Version-release

    模塊文件:/lib/modules/Version-Release

內核啟動之后,讀取rootfs文件系統生成的init程序,由init管理系統。之后內核退居幕后,只負責特權級操作。

ramdisk:把內存中的某段空間當作磁盤來使用。"偽根文件系統"

       CentOS5:/boot/initrd-Version-release.img

       CentOS6、7:/boot/initramfs-Version-release.img

CentOS啟動流程:

CentOS6系統啟動流程分析

一、內核空間

1、POST加電自檢:對各硬件進行檢測,確保計算機能正常運行

     CPU訪問ROM加載自檢程序

2、BOOT Sequence:選擇啟動次序,加載Boot Loader。

     按次序查找各引導設備,第一個有引導程序的設備即為本次啟動要用到的設備。

3、Boot Loader: 加載Grub。

       由于存放Bootloader的磁盤空間大小僅為446字節,而grub的大小明顯超出446字節,因此,將grub分為三個階段。Bootloader僅存放grub的第一階段,用于引導。

GRUB功能:提供菜單,運行用戶選擇要啟動的系統或不同版本,把用戶選定的內核裝載到RAM中,解壓、展開,而后把系統的控制權移交給內核。

 GRUB三階段:

        stage1:BootLoader(位于MBR)。

        stage1.5:存放文件系統驅動信息,位于MBR之后,用于引導stage1找到stage2,從而能夠訪問stage2所在的分區。

        stage2:位于/boot/grub目錄下。

                     stage2的功用:

                     1)提供菜單、并提供交互式節后

                            摁e:進入編輯模式,用于編輯菜單

                            摁c:進入命令模式,交互式接口

                     2)加載用戶選擇的內核或操作系統

                            運行傳遞參數給內核

                            可隱藏菜單

                     3)位菜單提供保護機制

                            為編輯菜單進行認證

                            為啟用內核或操作系統進行認證

GRUB分類:

       Windows:ntloader

       Linux:

              LILO:Linux Loader。缺陷:不能加載1024之后的柱面,因此被grub取代。

             GRUB:GRand Uniform Bootloader

                  CentOS5、6 :Grub 0.x 版本,也稱之為grub legacy

                  CentOS7:Grub 1.x版本,也稱之為Grub2

GRUB存放于/boot中,配置文件為/boot/grub/grub.conf,在/etc/目錄下有一名為grub.conf的連接文件。

4、kernel階段

       1)自身初始化

       2)探測可識別到的所有硬件設備

       3)加載硬件驅動程序(可能借助ramdisk來加載)

       4)以只讀方式掛載根文件系統

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

              init程序的類型:

               CentOS5及之前:SysV

配置文件:/etc/inittab

               CentOS6:upstart

配置文件:/etc/inittab(為了兼容以前的版本),/etc/init/*.conf

               CentOS7:Systemd

配置文件:/usr/lib/systemd/system;/etc/systemd/system

二、用戶空間

5、/etc/inittab配置文件:

 每行定義一種action以及與之相對應的process,配置釋義:

       id:runlevels:action:process

              id:一個任務的標識符

      runleves:在哪些級別啟動此任務,#,###;也可以為空,表示所有級別

                    action:在什么條件下啟動此任務

      process:任務

             action

                   wait:等待切換至此任務所在的級別時執行一次。

      respawn:一旦此任務終止,就自動重啟之。

      initdefault:設置默認允許級別,此時,process省略掉

       id:3:initdefault                                #設置默認級別

       si:sysinit:/etc/rc.d/rc.sysinit           #設定系統初始化方式,此處一般為指定的/etc/rc.d/rc.sysinit腳本

       tty1:2345:respawn:/usr/bin/mingetty tty1

       tty2:2345:respawn:/usr/bin/mingetty tty2

       ….

       tty6:2345:respawn:/usr/bin/mingetty tty6

              在運行級別為2345時,會默認開啟6個虛擬終端

              1)mingetty會調用login程序

              2)getty等程序也能打開虛擬終端。

       tty7:5:respawn:/etc/x11/  啟動圖形界面

       l0:0:wait:/etc/rc.d/rc 0     

              rc腳本:接受一個運行級別數字為參數。當系統啟動時讀取到默認運行級別、或運行級別發生變化時,/etc/rc.d/rc腳本將傳遞運行級別為參數,在/etc/rc.d/rc$runlevel.d/目錄下進行操作:其將先kill掉以K開頭的服務或腳本,然后啟動運行以S開頭的服務或腳本。這些腳本為/etc/rc.d/init.d/或/etc/init.d目錄下某腳本的連接文件(Symbolinc)

              例:l3:3:wait:/etc/rc.d/rc 3   意味著去啟動或關閉/etc/rc.d/rc3.d/目錄下的腳本所控制范圍。

                     K##*:要停止的服務;##表示優先級,數字越小,越優先關閉;依賴的服務先關閉,而后關閉被依賴。服務a的運行建立在服務b運行的基礎上,那么要關掉服務b,得先關掉服務a;意味著服務a的關閉優先級要高于服務b(即a的關閉優先級數字小b的)

                     S##*:要啟動的服務;##表示優先級,數字越小,越優先啟動;被依賴的服務先啟動,而依賴的服務后啟動。仍以服務a的運行建立在服務b的基礎上為例,要運行服務a,則服務b得先啟動,意味著服務b的啟動優先級要高級服務a(即b的啟動優先級數字小于a的)

       rc腳本框架:

              for srv in /etc/rc.d/rc#.d/K*;do

                     $srv stop

              done

 

              for srv in /etc/rc.d/rc#.d/S*;do

                     $srv start

              done

       /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命令:管控/etc/init.d/下的每個腳本在各運行級別下的啟動或關閉狀態。

設置某服務在某個或某幾個運行級別下是自動啟動還是關閉。

       將服務增加為自啟動服務的過程

              1)創建建自定義服務腳本

              2)初始化自定義服務:chkconfig –add srv_script

              3)設置啟動|關閉級別:chkconfig  –level ### srv_script on|off,如果chkconfig設置時不指定運行級別,默認采用腳本中設置的運行級別。

              4)啟動或關閉服務:chkconfig srv_script on|off

              5)查看服務運行信息:chkconfig –list srv_script

              注:能被管控的服務腳本必須具備以下的特性。

CentOS6系統啟動流程分析

   

#!/bin/bash
#
# chkconfig: runlevel start_nn stop_nn 設置運行級別、服務啟動優先級、范圍關閉優先級。
#自定義的腳本服務,若不被其他服務依賴,則其啟動應該盡量延后,等待系統其他服務啟動,關閉時優先關閉
#            
# description: some comments        腳本注釋

       注:如果將運行級別設置為‘-’,則在初始化時在所有級別都將關閉。

附:testsrv腳本內容

#!/bin/bash
#
# testsrv               start|stop service testsrv
#
#     chkconfig: 2345 90 20
#     description: for test chkconfig how to work
 
prog=`basename $0`
if [ $# -lt 1 ];then
       echo "Usage:$prog {sart|stop|restart|status}"
       exit 1
fi
 
case $1 in
       start)
       echo "startting $prog"
       ;;
       stop)
       echo "stopped $prog"
       ;;
       restart)
       echo "restart $prog finished"
       ;;
       status)
              if pidof $prog &> /dev/null;then
                     echo "$prog is running"
              else
                     echo "$prog was stopped"
              fi
       ;;
       *)
       echo "Usage:$prog {sart|stop|restart|status}"
       exit 2
       ;;
esac

注:正常級別下,最后啟動的一個服務S99local服務鏈接至/etc/rc.d/rc.local(/etc/rc.local)文件。不便寫成腳本的指令可以寫入到/etc/rc.d/rc.local文件中。

6、系統初始化腳本文件:/etc/rc.d/rc.sysinit

       (1)設置主機名

       (2)設置歡迎信息

       (3)激活udev設備和selinux

       (4)掛載/etc/fstab文件中定義的所有文件系統(包含swap設備)

       (5)檢測根文件系統,并以讀寫方式重新掛載根文件系統。

       (6)設置系統時鐘

       (7)根據/etc/sysctl.conf文件的設定,來設置內核參數 

       (8)激活LVM及軟raid設備

       (9)激活swap設備

       (10)加載額外設備的驅動程序;

       (11)清理操作

 

總結:

      POST—> Boot SequenceBIOS—>Boot loaderMBR—>kernel—>rootfs—>/sbin/init —>設置默認運行級別運行系統初始化腳本,完成系統初始化—>關閉對應級別下需要停止的服務;啟動對應級別下需要開啟的服務—>設置登錄終端[—>啟動圖形終端(由登錄終端決定)]

 

補充:

Centos6上的運行級別:

       0:斷電關機(halt)

       1:單用戶模式(Single user),無需認證即可登陸root用戶

       2:多用戶模式(Multiuser),但不提供NFS服務

       3:多用戶模式,完全功能模式,文本界面

       4:預留級別(Full multiuser),未定義;目前若使用4級別登錄,同3級別

       5:多用戶模式(X11),圖形界面

       6:重啟系統(reboot)

注意:級別0、6不能設為默認級別,否則系統不能正常啟動。

如何查看當前運行級別:

       1、runlevel

       2、who -r

       3、Centos7:systemctl get-default

如何切換當前運行級別:

       init N:N為級別數字

注:CentOS7不再有運行級別概念,在此不做討論

原創文章,作者:M20-1鐘明波,如若轉載,請注明出處:http://www.www58058.com/44776

(0)
M20-1鐘明波M20-1鐘明波
上一篇 2016-09-09 08:28
下一篇 2016-09-09 10:19

相關推薦

  • 打造自己小小的RPM包

    關于源碼RPM包的安裝于制作 什么是RPM與SRPM? 1     RPM: 1     SRPM: 2     SRPM的安裝 2 一 .利用rpmbuild默認安裝SRPM檔案 2 二.配置路徑與需要的軟件功能模塊 3  &n…

    Linux干貨 2016-08-24
  • 馬哥教育網絡班21期-第1周課程練習

    1、  描述計算機的組成及其功能。 計算機由硬件系統和軟件系統兩部分組成。硬件系統由運算器,控制器,存儲器,輸入設備和輸出設備組成.     運算器:計算機中進行算術運算和邏輯運算的部件。     控制器:計算機的控制中心。協調和指揮計算機系統的操作。  &n…

    Linux干貨 2016-07-12
  • shell四劍客之sed

    概述 Stream EDitor, 行編輯器 sed是一種流編輯器,它一次處理一行內容。處理時,把 當前處理的行存儲在臨時緩沖區中,稱為“模式空間”( pattern space),接著用sed命令處理緩沖區中的內容 ,處理完成后,把緩沖區的內容送往屏幕。接著處理下一 行,這樣不斷重復,直到文件末尾。文件內容并沒有改變 ,除非你使用重定向存儲輸出。Sed主要…

    Linux干貨 2016-08-15
  • 0805 作業

     201608051、當天課程內容筆記2、當天練習3、預習4、取本機ip地址 5、取各分區利用率的數值 6、統計/etc/init.d/functions 文件中每個單詞出現的次數,并按頻率從高到低顯示 7、/etc/rc.d/init.d/functions或/etc/rc.d/init.d/functions/"  取目錄名…

    Linux干貨 2016-08-07
  • 文件系統結構

    -文件系統結構
    -應用程序的組成部分
    -文件類型

    2018-03-13
  • 第8天:腳本基礎,btrf,raid,

    http://note.youdao.com/yws/public/redirect/share?id=61b38adef24ced4dc646a5ef8e68df18&type=false

    Linux干貨 2016-08-16
欧美性久久久久