Linux服務器開機啟動流程順序:
通電-->BIOS-->主引導記錄(MBR)-->grub引導-->加載內核-->init進程-->讀取/etc/inittab(運行級別)-->/etc/init.d-->用戶登錄-->Login shell
1、開機BIOS自檢,檢查cpu,硬盤等硬件信息。
計算機在接通電源之后首先由BIOS進行自檢,即進行POST(Power On Self Test),然后依據BIOS內設置的引導順序從硬盤、軟盤或CDROM中讀入“引導塊”。 引導 Linux 是從 BIOS 中的地址 0xFFFF0 處開始的。BIOS 的第一個步驟是加電自檢(POST)。POST 的工作是對硬件進行檢測。BIOS 的第二個步驟是進行本地設備的枚舉和初始化。給定 BIOS 功能的不同用法之后,BIOS 由兩部分組成:POST 代碼和運行時服務。當 POST 完成之后,它被從內存中清理了出來,但是 BIOS 運行時服務依然保留在內存中,目標操作系統可以使用這些服務。
要引導一個操作系統,BIOS 運行時會按照 CMOS 的設置定義的順序來搜索處於活動狀態並且可以引導的設備。引導設備可以是軟盤、CD-ROM、硬盤上的某個分區、網絡上的某個設備,甚至是 USB 閃存。通常,Linux 都是從硬盤上引導的,其中主引導記錄(MBR)中包含主引導加載程序。MBR 是一個 512 字節大小的扇區,位於磁盤上的第一個扇區中(0 道 0 柱面 1 扇區)。當 MBR 被加載到 RAM 中之后,BIOS 就會將控制權交給 MBR。
2、讀取主引導記錄(MBR),進行MBR引導
眾所周知,硬盤上第 0 磁道第一個扇區被稱為 MBR,也就是 Master Boot Record,即主引導記錄,它的大小是 512 字節,存放了預啟動信息、分區表信息。系統找到 BIOS 所指定的硬盤的 MBR 后,就會將其復制到 0x7c00 地址所在的物理內存中。其實被復制到物理內存的內容就是 “引導加載器(Boot Loader)”,而具體到服務器,那就是 lilo 或者 grub了。
3、grub引導,確定加載某個操作系統。
引導加載器(Boot Loader) 就是在操作系統內核運行之前運行的一段小程序。通過這段小程序,可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,以便為最終調用操作系統內核做好一切准備。Boot Loader 有若干種,其中 Grub、Lilo 和 spfdisk 是常見的 Loader。我們以 Grub 為例來講解吧,畢竟用 lilo 和 spfdisk 的人並不多。系統讀取內存中的 grub 配置信息(一般為 menu.lst 或 grub.lst),並依照此配置信息來啟動不同的操作系統。
4、加載內核
根據 grub 設定的內核映像所在路徑,系統讀取內存映像,並進行解壓縮操作。系統將解壓后的內核放置在內存之中,並調用 start_kernel()函數來啟動一系列的初始化函數並初始化各種設備,完成 Linux 核心環境的建立。至此,Linux 內核已經建立起來了,基於 Linux 的程序應該可以正常運行了。
5、運行init進程
init進程是系統所有進程的起點,內核在完成核內引導以后,即在本線程(進程)空間內加載init程序,它的進程號是1。init進程是所有進程的發起 者和控制者。因為在任何基於Unix的系統(比如Linux)中,它都是第一個運行的進程,所以init進程的編號(Process ID,PID)永遠是1。如果init出現了問題,系統的其余部分也就隨之而垮掉了。
init進程有兩個作用。第一個作用是扮演終結父進程的角色。因為init進程永遠不會被終止,所以系統總是可以確信它的存在,並在必要的時候以它為參 照。如果某個進程在它衍生出來的全部子進程結束之前被終止,就會出現必須以init為參照的情況。此時那些失去了父進程的子進程就都會以init作為它們 的父進程。快速執行一下ps -af 命令,可以列出許多父進程ID(Parent Process ID,PPID)為1的進程來。
init的第二個角色是在進入某個特定的運行級別(Runlevel)時運行相應的程序,以此對各種運行級別進行管理。它的這個作用是由/etc/inittab文件定義的。
6、通過/etc/inittab文件進行初始化
init的工作是根據/etc/inittab來執行相應的腳本進行系統初始化,如設置鍵盤、字體, 裝載模塊,設置網絡,等等。