歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> 解析Linux系統啟動的引導流程

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

日期:2017/3/2 16:25:53   编辑:Linux服務器

  LINUX是自由開源軟件,在LINUX裡一切都是文件,不管是命令,操作等等都是以文件形式保存,這篇博客來記錄LINUX啟動時的引導流程是通過哪寫文件來完成的.

  使用的LINUX版本是CentOS5,CentOS和Ubuntu都是自己聯系使用時的較理想版本.

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

2016216120312292.png (500×367)

  下面詳細介紹每一步:

  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 定義了初始化的操作。

2016216120335483.png (538×238)

  命令主要格式是: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中指定的命令

2016216120358904.png (316×35)

  由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目錄下的服務啟動腳本如圖

2016216120419054.png (341×144)

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

  看下該目錄下的內容:

2016216120437630.png (671×247)

  其中S表示要啟動的腳本,K表示要關閉的腳本

  數字表示啟動順序,數值小的優先.主要是對一些服務的管理

  在這一步裡,需要說明一下/etc/rc.d/init.d這個目錄,這個目錄裡放的腳本是真正的腳本,而rcN.d裡放置的都是init.d目錄裡的軟連接,也就是說所有rcN.d裡的文件最終都需要來init.d裡找真正的腳本

  看一下具體細節:

2016216120456913.png (613×180)
2016216120516144.png (474×272)

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

  最後需要說明的是,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上找到,用戶可以很容易的找到它們。

Copyright © Linux教程網 All Rights Reserved