開機啟動流程

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

        制作此文件工具:dracut、mkinitrd

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

        ramdisk:把內存當作磁盤

        ramdiskàramfs

      這兩種文件的特點是:能夠通過Bood Loader程序將其加載到內存中,然后此種文件會被解壓縮并且在內存中模擬一個根文件系統,這個根文件系統能夠提供一個可以運行的程序,通過該程序可以加載在啟動過程中所需要的核心模塊(如:RAIDLVM、SCSI等文件系統與磁盤的驅動程序),加載完成后,會協助內核重新呼叫/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系統的啟動過程非???。

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

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

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

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

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

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

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

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

76:關閉所有服務;重啟

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、 配置不斷電系統pfpr兩種機制

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 11:17
下一篇 2016-09-13 11:17

相關推薦

  • 馬哥教育網絡班N22期+第3周課程練習

    馬哥教育網絡班N22期+第3周課程練習 1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。 示例: [root@Red Hat Enterprise Linux Desktop]# who | cut -d' &#039…

    Linux干貨 2016-08-29
  • 初識MySQL(二)SQL語句

        MySQL是關系型數據庫的一種,基于二維表實現數據的存儲與讀取,通過索引實現快速查詢,而實現數據庫、表、索引的操作則是由SQL語句來完成的。     1、MySQL中字符大小寫       (1)、SQL關鍵字以及函數名不…

    Linux干貨 2015-08-26
  • linux sort 命令詳解

    linux sort 命令詳解 sort是在Linux里非常常用的一個命令,管排序的,集中精力,五分鐘搞定sort,現在開始! 1 sort的工作原理 sort將文件的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。 [rocrocket@rocrocket programming]$&nb…

    Linux干貨 2016-08-15
  • Linux基本知識之Vim編輯器

    vim文本編輯器:    vim是Linux系統上的最著名的文本/代碼編輯器,也是早年的vi編輯器的加強版,而gVim則是其windows版。它的最大特色是完全使用鍵盤命令進行編輯,脫離了鼠標操作雖然使得入門變得困難,但上手之后鍵盤流的各種巧妙組合操作卻能帶來極大幅度的效率的提升。 (1)打開文件與關閉文件:     …

    Linux干貨 2016-08-10
  • Linux之賬號管理

    Linux之賬號管理 一、新增與刪除用戶:useradd,相關配置文件,passwd,usermod,userdel 在Linux登錄系統時會輸入賬號和密碼,所以創建用戶也需要這兩個數據。新建用戶用useradd命令,密碼的給予則用passwd命令。 useradd 1.添加新用戶 -u: -u  uid username 創建用戶時指定uid(如…

    2017-07-23
  • 馬哥教育網絡班22期+第14周課程練習

    系統的INPUT和OUTPUT默認策略為DROP;   iptables -P INPUT DROP   iptables -P OUTPUT DROP 1、限制本地主機的web服務器在周一不允許訪問;新請求的速率不能超過100個每秒;web服務器包含了adm…

    Linux干貨 2016-12-05
欧美性久久久久