linux系統啓動流程(MBR)

總:POST---> Boot Squence ---> Bootloader ---> kernel ---> init ---> 完成啓動linux

 

系統:CentOS6ios

 

一、按下電源,cpu找到CMOS中的BIOS並運行起來,這個小程序會完成硬件自檢。小程序

    BIOS:Basic Input and Output System緩存

 

二、bios會根據設置的boot squence來找設備上的MBR,找到之後控制權移交給MBR中的bootloader(1 stage). ide

        MBR存在磁盤上的0號扇區。工具

        有3部分組成:
                446:bootloader       
                64: 分區表 16個字節表示一個分區
                2: 55AA
spa

三、bootloader加載MBR以後的一部分扇區中的基本文件系統驅動(1.5 stage),如以後的27個扇區。而後再加載引導分區中的第2階段。blog

     linux上面的bootloader程序是GRUB.內存

     GRUB有3個階段組成。
           bootloader:1st stage
           Partition:filesystem driver, 1.5 stage
           Partition:/boot/grub, 2nd stage
ci

由於1.5階段的文件系統驅動只能驅動基本文件系統,因此第2階段所在的分區不能使用lvm或軟raid之類的上層文件系統。

 

四、加載第2階段之後,會提供一個選擇啓動系統的窗口。內容就是/boot/grub/grub.conf文件中的各條目。

若是所選條目就是本機的linux系統的話:

在點擊進入系統以後。GRUB會加載grub.conf文件中指定的內核和要傳遞給內核的參數。參數中有真實根的地址。有時候還要加載與內核同版本的initrd。 initrd是一個模擬根的文件,由GRUB把它與內核一塊兒加載到內存。此文件展開之後就是一個虛擬的根。內核工做於此根中並開始以只讀方掛載真實的根。所需驅動和程序在此根中加載。掛載完成之後開始把一些必要文件,如設備文件複製到真實的根。而後執行根切換。若是沒有initrd文件,內核會直接掛載真實的根,若是內核裏面沒有根分區的驅動,則系統啓動失敗。

wKioL1aHkeiAfOvfAAAjNo6wFYw924.jpg


而若是所選條目是指向其它分區的另外一個系統,則GRUB的控制權移交給那個分區首部的引導程序來管理(各個分區首部保留有引導空間(linux上面好像是1024Byte),也正是這樣纔有了雙系統或多系統)。


kernel:

  • 自身初始化:
    探測可識別到的全部硬件設備;
    加載硬件驅動程序;(有可能會藉助於ramdisk加載驅動)
    以只讀方式掛載根文件系統;
    運行用戶空間的第一個應用程序:/sbin/init

initrd文件有兩種:

  • ramdisk

  • ramfs


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

在使用ramdisk的時候,在內存中模擬成磁盤,但由於磁盤都要有緩衝(buffer)和緩存(cache),這樣的結果就是還要在內存中使用緩衝和緩存。畫蛇添足,因此就有了ramfs。

在使用ramfs的時候,直接在內存中模擬成文件系統,不須要在內存中使用緩衝和緩存。


能夠生成initrd的工具。能夠手動用如下工具生成。

CentOS 5: initrd(ramdisk)
    工具程序:mkinitrd
CentOS 6,7: initramfs(ramfs)
    工具程序:dracut, mkinitrd(腳本)

 

五、根切換完成之後,內核開始執行第一個用戶空間應用程序(若是以前的切換根不算的話)/sbin/init。以後內核退居幕後,前面由init程序來負責。init負責啓動初始化已定義的各類服務程序和環境。

init就是用戶空間的全部程序的祖先。

init是完成系統用戶空間初始化的項目總稱,它在不一樣的系統版本上有不一樣的實現:

init程序的類型:
       CentOS 5-:SysV init
             配置文件:/etc/inittab
                       
       CentOS 6:Upstart
             配置文件:/etc/inittab
                       /etc/init/*.conf
                           
        CentOS 7:Systemd
             配置文件:/usr/lib/systemd/system/, /etc/systemd/system/



j_0077.gif

相關文章
相關標籤/搜索