首頁  >  文章  >  系統教程  >  解析Linux系統啟動的引導流程

解析Linux系統啟動的引導流程

PHPz
PHPz轉載
2024-02-13 11:18:141140瀏覽

Linux系統是一種廣泛使用的開源作業系統,它擁有強大的功能和靈活的配置。但是,你是否想過,當你按下電源按鈕,Linux系統是如何從一片黑暗中逐步啟動起來的呢? Linux系統啟動的開機流程是一個複雜而精妙的過程,它涉及硬體、韌體、開機載入器、核心和用戶空間等多個層次和元件。本文將詳細解析Linux系統啟動的開機流程,包括BIOS、MBR、GRUB、initrd、init等面向。

以下以CentOS5.5版本為例,介紹LINUX的引導流程,具體流程如下:

解析Linux系統啟動的引導流程

下面詳細介紹每一步:

1)第一步firmware韌體自檢,主要是進行CMOS/BIOS對硬體進行POST加電自檢,在物理層次上對硬體進行偵測是否正常。例如檢查硬碟是否插好等。
2)第二步驟讀取硬碟中MBR的BootLoader,自啟動程序,Linux下常用的自啟動程序是GRUB。這一步主要的功能是載入核心。核心存放在/boot目錄下
3)第三步就是載入的內核Kernel的過程,
主要功能是:1、驅動硬件,Kernel中含有大量驅動程式。 2、啟動init進程。
4)init進程,主要是讀取/etc/inittab文件,執行缺省運行級別,從而繼續引導。需要注意的是init京城的PID恆為1,是所有行程的父行程,而init行程的負景程是0,為核心調度器Kernel scheduler。
5)/etc/inittab 定義了初始化的操作。
解析Linux系統啟動的引導流程

#指令主要格式是:id: runlevels : action : process
其中,如上圖紅框所示
1.run-levels運行等級有7個,0—6分別如下:
0 —— halt 關機
1 —— Single user mode 單一用戶模式
2 —— Multiuser,withoutNFS 多用戶模式但不含網路(text模式)
3 —— Full multiuser mode 完整功能的多用戶模式(text模式)
4 —— unused 預留
5 —— X11 圖形化多用戶模式
6 —— reboot 重啟
可以根據這7個運行等級來進行切換
指令為:查看目前運行等級 #runlevel、 切換運行等級 #init[0 |1 |2 |3 |4 |5 |6]

2、而acion中也有幾個比較重要的取值:

1 initdefault:指定係統缺省啟動的運行等級,如上圖中標出,通常用於修復,例如我們要進入單一使用者模式,則可以將其設為1,不可將預設設為0或6,否則無法啟動.

2sysinit:系統啟動執行process中指定的指令
解析Linux系統啟動的引導流程

由inittab檔案內容可以看出,沒有設定運行級別,即為無論是哪個運行級別,都會執行/etc/rc.d/rc.sysinit

6)initdefault,如第五步所說到的,主要是讀取/etc/inittab中的信息,判斷缺省的運行級別是什麼。
7)/etc/rc.d/rc.sysinit
在inittab檔案中運行到第21行,變是啟動這個腳本。完成系統服務程序的啟動,如係統環境變數的設定、設定係統時鐘、載入字體、檢查載入檔案系統、生成系統啟動資訊日誌檔案等。由於是基礎服務,因為其run-level設定為空::即任何級別,action設定為sysinit。即該腳本在任何運行等級下都要啟動,以完成基礎服務的啟動
8)基礎服務啟動後,會執行/etc/rc.d/rc這個腳本
載入完基礎服務後,就要根據不同的運作等級去啟動相對應的下的目錄,它的工作原理是先去判斷系統的預設運作等級即第6步驟中的東西,然後再執行對應的rcN. d目錄下的服務啟動腳本如圖
解析Linux系統啟動的引導流程

#9)執行/etc/rc.d/rcN.d目錄下的服務啟動腳本

看下該目錄下的內容:
解析Linux系統啟動的引導流程

其中S表示要啟動的腳本,K表示要關閉的腳本
數字表示啟動順序,數值小的優先.主要是對一些服務的管理
在這一步裡,需要說明一下/etc/rc.d/init.d這個目錄,這個目錄裡放的腳本是真正的腳本,而rcN.d裡放置的都是init.d目錄裡的軟連接,也就是說所有rcN.d裡的檔案最終都需要來init.d裡找真正的腳本
看一下具體細節:
解析Linux系統啟動的引導流程

解析Linux系統啟動的引導流程

執行到這一步驟,介面就會提示輸入使用者名稱和密碼了,也就是說系統已經起來了,輸入使用者名稱和密碼的過程後面再說,這次的引導流程就結束了

最後需要說明的是,LINUX的引導流程的思想大致相同,但細節因為版本的問題,在配置文件的名字或者是位置都不盡相同,此次我用的是CentOS版本,而Ubuntu版本是沒有inittab檔和grup.conf檔的,所以如果有興趣,大家可以按照這種思路去探索探索.

PS:關於GRUB

#GNU GRUB(簡稱「GRUB」)是一個來自GNU計畫的啟動引導程式。 GRUB是多啟動規範的實現,它允許使用者可以在電腦內同時擁有多個作業系統,並在電腦啟動時選擇希望運行的作業系統。 GRUB可用於選擇作業系統分割區上的不同內核,也可用於傳遞啟動參數至這些內核。

GNU GRUB的前身為Grand Unified Bootloader。它主要用於類別Unix系統;和大多數Linux發行版一樣,GNU系統也採用GNU GRUB作為它的啟動器。 Solaris從10 1/06版開始在x86系統上也採用GNU GRUB作為啟動器。

GRUB可動態配置;它在啟動時載入配置訊息,並允許在啟動時修改,例如選擇不同的核心和initrd。為此目的,GRUB提供了一個簡單的類似Bash的命令列介面,它允許使用者編寫新的啟動順序。

GRUB非常輕。它支援多種可執行格式;它除了可適用於支援多啟動的作業系統外,還透過鍊式啟動功能支援諸如Windows和OS/2之類的不支援多啟動的作業系統。 GRUB支援所有的Unix檔案系統,也支援Windows適用的FAT和NTFS檔案系統,也支援LBA模式。 GRUB允許使用者查看它支援的檔案系統裡檔案的內容。

GRUB具有多種使用者介面。多數Linux發行版利用GRUB對圖形介面的支持,提供了客製化的背景圖案的啟動選單,有時也支援滑鼠。透過GRUB的文字介面的設定,可以透過串列埠實現遠端終端啟動。

GRUB可以從網路上下載作業系統鏡像,因此可以支援無磁碟系統。 GRUB支援在啟動作業系統前解壓縮它的鏡像。

與其它啟動器不同,GRUB可以透過GRUB提示字元直接與使用者互動。載入作業系統前,在GRUB文字模式畫面下鍵入c鍵可以進入GRUB命令列。在沒有作業系統或有作業系統而沒有”menu.lst”文件的系統上,同樣可以進入GRUB提示符號。透過類似bash的指令,GRUB提示字元允許使用者手工啟動任何作業系統。把適當的指令記錄在”menu.lst”檔案裡,可以自動啟動一個作業系統。

GRUB擁有豐富的終端命令,在命令列下使用這些命令,用戶可以查看硬碟分區的細節,修改分區設置,臨時重新映射磁碟順序,從任何用戶定義的配置文件啟動,以及查看GRUB所支持的檔案系統上的其它啟動器的配置。因此,即便不知道一台電腦上安裝了什麼,也可以從外部設備啟動一個作業系統。

GRUB採用捲動畫面選擇想要啟動的作業系統。透過在”menu.lst”文件中添加相關信息,GRUB可以控制150或更多的啟動選項,在啟動時用方向鍵進行選擇。

透過鍊式啟動,一個啟動器可以啟動另一個啟動器。 GRUB透過2到3行的指令就可以從DOS、Windows、Linux、BSD和Solaris系統啟動。

儘管GRUB為類別Unix系統進行了編譯和打包,但也有供DOS和Windows使用的GRUB。 GRUB也可以不附帶任何作業系統而作為孤立系統安裝。從CD上啟動時運用GRUB需要1個文件,而從軟碟、硬碟和USB裝置上啟動時需要2個文件。這些檔案可以在任何支援GRUB的Linux CD上找到,使用者可以輕鬆的找到它們。

本文詳細解析了Linux系統啟動的開機流程,包括BIOS、MBR、GRUB、initrd、init等面向。透過了解和掌握這些知識,我們可以更好地理解Linux系統的內部運作原理,從而更好地使用和優化Linux系統。當然,Linux系統啟動的引導流程還有很多細節和變化,需要我們不斷學習和探索。

以上是解析Linux系統啟動的引導流程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:lxlinux.net。如有侵權,請聯絡admin@php.cn刪除