Linux 啟動流程

2021-08-08 19:58:45 字數 2905 閱讀 8231

以centos6.9為例,系統啟動流程如下

post --> boot sequence(bios)-->bootloader --> grub --> kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 設定預設執行級別 --> 系統初始化指令碼rc.sysinit --> 關閉或啟動對應級別的服務 --> 啟動終端

1.加電自檢post(power on self test)

主機加電開機後,首先進行硬體自檢。主機通電後,主機板會自動讀取rom中的程式,並從cmos中載入bios資訊,負責完成對cpu、主機板、記憶體、硬碟子系統、顯示子系統、串並行介面、鍵盤、cd-rom光碟機等硬體情況的檢測。如遇到硬體故障的話將按兩種情況進行處理:對於嚴重故障(致命性故障)則直接停機,此時由於各種初始化操作未完成,不能給出任何提示或訊號;對於非嚴重故障,則會給出相應的提示或聲音報警訊號,等待使用者處理。如果沒有遇到故障,則加電自檢通過,將後續工作交接給bios處理。

2.啟動順序boot sequence

post完成後,系統控制權轉交到bios,bios通過預設的引數識別基礎硬體裝置,啟動硬體初始化;同時按照系統啟動順序依次查詢各引導裝置,第乙個有引導程式的裝置即為本次啟動用到裝置(一般為本地硬碟)。bios完成相關工作後,將後續工作交接給mbr中的bootloader處理。

3.啟動載入bootloader

硬碟上第0頭0道第1扇區被稱為mbr(master boot record),即主引導記錄。雖然mbr僅有512個位元組,但卻存放了前446個位元組的啟動載入器(bootloader,其中裝有grub)、中間64個位元組的磁碟分割槽表(disk partition table)以及最後2個位元組的結束標識(magic number)。啟動裝置讀取mbr中前個446位元組的bootloader尋找grub,接著讀取mbr後的扇區來識別磁碟分割槽表dpt以及核心kernel所在的區域,最後啟動grub。        

4.引導載入器grub(grand uniform bootloader)

第1階段(stage 1)

讀取磁碟裝置上第0頭0道第1扇區的mbr;用來載入第2階段, 只存放了bootloader的部分**

第1.5階段(stage 1.5)

讀取mbr之後的扇區,讓第1階段中的bootloader能夠識別到第2階段所在分割槽上的檔案系統

第2階段(stage 2)

找到grub的配置檔案(/boot/grub/grub.conf <-- /etc/grub.conf或/boot/grub2/grub.cfg),並根據其中的預設內容給使用者提供乙個可選擇的選單,用於選擇想要啟動的系統或核心版本。同時stage2即/boot/目錄下還提供了linux系統核心檔案(vmlinuz檔案)和虛擬檔案系統檔案(initramfs)等其它核心檔案。

最後,grub把使用者選定的啟動系統或核心裝載到記憶體中的特定空間中解壓、展開,並把系統控制權移交給核心kernel。

5.載入kernel

自身初始化        

探測可識別到的所有硬體裝置;

載入硬體驅動程式(有可能會借助於ramdisk載入驅動);

以唯讀方式掛載根檔案系統rootfs;

切換至根檔案系統switchroot;

執行使用者空間的第乙個應用程式:/sbin/init

至此,核心初始化完成,後續任務交給使用者空間程式,只在模式切換或系統發生中斷時,核心才會參與。

6.初始化init

/sbin/init最主要的功能就是準備系統執行環境,包括系統的主機名稱、網路配置、語系處理、檔案系統格式及其他服務的啟動等

init程式的型別:

centos 5:sysv init

配置檔案:/etc/inittab

centos 6:upstart init

配置檔案:/etc/inittab, /etc/init/*.conf

centos 7:systemd systemd

配置檔案:/usr/lib/systemd/system, /etc/systemd/system

7.配置檔案/etc/inittab,設定預設執行級別

執行級別:為了系統的執行或維護等應用目的而設定;

0-6:7個級別

0:關機

1:單使用者模式(root, 無須登入), single, 維護模式;

2: 多使用者模式,會啟動網路功能,但不會啟動nfs;維護模式;

3:多使用者模式,正常模式;文字介面;

4:預留級別;可同3級別;

5:多使用者模式,正常模式;圖形介面;

6:重啟

8.配置檔案/etc/rc.d/rc.sysinit,執行系統初始化指令碼,完成系統初始化

(1) 設定主機名;    

(2) 設定歡迎資訊;    

(3) 啟用udev和selinux;     

(4) 掛載/etc/fstab檔案中定義的檔案系統;    

(5) 檢測根檔案系統,並以讀寫方式重新掛載根檔案系統;    

(6) 設定系統時鐘;    

(7) 啟用swap裝置;    

(8) 根據/etc/sysctl.conf檔案設定核心引數;    

(9) 啟用lvm及software raid裝置;    

(10) 載入額外裝置的驅動程式;    

(11) 清理操作;

9.對應指令碼程式,關閉需要關閉的服務,啟動需要啟動服務 

根據執行級別的不同,系統會執行/etc/rc.d/rc0.d到/etc/rc.d/rc6.d中的響應的指令碼程式,來完成相應服務的關閉和啟動,並執行使用者自定義開機啟動程式指令碼/etc/rc.d/rc.local。

10.配置檔案/sbin/mingetty,設定啟動終端

mingetty會呼叫/etc/login程式,登入成功後,整個系統啟動流程完成。

linux啟動流程

linux系統主要通過以下步驟啟動 讀取mbr的資訊,啟動boot manager windows使用ntldr作為boot manager,如果您的系統中安裝多個版本的windows,您就需要在ntldr中選擇您要進入的系統。linux通常使用功能強大,配置靈活的grub作為boot manage...

linux啟動流程

bios basic input output system mbr main boot record kernel kernel自解壓 核心初始化 核心啟動 start kernel 自身為0 程序,建立1 程序執行,直接執行在物理記憶體空間上,沒有虛位址。1 程序裝入並執行程式 sbin ini...

Linux啟動流程

下面簡單介紹下啟動,詳細的後續再補。1.載入bios的硬體資訊並進行自我測試,並依據設定取得第乙個可以啟動的裝置 2.讀取並執行第乙個裝置內的mbr master boot record,硬碟的主引導記錄 的boot loader 即是grub,spfdisk等程式 3.依據boot loader的...