Linux 啓動流程

以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程序,登入成功後,整個系統啓動流程完成。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章