Linux(CentOS)系統啟動過程大致按照如下順序:
POST –> BootSequence(BIOS) –>Bootloader(MBR) –>Kernel(ramdisk)–>rootfs(readonly)–>switchroot–>/sbin/init(設置默認運行級別–>運行系統初始化腳本,完成系統初始化–>關閉對應級別下需要停止的服務,啟動對應級別下需要開啟的服務–>設置登陸終端[啟動圖形界面])
1)加電自檢(POST),BIOS啟動引導階段;
在該過程中實現硬件的初始化以及查找啟動介質;
從MBR中裝載啟動引導管理器(GRUB)并運行該啟動引導管理;
MBR才512bytes,所以現在很多都用UEFI,GPT方式咯
2)GRUB(Grand Uniform Bootloader)啟動引導階段;
功能:提供一個菜單,允許用戶要選擇啟動的不同系統或內核版本,把其內核加載到RAM中的特定空間,解壓、展開,讓后控制權移交給kernel
裝載stage1
裝載stage1.5
裝載stage2(因為MBR很小,所以這里沒有限制哦)
讀取/boot/grub.conf文件并顯示啟動菜單;
裝載所選的kernel和initrd文件到內存中
PS:LILO:支持柱面1024,現在基本都用在android手機,不用再PC機了
3)內核階段:
探測可識別到所有硬件設備
加載各種硬件驅動程序;(有可能會借助于randisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序:/sbin/init
ps: ramdisk:Linux 內核特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問:
ramdisk –> ramfs
initramfs — dracut,mkinitrd (CenetOS6,7
4)init用戶空間初始化階段:
啟動/sbin/init程序;
運行rc.sysinit腳本,設置系統環境,啟動swap分區,檢查和掛載文件系統;
讀取/etc/inittab文件,運行在/et/rc.d/rc<#>.d中定義的不同運行級別的服務初始化腳本;
打開字符終端1-6號控制臺/打開圖形顯示管理,設置登錄
init程序:
CentOS 5 : /ect/inittab
CentOS 6 :Upstart
/etc/inittab:這個文件已廢
/etc/init/*.conf,
CentOS 7 : systemd
配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
http://1992tao.blog.51cto.com/11606804/1852322
原創文章,作者:不忘初衷,如若轉載,請注明出處:http://www.www58058.com/67262