開機啟動流程

Centos的開機啟動流程

開機流程圖.png


具體步驟解釋: 

第一步:加電自檢:POST

        加電自檢是檢測硬件設備是否正常運行,以及一些外圍設備的輸入輸出是否存在。

自檢功能的實現是依靠BIOS軟件程序實現的

BIOS即基本輸入輸出系統,它是裝載在一個硬件芯片COMS上的,加電過程就是給硬件COMS通電,使其啟動BIOS程序,然后BIOS會根據CMOS上面的配置信息去讀取其他的硬件設備信息并檢測是否存在,能夠正常運行,之后進行硬件設備的初始化。

第二步:加載MBR

     按次序查找各引導設備(引導設備為自定義),第一個有引導程序的設備即為本次啟動要用到的設備。這里以mbr為例

     在硬件設備初始化之后,BIOS會列出一些可啟動的裝置順序,接下來就去讀取第一個可以啟動的設備中操作系統的核心文件,由于不同的系統的文件系統格式不同,為了避免不兼容的問題,就需要一個管理程序來處理這些核心文件的加載問題,即Boot Loader(引導加載程序) ,Boot Loader是一個程序,它存放于硬盤中的第一個扇區內,就是MBR(主引導記錄)中。

     MBR:主引導記錄

        總字節數:512bytes

               446bytes:存儲BootLoader,引導加載器

               中間64bytes:分區表,每16bytes標識一個分區

               最后2bytes:前面信息的有效性標識,55AA表示前面510bytes有效

      加載MBR主引導記錄

第三步:GRUB菜單

GRUB:統一引導加載器

Centos5、6:GRUB0.X Grub legacy

Centos7:GRUB1.X Grub2

查看grub版本信息:grub –version

由于MBR446字節太小,不足以提供Grub的功能實現,所以Grub就把其功能分為三段

Bood Loader:1階段 功能:運行主程序,這個程序必須要被安裝在啟動區,即MBR中,因為MBR的空間有限,因此在MBR中僅安裝Boot Loader的最小程序,并沒有安裝Boot Loader的相關配置文件

Partition:filesystem driver 1.5階段 功能:在MBR隨后的扇區中存放,主要用于與第二階段所在分區的文件系統進行交互

Partition:/boot/grub 2階段 功能:通過Boot Loader加載所有配置文件及相關的環境參數信息,這些配置文件及相關的環境參數都存放與磁盤分區上的/boot目錄中。該階段提供了Grub啟動菜單和交互式的grubshell

Boot Loader原本是用來加載內核的,這里讓Bood Loader去加載Grub的第二個階段,第二階段完成后,由它完成加載內核。

    Boot Loader的第一個功能是去識別、加載操作系統中的核心文件,并提交到內存中,從而啟動操作系統。不同的操作系統的文件格式不同,因此每一個操作系統都有自己的Boot loader程序

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

第四步:加載系統內核 Kernel

      Bood Loader開始讀取炒作系統內核文件后,接下來就會將內核文件解壓后裝在到內存當中,然后根據內核提供的功能開始測試與加載各個設備,這里的設備檢查與之前的BIOS自檢不同,此時內核程已經完全接管了BIOS的工作,之后的操作都是由內核來完成的。內核文件通常放置在/boot/目錄中,并且是一個以vmlinuz開頭的文件。

       此時內核程序還沒有加載到磁盤,又如何去讀取文件系統上的內核文件呢? 為了解決這個問題,我們采用了一種叫做虛擬文件系統來解決這個問題,虛擬文件系統(Initial RAM DISK,同樣它也放置在/boot/目錄下面

       Centos5的虛擬文件系統是基于ramdisk

           文件為:/boot/initrd-VERSION-release.img

        制作此文件工具:mkinitrd

       Centos6、7的虛擬文件系統是基于ramfs

            文件為:/boot/initramfs-VERSION-erlease.img

        制作此文件工具:dracutmkinitrd

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

        ramdisk:把內存當作磁盤

        ramdiskàramfs

      這兩種文件的特點是:能夠通過Bood Loader程序將其加載到內存中,然后此種文件會被解壓縮并且在內存中模擬一個根文件系統,這個根文件系統能夠提供一個可以運行的程序,通過該程序可以加載在啟動過程中所需要的核心模塊(如:RAID、LVMSCSI等文件系統與磁盤的驅動程序),加載完成后,會協助內核重新呼叫/sbin/init來執行后續的正常啟動

    內核的功能:

  探測可識別到的所有硬件設備(CPU、硬盤、網卡等)

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

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

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

第四步:啟動第一個進程 /sbin/init

      在內核、硬件及驅動信息加載完畢后,內核會呼叫用戶控件的第一個執行程序/sbin/init,init程序的主要功能是準備軟件運行環境,包括系統的主機名稱、網絡配置、文件系統格式等其他服務的啟動管理。而這些都是通過init的配置文件來定義的。

  Init的配置文件:

       Centos5:采用SysV init方式

             特點:啟動用戶空間的服務程序,通常通過腳本進行,有依賴關系的服務將串行啟動,所以,就導致了centos5的系統啟動非常緩慢。

             配置文件為:/etc/inittab

       Centos6:采用Upstart方式

             特點:守護進程間的通信依賴于D-Bus進行,因此,可以基本實現類似并行的方式啟動

             配置文件:/etc/inittab ,/etc/init/*.conf

       Centos7:采用Systemd方式

             特點:服務只有在第一次被訪問時才會真正啟動起來,centos7系統的啟動過程非??臁?/span>

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

init的配置文件中有一個非常重要的配置項,就是默認的系統啟動級別,分為一下幾種:

1、0:關閉所有服務; 關機

2、1:維護模式,單用戶模式,root用戶直接登陸,多用于系統維護

3、2:維護模式,多用戶模式,需要用戶認證,會啟動網絡服務,但不支持FNS

4、3:正常級別,完全的多用戶模式,文本界面

5、4:預留級別,默認與3級別相同

6、5:正常級別,完整的圖形界面多用戶模式

7、6:關閉所有服務;重啟

36級別用的比較多

切換模式的方式為:init[0-6]

查看當前運行級別:runlevel who –r

Centos5的配置文為/etc/inittab

打開配置文件:

id:runlevel:action:process     //默認runlevel配置

解釋:id:一個任務的標識符

      runlevels:在哪些級別啟動此任務,#,####代表上述的級別) 也可以為空,表示所有級別

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

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

           respawn:此任務終止時,就自動重新啟動

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

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

si:sysinit:/etc/rc.d/rc.sysinit    //系統軟件運行環境的腳本

/etc/rc.d/rc.sysinit為初始化用戶空間環境,會執行許多系統初始化任務,在完成初始化腳本后,系統還會啟動對應級別下折定為要啟動的服務,關閉那些設定為要停止的服務。

7個不同的runlevel 需要啟動的服務的scripts放置位置:

l0:0wait/etc/rc.d/rc 0 <=runlevel 0/etc/rc.d/rc0.d

l1:1wait/etc/rc.d/rc 1 <=runlevel 1/etc/rc.d/rc1.d

l2:2wait/etc/rc.d/rc 2 <=runlevel 2/etc/rc.d/rc2.d

l3:3wait/etc/rc.d/rc 3 <=runlevel 3/etc/rc.d/rc3.d

l4:4wait/etc/rc.d/rc 4 <=runlevel 4/etc/rc.d/rc4.d

l5:5wait/etc/rc.d/rc 5 <=runlevel 5/etc/rc.d/rc5.d

l6:6wait/etc/rc.d/rc 6 <=runlevel 6/etc/rc.d/rc6.d

/etc/rc.d/rc#.d/下的所有鏈接文件來決定如何啟動關閉服務,所有以S開頭的鏈接文件,都會被傳遞start參數以啟動;所有以K開頭的鏈接文件;都會被傳遞stop參數以停止

Init的處理流程

Init是通過自上而下的讀取inittab文件來一次執行的,因此init的處理流程是:

1、 讀取默認的runlevel,這里使用的是默認級別3

2、 使用/etc/rc.d/rc.sysinit進行系統的初始化

3、 由于采用的是3級別,因此只能進行l3:3:wait:/etc/rc.d/rc3 其他的忽略

4、 配合好[ctrl]+[alt]+[del]組合鍵的功能

5、 配置不斷電系統pf、pr兩種機制

6、 啟動mingetty6個終端

7、 如果是5級別,則會以/etc/X11/prefdm-nodaemon啟動圖形化界面

如果不想啟用6個終端,可以將多余的注釋掉 #即可

init執行的第二步執行系統初始化過程,init是根據/etc/rc.d/rc.sysinit中定義的內容進行系統初始化,做一下事情:

1、  根據配置文件中的設定來設定主機名(讀取/etc/sysconfig/network文件中的HOSTNAM進行)

2、  打印文本歡迎信息

3、  激活SELinuxudev

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

5、  激活swap設備

6、  檢測根文件系統,并以讀寫的方式掛載

7、  設置系統時鐘

8、  根據/etc/sysctl.conf文件設定內核參數值

9、  激活LVMRAID設備

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

11、            清理操作

服務的啟動

       服務的啟動停止是通過inittab里面提到的l3:3wait:/etc/rc.d/rc 3配置,實際上是通過/etc/rc.d/rc3.d/下的所有鏈接文件來決定如何啟動或關閉服務的。

       /etc/rc.d/rc3.d下的所有鏈接文件其實都是在/etc/init.d/下面的所有腳本,這些腳本遵循LSB服務腳本的定義規范,接受至少四個基本參數:{start|stop|restart|status}

start:啟動服務

stop:停止服務

restart:重啟服務

status:查看服務狀態

  腳本在指定級別啟停的控制方法:

      腳本開頭添加這些項:

#chkconfig: 哪些級別 啟動數 停止數  例如: #chkconfig: 234 25 85

#description: 腳本描述 centos5中必須填寫,centos6可寫可不寫)

可通過chkconfig命令來管理服務腳本

chkconfitg –level 級別 腳本 on|off

–level:指明級別為onoff,其余的保持原狀,默認級別為2345

chkconfig –list 腳本

 查看服務在對應級別的狀態

chkconfig –add | –del 腳本

 –add :添加服務 為某存放在/etc/init.d的服務在對應的/etc/rc.d/rc0-6.d目錄添加符號鏈接

 –del :刪除服務  把指定腳本在7個符號鏈接中都刪除

注意:有一個S99local的符號鏈接,指向的是/etc/rc.local腳本,其功能為:那些不便定義為服務腳本,設定開機自動運行的腳本,  可直接把命令寫入次腳本中,以實現開機即運行。

Linux系統啟動后,一般會開啟6tty終端,每個中端啟動后,會立即通過此終端附加一個應用程序——-lofin,如果運行級別為5還會啟動一個圖形虛擬終端。

Centos6的配置文件及其功能:

 

/etc/inittab

設置系統默認的運行級別

id:3:initdefault:

 /etc/init/control-alt-delete.conf     //設置ctrl+alt+del三鍵操作

 /etc/init/tty.conf                 //控制tty終端的開啟

/etc/init/start-ttys.conf             //配置tty終端的開啟數量,設備文件

 /etc/init/rc.conf                  //兼容腳本,負責個運行級別的調用處理/

/etc/init/rcS.conf                  //加載rc.sysinit腳本,完成系統初始化任務

/etc/rcS-sulogin.cong               //為單用戶模式啟動/sbin/sushell環境          

 

centos6的啟動過程:

1. 加載BIOS 的硬件信息,獲取第一個啟動設備。

2. 讀取第一個啟動設備MBR 的引導加載程序(grub) 的啟動信息

3. 加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備。

4. 核型執行init 程序并獲取運行信息。

5.Init 執行/etc/rc.d/rc.sysinit 文件。

6. 啟動核心的外掛模塊(/etc/modprobe.conf)。

7.Init 執行運行的各個批處理文件(scripts).

8.Init 執行/etc/rc.d/rc.local.

9. 執行/bin/login 程序,等待用戶登錄。

10. 登錄之后開始以Shell 控制主機。

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

(0)
ZJMZJM
上一篇 2016-09-13
下一篇 2016-09-13

相關推薦

  • Linux系統上命令的使用格式

    第一部分:Linux系統上命令的使用格式 命令的語法通用格式:      COMMAND OPTIONS ARGUMENTS     發起一個命令:請求內核將某個二進制程序運行為一個進程;      程序 —-> 進程   &nbs…

    Linux干貨 2016-08-15
  • vim編輯器

    vim編輯器三種模式轉換 G跳到尾行 gg:跳到首行 H:跳到當前頁的首行 L: 跳到當前頁的尾行 M: 跳到當前而的中間行 dd: 刪除光標所在的行 #dd:多行刪除 yy:復制行 #yy: 復制多行 ? Y: 復制整行 cc:刪除當前行并輸入新內容 #cc:刪除多行 C:刪除當前光標到行尾,并切換成插入模式 修改配置文件 全局: /etc/vimrc 用…

    2017-08-05
  • 模塊式LAMP和fpm式LAMP實現wordpress

           Linux+Apache+Mysql/MariaDB+Perl/PHP/Python這一組合常用來搭建動態網站或者服務器的開源軟件,隨著開源潮流的蓬勃發展,開源的LAMP已經與J2EE和.Net商業軟件形成三足鼎立之勢,并且該軟件平臺在軟件方面的投資成本較低,,LAMP平臺已經成為最強…

    Linux干貨 2016-04-22
  • 22期第四周課程練習

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 [root@localhost tuser1]# cp   -r    /etc/skel/   /ho…

    Linux干貨 2016-09-08
  • 給linux系統添加新的磁盤

    虛擬化環境中,我們經常會遇到需要增加磁盤容量的情況,通常有兩種方式,第一種是添加一塊新的硬盤,另一種是擴容原有磁盤,以下是添加新磁盤至linux系統的操作規范。注:具體磁盤信息可能有所不同。 ##查看新增加磁盤/dev/sdb的信息 [root@CentOS7 ~]# fdisk -l /dev/sdb   Disk /dev/sdb: 5368 …

    Linux干貨 2016-11-11
  • Homework Week-9 bash腳本之順序、選擇、循環

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登錄shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash #Elephant echo "nologin users:" user1=$(cat /etc/passwd&n…

    Linux干貨 2016-10-17
欧美性久久久久