CentOS系統啟動流程——深入了解linux

CentOS系統啟動流程


·Linux系統的組成部分:內核+根文件系統

     內核:進程管理、內存管理、網絡協議棧、文件系統、驅動程序、安全功能

             IPC:Inter Process Communication

                     消息隊列、semerphor、shm

                     socket

·運行中的系統環境可分為2層:內核空間、用戶空間

         用戶空間:應用程序 ( 進程或線程 )

         內核空間:內核代碼 ( 系統調用 )

·內核設計流派:

         ·單內核設計:把所有功能集中于同一個程序

                 Linux

         ·微內核設計:每種功能使用一個單獨的子系統實現 ( 模塊 )

                 Windows,Solaris

        ·Linux內核特點:

                 支持模塊化:.ko(kernel object)

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

                

                 組成部分:

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

                                 vmlinuz –> z表示壓縮的意思

                        

                         ramdisk:

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

                                 CentOS6,7:/boot/initramfs-VERSION-release.img

                        

                         模塊文件:/lib/modules/VERSION-release

CentOS系統的啟動流程:


·POST:加電自檢

         ROM :CMOS

                 BIOS:Basic Input and Output System

        

         ROM+RAM

·Boot Sequence:

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

·bootloader:引導加載器,程序

         ·Windows :ntloader

         ·Linux:

                 LILO:LInux LOader

                 GRUB:Grand Uniform Bootloader

                         GRUB 0.x:Grub Legace

                         GRUB 1.x:Grub2

         ·功能:提供一個菜單,允許用戶選擇要啟動的系統或不同的內核版本,把用戶選定的內核裝載到RAM中的特定空間中,解壓、展開,而后把系統控制權轉交給內核

        

         ·MBR:Master Boot Record

                 512bytes:

                         446bytes:bootloader

                         64bytes:磁盤分區

                         2bytes:55AA(表示此磁盤為主引導盤或系統盤)

         ·GRUB:

                 bootloader:1st stage (在mbr中)

                 Partition:filesystem driver 1.5 stage (mbr之后的扇區)

                 Partition:/boot/grub 2nd stage (在/boot/grub中)

·Kernel:

         ·自身初始化:

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

                 加載硬件驅動程序:( 有可能會借助于randisk加載驅動 )

                 以只讀方式掛載跟文件系統

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

        

         ·init程序的類型

                 CentOS5:SysV init

                         配置文件:/etc/inittab

                

                 CentOS6:Upstart

                         配置文件: /etc/inittab

                         /etc/init/*.conf

                

                 CentOS7:Systemd

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

                         /etc/systemd/systemd

        

         ·ramdisk:

        

                 Linux內核的特性之一:使用緩存和緩存來加速對磁盤文件的訪問

                         ramdisk –> ramfs

                        

                         CentOS5:initrd

                                 工具程序:mkinitrd

                        

                         CentOS6,7:initramfs

                                 工具程序:dracut,mkinitrd

系統初始化流程(內核級別):POST –> Boot Sequence(BIOS) –> BootLoader(MBR) –> Kernel(ramdisk) –> rootfs(readonly) –> /sbin/init

/sbin/init:


CentOS5:SysV init


·運行級別:為了系統的運行或維護等目的而設定的機制

         ·0-6:7個級別

                 0:關機 shutdown

                 1:單用戶模式(single user),只能root用戶登錄,無須認證(可用與忘記root密碼);維護模式

                 2:多用戶模式(multi user),會啟動網絡功能,但不會啟動NFS;維護模式

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

                 4:預留級別;目前無特別使用目的,但習慣以3級別功能使用

                 5:多用戶模式(multi user),完全功能模式,圖像界面

                 6:重啟,reboot

        

         ·默認級別:3 ,5

        

         ·級別切換:# init NUM

        

         ·級別查看:

                 who -r

                 runlevel

·配置文件:/etc/inittab

         ·每行定義一種action以及與之對應的process

                 id:runlevels:action:process

                         ·id:一個任務的標識符

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

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

                         ·process:任務

                        

                         ·action:

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

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

                                 initdefault:設定默認運行級別;此時,process省略

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

         ·例如:

                 id:3:initdefault

                 si::sysinit:/etc/rc.d/rc.sysinit

                

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

                 l1:1:wait:/etc/rc.d/rc 1

                 ……

                 l6:6:wait:/etc/rc.d/rc 6

                         ·意味著去啟動或關閉/etc/rc.d/rc3.d/目錄下的服務腳本所控制服務

                                 K*:要停止的服務;K##*,表示優先級,數字越小,越是優先關閉,依賴的服務先關閉,而后關閉被依賴的服務

                                 s*:要啟動的服務,S##*,表示優先級,數字越小,越優先開啟,被依賴的服務先啟動,而依賴的服務后啟動

                

                         ·rc腳本接收一個運行級別數字為參數

                        

                                 1.腳本框架:

                                         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

                                

                                 2./etc/init.d/*(/etc/rc.d/init.d/*)腳本執行方式:

                                         # /etc/init.d/SRV_SCRIPT {start|stop|restart|status}

                                         # service SRV_SCRIPT {start|stop|restart|status}

                                

                                 3.chkconfig命令:管控/etc/init.d/每個服務在各級別下的啟動或關閉狀態

                                

                                        ·查看:chkconfig –list [name]

                                        

                                        ·添加:chkconfig –add name

                                                 能被添加的服務的腳本定義格式之一:

                                                         #!/bin/bash

                                                         #

                                                         #chkconfig: LLL(默認在那些級別啟動) NN(啟動優先級)  NN(關閉優先級)

                                                         #description:

                                                        #LLLL :表示初始在哪個級別下啟動,- 表示所有級別都不啟動

                                        

                                        ·刪除:chkconfig –del name

                                        ·修改指定的服務運行級別:

                                                 chkconfig [–level LEVELS] name <on|off|reset>

                                                         –level LEVELS:指定要控制的級別;默認為2345

                                                                默認: chkconfig name on

                                                         修改了服務優先級當前不會立即生效,下一次啟動生效

服務腳本示例:
[root@CentOS6 ~]# cat /etc/init.d/testsrv.sh 
#!/bin/bash
#chkconfig: 35 88 22
#description:testsrv script
case $1 in
start)
        echo testsrv start
;;
stop)
        echo testsrv stop
;;
status)
        echo testsrv status
;;
*)
        echo 'testsrv start | stop | status'
;;
esac
[root@CentOS6 ~]# chkconfig --add /etc/rc.d/init.d/testsrv      //添加服務腳本開機啟動
[root@CentOS6 ~]# chkconfig --list          //查看所有服務腳本
[root@CentOS6 ~]# chkconfig  --level 35 testsrv off     //在35模式下關閉服務腳本的開機啟動
[root@CentOS6 ~]# chkconfig --level 345 testsrv on      //在345模式下開啟服務腳本的開機啟動
[root@CentOS6 ~]# chkconfig --del testsrv         //刪除服務腳本的開機啟動

                        

                         ·注意:正常級別下,最后啟動的一個服務S99local沒有鏈接至/etc/init.d下的某個文件,而是鏈接至了/etc/rc.d/rc.local(/etc/rc.local)腳本;因此,不便或不需寫為服務腳本的程序期望能開啟自動運行時,直接放置于此腳本文件中即可

                

                 tty1:2345:respawn:/usr/sbin/mingetty tty1

                 ……

                 tty6:2345:respawn:/usr/sbin/mingetty tty6

                

                         (1)mingetty會調用login程序

                         (2)打開虛擬終端的程序除了mingetty之外,還有諸如getty等

                

                 x:5:respawn:/etc/X11/prefdm -nodaemon

                         啟動圖像終端X11,5級別特有

        

         ·系統初始化腳本:/etc/rc.d/rc.sysinit

                 (1)設置主機名

                 (2)設置歡迎信息

                 (3)激活udev和selinux

                 (4)掛載/etc/fstab文件中定義的所有文件系統

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

                 (6)設置系統時鐘

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

                 (8)激活lvm及軟raid設備

                 (9)激活swap設備

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

總結(用戶空間的啟動流程):/sbin/init(/etc/inittab)


設置默認運行級別 –> 運行系統初始化腳本,完成系統初始化 –> 關閉對應級別下需要停止的服務,啟動對應級別下要啟動的服務 –> 設置登錄終端 [ –> 啟動圖像終端 ]

CentOS 6:Upstart


·init程序:Upstart,但依然被封裝成了/sbin/init,

         其配置文件:/etc/init/*.conf ,/etc/inittab (僅用于定義默認運行級別)

                

                 注意:*.conf為upstart風格的配置文件

                

                 重要的文件                

                         /etc/init/control-alt-delete.conf:快捷鍵重啟的腳本,建議注釋掉,防止誤操作

                         /etc/init/tty.conf:重啟終端腳本

                         /etc/init/start-ttys.conf:登錄終端腳本

                         /etc/init/rc.conf:啟動腳本

                         /etc/init/prefdm.conf:圖像界面腳本

CentOS 7:Systemd


·init程序:Systemd

        其配置文件:/usr/lib/systemd/system/* ,/etc/systemd/system/*

·完全兼容SysV腳本機制;因此,service命令依然可用;不過,建議使用systemctl命令來控制服務

        # systemctl {start|stop|restart|status} name[.service]

CentOS 6系統啟動流程:


POST –> Boot Sequence(BIOS) –> Boot Loader(MBR) –> Kernel(ramdisk) –> rootfs(ro) –> switch-root –> /sbin/init –> (/etc/inittab ,/etc/init/*.conf)–> 設定默認運行級別 –> 系統初始化腳本 –> 關閉或啟動對應級別下的服務 –> 重啟終端

啟動流程.png

QQ圖片20160913110132.jpg

原創文章,作者:megedugao,如若轉載,請注明出處:http://www.www58058.com/45480

(0)
megedugaomegedugao
上一篇 2016-09-11
下一篇 2016-09-11

相關推薦

  • 學習宣言

    人所缺乏的不是才干而是志向,不是成功的能力而是勤勞的意志。

    Linux干貨 2016-10-30
  • N25期—第一周作業

    計算機的組成及其功能 計算機主要由硬件和軟件兩部分組成, 硬件目前由5大部件組成 控制器:類似人類的大腦!控制整個計算機的運作 運算器:對數據進行邏輯運算處理 存儲器:存放數據部件 輸出設備:比如顯示器,打印機 輸入設備:比如鍵盤,鼠標 Linux發行版本 主要三大分之:Debian系,Reb Hat系,Slackware系。 1.Debian GNU / …

    Linux干貨 2016-12-01
  • 網絡知識

    網絡知識 一、網絡初識 1.網絡概念  在計算機領域中,網絡是信息傳輸、接收、共享的虛擬平臺,通過它把各個點、面、體的信息聯系到一起,從而實現這些資源的共享。 2.分類 按覆蓋范圍分: 局域網LAN(作用范圍一般為幾米到幾十公里)。 城域網MAN(界于WAN與LAN之間)。 廣域網WAN(作用范圍一般為幾十到幾千公里)。 按拓撲結構分類: 總線型 …

    Linux干貨 2016-09-01
  • vim編輯器

    一、vim簡介    vi: Visual Interface,文本編輯器     文本: ASCII, Unicode     文本編輯種類:         行編輯器: sed…

    Linux干貨 2016-08-10
  • date命令常見用法。

    date是一個非常實用的小工具,可以查看時間,并且也可以添加選項去完成自己想完成的東西。

    Linux干貨 2017-11-13
  • 第二周作業

    Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。 cp 文件復制     常用選項:            -i:交互式        …

    Linux干貨 2016-11-06
欧美性久久久久