1. 程式人生 > >Linux系統啟動流程

Linux系統啟動流程

linux系統啟動流程

Linux系統啟動流程

技術分享

Linux系統啟動流程圖

1、加電自檢

上電自檢POST,主要負責檢測系統外圍關鍵設備(如:CPU、內存、顯卡、I/O、鍵盤鼠標等)是否正常, 自檢完成後從BIOS中設置的系統啟動順序來搜索用於啟動系統的驅動器

2、grub引導

(1)grub引導第一階段(stage1):運行Boot Loader主程序,這個主程序必須被安裝在啟動區,即MBR(即硬盤的0磁道0扇區)。因為MBR空間有限,因此在MBR當中僅安裝Boot Loader的最小主程序,並沒有Boot Loader的相關配置文件。

(2)grub引導第二階段(stage1.5):在MBR隨後的扇區中存放,主要用於與stage2所在分區的文件系統交互。

(3)grub引導第三階段(stage2):通過Boot Loader加載所有配置文件及相關的環境變量參數信息,這些配置文件及相關的環境變量參數都存放在磁盤分區的/boot/grub目錄下(如果系統grub沒有被修復過,此目錄下除grub.conf文件外,其他文件都是非必須的)。如下圖所示

技術分享

/boot/grub目錄下配置文件

主要的配置文件grub.conf及相關說明:

技術分享

grub.conf的配置

1)default=0(第十行):表示默認的啟動條目,0表示第一個title系統

2)timeout=5(十一行):表示可供選擇的等待時間,在等待時間內如果按下任意鍵,則會進入啟動條目的選擇界面,如果不按則按默認的啟動條目啟動

3)splashimage=(hd0,0)/grub/splash.xpm.gz:定義的啟動時的背景圖片信息(可以修改)。(hd0,0)表示存放於第一塊磁盤的第一塊分區

4)hiddenmenu:啟動時是否顯示啟動菜單,默認在等待時間內不操作,是不顯示的,如果想要顯示,可以將此行註釋掉。

5)title CentOS 6(2.6.32-642.el6.x86_64):顯示啟動菜單的標題

6)root (hd0,0):表示內核文件存放的位置,這裏指定的是分區位置,而非根目錄。

7)16行內容:內核的名稱以及一些啟動時的核心參數,root=UUID=68b0f8ab-7ccc-4fc4-8bbc-a992f91e9847表示根目錄,由於啟動過程中需要掛載根目錄,因此就要指定根目錄所在的分區。

8)initrd:指定虛擬文件系統,主要通過此處的虛擬文件系統加載根目錄,掛載真正的根目錄。

3、加載內核

當BootLoader讀取內核文件以後,接下來就會將內核文件解壓後裝載到內存中,然後根據內核提供的功能開始測試與加載各個設備(如CPU、硬盤、網卡)。此時內核已經完全接管了BIOS的工作,所以,此處的檢測與加載內核是完全不同的。

但是此時的內核還沒加載到硬盤,無法去讀取系統上的內核文件;如果去掛載硬盤,由於硬盤的驅動程序都存在於硬盤上,無法去加載。所以此處通過虛擬文件系統/boot/initramfs來解決解決硬盤的掛載問題。

同樣,虛擬文件系統initramfs也是通過“Boot Loader”將其加載內存當中,然後虛擬文件也被加載到內存,然後此文件被解壓在內存中模擬一個根文件系統,這個根文件系統能夠模擬一個可以運行的程序,通過這個根文件系統去加載所需要的硬盤(包括RAID、LVM)驅動模塊,最後以只讀的方式去掛載真正的根目錄。掛載完成後通過/sbin/init來執行後續的正常啟動。

4、通過/sbin/init進程初始化系統

內核、硬件及驅動信息加載完成後,內核會呼叫控制的第一個執行程序/sbin/init,init程序主要功能就是準備軟件運行環境。

(1)先去獲取/etc/inittab中的系統運行級別

技術分享

系統的運行級別

系統的運行級別:

1)0:關閉所有的服務,關機

2)1:維護模式,單用戶模式,次級別允許root用戶直接登錄不需要認證。

3)2:維護模式,多用戶模式,會啟動網絡功能,但不支持NFS

4)3:正常級別,完全多用戶模式,文本界面。

5)4:預留級別

6)5:正常級別,完全多用戶模式,文本界面

7)6:關閉所有服務,重啟

(2)使用/etc/rc.d/rc.sysinit進行系統初始化

初始化動作:

1)根據配置文件中的設定來設置主機名,即讀取/etc/sysconfig/network文件中的HOSTNAME行

2)打印文本歡迎信息

3)激活selinux和udev

4)掛載所有定義在/etc/fstab文件中的文件系統

5)激活swap分區

6)檢測根文件系統,並實現以讀寫方式重新掛載。

7)設置系統時鐘

8)根據/etc/sysctl.conf文件設定內核參數的值

9)激活LVM和RAID設備

10)加載額外的設備驅動程序

11)清理操作

(3)對讀取到的運行級別下的服務進行操作(/etc/rc.d/rc.[runlevel])

通過/etc/rc.d/rc.sysinit初始化系統完成以後,此時,系統就已經順利開始工作了,但是需要啟動一些當前系統運行級別需要運行的服務。這裏就通過在/etc/inittab中所獲取的運行級別來操縱/etc/rc.d/rc[runlenel].d/目錄下的所有軟連接來啟動或關閉服務;所有以S開頭的,都被傳遞start參數以啟動,以K開頭的,都被傳遞stop參數以停止。

(4)啟動用戶自定義引導程序(/etc/rc.local)

運行用戶寫在/etc/rc.local中的命令

(5)啟動終端,調用用戶登錄文件

啟動終端,調用用戶登錄文件,如果是5級別,則啟動圖形化界面。


本文出自 “dayi123” 博客,請務必保留此出處http://dayi123.blog.51cto.com/12064061/1925189

Linux系統啟動流程