CentOS 6 系統啓動流程

一、Linux系統簡介

       ⒈ Linux組成: kernel+rootfs
                ①kernel主要功能:
進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能
                ②rootfs:程序和glibc
                          庫:函數集合, function, 調用接口(頭文件負責描述)
                                 過程調用:
procedure,無返回值
                                 函數調用:
function
                          程序:二進制執行文件

       ⒉內核設計流派:
           單內核
(monolithic kernel)Linux
                      把所有功能集成於同一個程序
           微內核
(micro kernel)Windows, Solaris
                      每種功能使用一個單獨子系統實現

       ⒊Linux內核特點:
           ①支持模塊化:
.ko(內核對象)
                 如:文件系統,硬件驅動,網絡協議等
           ②支持內核模塊的動態裝載和卸載
           ③組成部分:
               核心文件: /boot/vmlinuz-VERSION-release
                     ramdisk:輔助的僞根系統
                     CentOS 5: /boot/initrd-VERSION-release.img
                     CentOS 6,7: /boot/initramfs-VERSION-release.img

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

二、CentOS 6 啓動流程

wKioL1mlai2yzoQeAAKyYk26vj0052.png

     CentOS6啓動簡要流程框架:

            1.加載BIOS的硬件信息,獲取第一個啓動設備
            2.讀取第一個啓動設備MBR的引導加載程序(grub)的啓動信息
            3.加載核心操作系統的核心信息,核心開始解壓縮,並嘗試驅動所有的硬件設備
            4.核心執行init程序,並獲取默認的運行信息
            5.init程序執行/etc/rc.d/rc.sysinit文件
            6.啓動核心的外掛模塊
            7.init執行運行的各個批處理文件(scripts)
            8.init
執行/etc/rc.d/rc.local
            9.
執行/bin/login程序,等待用戶登錄
            10.登錄之後開始以Shell控制主機

    啓動流程介紹:

  • POST加電自檢是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、 串並行接口、鍵盤、 CD-ROM光驅等硬件情況的檢測。
            ROM: BIOS, Basic Input and Output System,保存着有關計算機系統最重要的基本輸入輸出程序,系統信息設置、 開機加電自檢程序和系統啓動自舉程序等。
            RAM: CMOS互補金屬氧化物半導體,保存各項參數的設定

    按次序查找引導設備,第一個有引導程序的設備爲本次啓動設備。

  • 加載MBR,MBR組成:446: bootloader, 64: 分區表, 2: 55AA,bootloader(引導加載器)提供具有菜單功能,加直接載操作系統中的內核信息,以及相關控制權轉交功能。

      Bootloader(CentOS 5、6採用的是GRUB)程序運行與配置項加載分三個階段(stage)來運行

        ①stage1、安裝bootloader最小主程序,並沒有安裝相關配置文件。

        ②stage1_5、在MBR隨後的扇區中存放,用於與stage2所在分區的文件系統進行交互。

        ③stage2、加載所有配置文件及相關環境參數信息(這些信息都存放在磁盤分區的的/boot目錄下),當讀取了這些文件系統所定義的數據後,就能識別文件系統並讀取在該文件系統上的內核文件了。

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

  • ramdisk
    內核中的特性之一:使用緩衝和緩存來加速對磁盤上的文件訪問,並加載相應的硬件驅動。
    ramdisk --> ramfs 提高速度
         CentOS 5: initrd
               工具程序: mkinitrd
         CentOS 6
    7: initramfs
               工具程序: mkinitrd, dracut

    ramdisk文件的製作:
    (1) mkinitrd命令
    爲當前正在使用的內核重新制作
    ramdisk文件
    mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)
    (2) dracut
    命令
    爲當前正在使用的內核重新制作
    ramdisk文件
    dracut /boot/initramfs-$(uname -r).img $(uname -r)

  • /etc/rc.d/rc.local:正常級別下,最後啓動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本。該腳本功能爲不便或不需寫爲服務腳本放置於/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置於/etc/rc.d/rc.local文件中

  • 系統初始化:
    POST --> BootSequence (BIOS) -->Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只讀) --
    > init
    systemd

三、配置文件

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

        2、init處理流程

             以Centos 5 系統啓動爲例,init通過自上而下讀取inittab文件來依次執行(各處理過程相似)

             ①去系統默認的運行級別(runlevel)
                        示例:id:3:initdefault:
             ②使用/etc/rc.d/rc.sysinit進行系統初始化

             ③完成初始化腳本後,系統還會啓動對應級別下設定爲要啓動的服務,關閉那些設定爲要停止的                 服務,由於採用的是3級別,因此只進行13:3:wait:/etc/rc.d/rc 3其他忽略。

             ④配置好[ctrl]+[alt]+[del]組合鍵的功能

             ⑤配置不間斷電源系統(UPS)pf、pr兩種機制

             ⑥啓動mingetty6個終端

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

     3、/etc/rc.d/rc.sysinit: 系統初始化腳本
            (1) 設置主機名
            (2) 設置歡迎信息
            (3) 激活udevselinux
            (4)
掛載/etc/fstab文件中定義的文件系統
            (5) 檢測根文件系統,並以讀寫方式重新掛載根文件系統
            (6) 設置系統時鐘
            (7) 激活swap設備
            (8) 根據/etc/sysctl.conf文件設置內核參數
            (9) 激活lvmsoftware raid設備
            (10) 加載額外設備的驅動程序
            (11) 清理操作

四、總結系統啓動流程

    加電自檢-->

    根據在BIOS(基本輸入輸出系統)中定義的Boot Sequence(啓動次序)逐一去搜索擁有啓動功能的設備-->

    搜索到後加載存放於MBR中的該設備的Boot Loader(引導加載器)Boot Loader加載完後會顯示一個菜單讓用戶區選擇要啓動的操作系統或內核版本-->

    加載用戶選擇的Kernel(內核),此外可能還要加載initrdinitramfsramdisk的具體實現),因爲Kernel有可能要藉助ramdisk(虛擬內存盤,臨時根文件系統)提供的真正根文件系統的所在的設備的驅動去識別該設備 -->

            kernel加載並以只讀方式掛載rootfs(真正的根文件系統)-->

            kernel進行switchroot(根切換)-->

            kernel運行真正根文件系統上的/sbin/init程序-->

            /sbin/init程序根據其配置文件/etc/inittab/etc/init/*.conf設定默認運行級別-->

            /sbin/init程序運行系統初始化腳本完成系統初始化-->

            /sbin/init程序關閉或啓動對應級別下的服務-->

            /sbin/init程序啓動終端並打印登錄提示符或登錄界面;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章