1. 程式人生 > >Linux 啟動流程學習

Linux 啟動流程學習

基礎知識

Linux 啟動流程學習

開機自檢(加載BIOS)

無論什麽機器,在開機後都要進行通電自檢(硬件),如果硬件有問題,則無法繼續下去。
(例如當內存條松動時或者損壞,就會發出嘀嘀嘀警報聲)。接著開始加載BIOS(Basic Input Output System
BIOS是一個寫入到主板上的一個軟件程序。BIOS會去分析計算機裏面有哪些存儲設備,
從默認的第一啟動項開始啟動。

MBR與boot loader

接下來BIOS將程序啟動的下一步交給了MBR,他會去讀取第一個扇區的MBR位置。
由於不同的操作系統的文件系統格式不相同,因此我們必須要一個引導裝載程序來處理文件加載的問題,
也就是BootLoader,而這個BootLoader就安裝在啟動設備的第一個扇區,也就是MBR(主引導分區)

step1:boot loader

boot loader 有如下功能:
    提供菜單:用戶可以選擇不同的啟動選項
    加載內核文件:直接指向可啟動的程序區段來開始操作系統
    轉交其他loader:將引導裝載功能轉交給其他loader負責

boot loader程序 有多個版本

    在linux中有 早期的LILO 和現在使用較多的 grub
    在windows中有 ntloader

step1.5:/dev/sda1

/dev/sda1 通常是開機後的/boot 操作系統起來之後作用很小 可能我們很少註意到這個分區
技術分享圖片
但其實這個分區是開機時的根目錄 裏面存放著很多重要的開機所需要的文件 grub vmlinuz 內核等

根目錄會在開機之後再次掛載 也就是開機之後我們能看到的/dev/sda2分區
技術分享圖片
這個分區有一個比較有意思的情況 這時我們沒有加載文件系統加載模塊 也就是不能夠掛載 那麽我們為什麽能夠訪問到 /boot分區呢
hexdump -C -n 5120 /dev/sda 這條命令可以看到裏面有grub信息 表明了他的掛載載不需要模塊的幫助
(ps:這裏說掛載不太準確 ,說成 可以直接訪問更貼切)
技術分享圖片

step2: initramfs-.*.img

包含有各種可執行程序和驅動程序,這些驅動程序中包括 即將加載的真正的文件系統的存儲介質的驅動

技術分享圖片
技術分享圖片
技術分享圖片
到了這一步 有了ext4模塊就可以加載文件系統了

/boot下有一個grub. conf配置文件

技術分享圖片

技術分享圖片

default 0 表示默認啟動第一個選項  也就是可以有多個內核可供選擇
timeout 表示等待多長時間以後系統自動選擇默認選項啟動
splashiamge 是定義了一個開機啟動時的背景圖 可以自定義
title 分隔開了每一個內核:
    root (hd0,0) 表示當前根為 第一個磁盤的第一個分區
    kernel 表示當前內核 rhgb表示系統默認啟動以圖形化界面開啟 quiet  只顯示重要信息 安靜模式
    initrd 表示啟動系統映像文件名稱

這裏還有一個執行順序問題需要註意:

    是先執行initrd 有了文件系統加載模塊 再去交給kernel的 因為你可以看到在配置文件裏有了
    /dev的產生 如果沒有文件系統的加載 是無法掛載和有這個名稱的

關於 initrd 和 initramfs 的區別
技術分享圖片

Kernel

關於kernel我了解的較少 ,只是知道他的作用就是加載一些硬件驅動程序,最終釋放虛擬文件系統
,並掛載實際的目錄文件系統,從而開始後續的正常啟動流程。

init

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

以CentOS 5為例:
技術分享圖片

/etc/initab 
每一行的定義方式:
    id:runlevel:action:process
        action : 
            wait :切換至次級別運行一次
            respawn:此進程終止 就重新啟動
            initdefault:設定默認運行級別 
            sysinit:設定系統初始化方式 

技術分享圖片
技術分享圖片
技術分享圖片
切換到對應的運行等級時如果為K開頭的進程 就關閉掉對應的服務 如果為S開頭的 就開啟對應的服務

啟動流程總結

step1:加載BIOS的硬件信息和自檢 根據設置啟動所選設備
step2:讀取並執行所選設備內MBR裏的boot loader
step3:根據boot loader加載kernel kernel 檢測硬件預加載驅動程序
step4:kernel調用init init會取得run-level信息
step5:執行/etc/rc.d/rc.sysinit文件來準備軟件執行的操作環境
step6:執行run-lebvel的各個服務啟動
step7:執行/etc/rc.d/rc.local文件
step8:執行終端機模擬程序來啟動login進程 最後等待用戶登錄

Linux 啟動流程學習