CentOS系統啟動流程

來源:互聯網
上載者:User

標籤:

CentOS系統啟動流程

 

 

 POST --> Boot Sequence(BIOS) --> Boot Loader(MBR) --> kernel(ramdisk) --> rootfs(readonly) --> switchroot --> /sbin/init(CentOS 5,6,7不同) --> 設定預設運行層級 --> 運行系統初始化指令碼,完成系統初始化 --> 關閉啟動對應層級下需要停止的服務,啟動對應層級下需要開啟的服務 --> 設定登入終端(啟動終端圖形終端)--> 作業系統啟動完成

 

CentOS系統啟動流程(核心層級)

1、POST:加電自檢

  開機加電後,系統自檢硬體裝置包括cpu、記憶體、硬碟、顯示裝置等,這個過程叫加電自檢POST;一旦通電會自動讀取ROM有個帶電晶片CMOS程式並運行即按次序尋找可引導裝置,第一個有引導程式的裝置即為本次啟動要用到的裝置;引導程式叫bootloader引導載入器。

 

 

2.BIOS:第一順序啟動的裝置(基本輸出入系統 (BIOS) Basic Input and Cutput System)

   ROM中的資訊一旦寫入就不能進行修改,其資訊斷電之後也仍然保留。而CMOS是微機主板上的一塊可讀寫的RAM晶片斷電以後儲存在上面的資料會自動消失,需要主板電池供電;對CMOS中各項參數的設定要通過專門的程式,現在廠家將CMOS設定程式做到了BIOS晶片中,因此CMOS設定又通常叫做BIOS設定。BIOS(基本輸出入系統 (BIOS))也是固化在當前主機ROM晶片中的代碼,實現按次序尋找各引導裝置,第一個有引導程式的裝置即為本次啟動要用到的裝置。

 

3.Boot Squence:引導載入程式啟動核心

   按次序尋找引導裝置,第一個有引導程式的裝置即為本次啟動要用到的裝置;

    bootloader引導載入器、程式:

     Windows:由ntlader引導載入器

     Linux:

      (1)LTLO:Linux Loder(無法支援大磁碟,1024後不能載入)

      (2)GRUB: Grand Uniform Bootloder(統一引導載入器)

           GRUB 0.X:Grub Legacy(傳統版本)

           GRUB 1.X:Grub2 (第二版本)

   功能:提供一個菜單,允許使用者選擇要啟動的系統或不同的核心版本,把使用者選定多核心裝載到RAM(記憶體)中的特點空間中,解壓、展開,而後把整個系統控制權移交給核心,即完成把核心載入到記憶體空間中。

   Bootloader引導載入器是安裝在硬碟或光碟片甚至是隨身碟上的程式,系統加電後啟動並執行第一段軟體代碼。  

   Bootloader引導載入程式位於磁碟中的MBR中,每個磁碟或每個磁碟中的分區中都有MBRMBR是磁碟上的第一個扇區又叫做主開機磁區,是電腦開機後訪問硬碟時所必須要讀取的首個扇區,分三部分:

  MBR:Master Boot Record(主引導記錄)

   512bytes:

     446bytes:bootloader(引導程式LTLO或GRUB)

     64bytes:fat(分區表,檔案系統分配表)

     2bytes:55AA(標記MBR有效)

   MBR是由分區程式(如Fdisk,Parted)所產生的,它不依賴任何作業系統,而且硬碟引導程式也是可以改變的,從而能夠實現多系統引導。僅僅包含一個64個位元組的硬碟分區表。由於每個分區資訊需要16個位元組,所以對於採用MBR型分區結構的硬碟(其磁碟卷標類型為MS-DOS),最多隻能識別4個主要分區。所以對於一個採用此種分區結構的硬碟來說,想要得到4個以上的主要分區是不可能的。這裡就需要引出擴充分區,擴充分區也是主要磁碟分割(Primary partition)的一種,但它與主要磁碟分割的不同在於理論上可以劃分為無數個邏輯分區,每一個邏輯分區都有一個和MBR結構類似的擴充引導記錄(EBR)。

 Linux中有多種引導載入程,常見的有最早的LILO,缺點:LILO無法支援大硬碟,如果核心或載入的系統位於1024柱面以後的分區上,LILO是載入不了,但在安卓手機上應用較廣泛;後來被GRUB取代,GRUB有兩個版本GRUB 0.x(Grub Legacy)和GRUB 1.x(Grub2)兩者從設計理念上完全不同。

 

  Linux中的引導載入程Bootloader有多種實現方式:

    LILO:LIinux LOader

    GRUB:Grand Uniform Bootloader

        GRUB 0.x:Grub Legacy

         GRUB 1.x:Grub2

  GRUB(Boot Lloader):

    bootloader:1st stage(對MBR而言bootloader是載入其第二階段,不是載入核心)

    Partiton:filesystem driver,1.5 stage

    Partition:/boot/grub,2nd stage

    載入後可在作業系統之前提供一個作業系統(即一個介面),然後載入核心;

 

  Grub Legacy:分三階段

    stage1:存放在MBR上

    stage1_5:存放在MBR之後的扇區,讓stage1中的bootloader能識別stage2所在的分區上的檔案系統;

    stage2:磁碟分割(/boot/grub/)

   引導載入程式先讀取MBR上的gurb第一階段,由於MBR很小隻有512位元組採用grub這種方式引導程式,隨後讀取扇區中的stage1.5階段,讀取1.5階段以後從而就能驅動第二階段stage2所在的磁碟分割,stage2是存放在磁碟分割上的還包括了核心檔案及ramdisk等都在這個分區上存放的;這就是為什麼通過Bootloader之grub就能夠載入核心檔案的原因。

  注意:當前硬體平台,主板BIOS必須能識別硬碟,然後BIOS才能載入硬碟中的Bootloader,磁碟中的Bootloader自身載入完以後,就能夠識別當前主機上的硬碟裝置了。

但硬碟裝置能識別,並不代表硬碟上的檔案系統能識別,因為檔案系統是額外附加的一層軟體組織的檔案結構,所以要能夠對接一種檔案系統,必須要用到檔案系統驅動;對應的應用程式必須能識別和理解這樣的檔案系統才可以,這種程式就稱為檔案系統驅動;grub的1.5階段就是給gurb提供了檔案系統驅動的,從而就能夠訪問對應的第二階段和核心所在的分區了,這通常是一個基本磁碟分區;所以grub第二階段以及核心和ramdisk檔案通常都會放在一個基本磁碟分區上;因為grub驅動不了邏輯卷這種進階介面。

 stage2一般是掛載至/boot/grub/目錄下;grub也有自己的設定檔:/boot/grub/grub.conf且通常有個符號連結檔案:/etc/grub.conf;

 stage2的功用:

 (1)提供菜單或互動式介面;

 (2)能載入使用者選擇的核心或作業系統;

 (3)為菜單通過了保護機制。

 

4.載入 kernel

(1)通過grub載入到核心後,就在記憶體中解壓並展開就可完成後續操作即核心自身初始化;分為四步:

   第一:探測可識別的所有硬體裝置

   第二:載入硬體驅動程式;(有可能會藉助於randisk載入驅動)

   第三:以唯讀方式掛載根檔案系統

   第四:運行使用者空間的第一個應用程式:/sbin/init

 (其中有可能會藉助於randisk載入驅動,ramdisk:是基於記憶體的磁碟裝置;以唯讀方式掛載根檔案原因是防止核心中有bug,確保無問題後再改為讀寫方式;)

 

(2)如果核心把已知根檔案系統所在的磁碟裝置驅動程式編譯進核心(一般自己編譯核心含此驅動),此時就不需要這個ramdisk,所以發行商提供的安裝系統檔案不可能包含所有驅動在核心中。

這樣,要想載入根檔案系統,就要先載入根檔案系統所在的磁碟裝置驅動,而驅動就在根上因此,就不能依賴於根上的驅動程式來載入根檔案系統;要藉助於ramdisk臨時根檔案系統來載入根檔案系統所在的磁碟裝置驅動,從而載入根檔案系統;

   ramdisk臨時根檔案系統不是作業系統發行商直接在光碟片上內建的,而是在安裝作業系統後臨時產生的,它在安裝作業系統後,能掃描當前主機硬碟裝置的型號,並找到相關驅動做成一個臨時根;所以這個臨時根是為每個使用者安裝過程產生以後動態建立的。

   ramdisk臨時根是把記憶體某段空間當做磁碟使用,而Linux核心特性是使用緩衝和緩衝來加速對磁碟上的檔案訪問,這就是為什麼在centos5上使用ramdisk(initrd),在後來的centos6,7上使用的ramfs的原因,避免了在記憶體中的雙緩衝和雙緩衝。

spacer.gif

 

5.掛載根檔案系統

  一旦核心藉助於ramdisk提供的臨時根完成載入真正的根檔案系統所在的裝置,下一步就裝載根檔案系統,核心會自動把根檔案系統所在的裝置掛載至根上,所以說根是在核心中就是這個原因所在。

 

6.根切換

  在掛載根檔案系統時為了避免核心中有bug或操作過程中有bug導致根檔案系統被損壞,先唯讀掛載根檔案系統,載入完成後才讀寫掛載,完成整個掛載根檔案系統後,直接去找/sbin/init程式,即開始運行使用者空間的第一個程式。

使用者空間啟動流程

 

7./sbin/init程式

  init程式主要依賴於設定檔:/etc/inittab,大體分為:設定預設啟動層級 --> 設定系統初始化指令碼 --> 啟動對應層級的服務 --> 列印各終端登入介面(如果層級為3處理提供文本登入介面,如果層級為5還提供圖形登入介面)

 

8. 設定預設運行層級

  (1)運行層級:為了系統的運行或維護等目的而設定的機制;

    0-6:共7個層級;

     0:關機,shutdown

     1:單一使用者模式(single user),root使用者,無須認證,維護模式;

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

     3:多使用者模式(multi user),完全功能模式,文本介面;

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

     5:多使用者模式(multi user),完全功能模式,圖形介面;

     6:重啟,reboot

  (2)設定檔:/etc/inittab定義了很多功能,每一行定義一種操作(action)以及與之對應的process(僅適用於CentOS 5),一行就定義了init要執行的任務,甚至是一堆任務,每一行的文法格式為:                                                             id:runlevels:action:process

  id為一個任務的標識符;

  runlevels:在哪些運行層級下啟動此任務;例:3,2345,也可為空白表示所有層級;

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

    wait:等待切換至此任務所在的層級時執行一次(剛剛切換進來時);

    respawn:一旦此任務終止時,就自動重啟;(如:登入終端執行logout登出後會再次啟動)

    initdefault:設定預設允許層級;此時process省略為空白;

    sysinit:設定系統初始化方式,此處一般為指定/etc/rc.d/rc.sysinit指令碼;(CentOS 5,6都用到此指令碼,CentOS 7是靠systemd完成的),在CentOS 6中僅保留此設定檔中設定啟動運行層級的功能。

    process:具體任務;通常為應用程式,或指令碼,或二進位的程式,取決於自訂。

 

9.系統初始化指令碼

系統初始化指令碼:/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)載入額外裝置的驅動程式;(核心載入驅動只載入根檔案系統的)

(11)清理操作;

注意:在init設定檔:/etc/inittab中,有一行內容是定義/etc/rc.d/rc.sysinit,此指令檔是負責完成系統初始化的指令檔。

 

10.關閉/啟動對應層級下的服務

  指令檔/etc/rc.d/rc作用為當層級切換時啟動或停止服務;此指令碼接受傳遞的參數給指令碼中$runlevel變數,然後,讀取/etc/rc$runlevel.d/K*和/etc/rc$runlevel.d/S*所有檔案,這些檔案就是為什麼開機啟動後,有些服務會自動啟動,有些服務沒有啟動的原因。

K*:要停止的服務,K##*,優先順序,數字越小,越優先關閉,依賴的服務先關閉,然後再關閉被依賴的。

S*:要啟動的服務,S##*,優先順序,數字越小,越是優先啟動,被依賴的服務先啟動,而依賴的服務後啟動。

/etc/rc.d/init.d目錄還有個連結目錄為/etc/init.d目錄,這兩目錄下檔案相同。

 

11.啟動終端(圖形終端)

 作業系統啟動完成

 

相關概念:

   Linux系統的組成部分:核心+根檔案系統

   核心:進程管理、記憶體管理、網路通訊協定棧、檔案系統、驅動程式。

   IPC(Inter-Process Communication處理序間通訊):就是指多個進程之間相互連信,交換資訊的方法。Linux IPC基本上都是從Unix平台上繼承而來的。主要包括最初的Unix IPC,System V IPC以及基於Socket的IPC。另外,Linux也支援POSIX IPC。

   運行中的系統內容可分為兩層:核心空間、使用者空間;

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

      使用者空間:應用程式(進程或線程)

   核心設計流派:

      單核心設計:把所有的功能整合於同一個程式;(Linux)

      微核心設計:每種功能都使用一個單獨的子系統實現;(Windows solarls)

   Linux核心特點:

     (1)支援模組化:.KO(kernel object)

     (2)支援模組運動時動態裝載或卸載

   組成部分:

      核心檔案:/boot/Vmliuz-VERSION-release

        ramdirk:

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

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

      

CentOS系統啟動流程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.