Linux啓動過程分析

linux系統開就流程

cpu加電自檢:power on system test(POST
按照BIOS中的boot sequence讀取磁盤MBR
BIOS中的信息存儲在主板的CMOS存儲芯片中,系統加電後會讀取其中各項數據,包括系統啓動後加載硬盤的順序。
加載硬盤MBR中的boot loader
磁盤的每個扇區爲512字節,每個磁盤的第一個扇區爲磁盤的MBR,MBR中前446字節記錄的是bootloader,bootloader中安裝的是grub的stage1,用於指向grub主程序咋磁盤中的位置。開機加電之後,BIOS按照boot sequence找到對應磁盤,然後搜索該磁盤的MBR。
找到位於基本磁盤分區的grub程序,即進入stage2階段,按照grub.conf配置文件對kernel以及initrd進行引導加載。

initrd解壓後在內存中啓動引導根目錄所在的磁盤進行只讀掛載
內核在grub的引導下解壓載入內存,內核隨即進行硬件探測、驅動程序初始化,然後引導initrd解壓載入,initrd其實就是一個小型的linux系統它的作用是將在lvm或raid上根文件系統進行只讀性掛載。

運行/sbin/init對系統進行初始化
根文件系統掛載之後,運行/sbin/init程序進行初始化。初始化過程按照其對應配置文件/etc/inittab進行。
/etc/inittab中的配置信息:
格式:
id:runlevel:action:process
id:標示符
runlevel:運行級別
action:對應運行級別所進行的操作
process:執行的命令
action的分類詳解:
respawn:表示init程序對此process進行監控,即使此進程被終止也立即被啓動;
wait:表示init進程只調用一次此process,並等待其結束後再進行下一步操作;
initdefault:表示系統運行後默認進入的運行級別;由於進入某個級別會默認開始執行對應級別的各種進程,故此處不定義process,如果此條記錄不存在,在系統啓動時會提示用戶鍵入運行級別;
sysinit:系統啓動時準備運行的命令,此命令直接指向系統啓動後運行的第一個初始化腳本/etc/rc.d/rc.sysinint;
powerfail:表示當電源被切斷後(有ups時)運行後面的process;
powerokwait:當電源監測發現電源恢復則執行後面的process;
ctrlaltdel:控制這三個組合鍵的功能;

rc.sysinit腳本實現功能介紹:
在init確定默認級別後即運行此初始化腳本,它的作用主要有以下幾條:

n 激活udev和selinux;

n 通過讀取/etc/sysctl.conf設置內核參數

n 設置系統時間

n 加載鍵盤映射

n 啓用swap分區

n 設置主機名

n 檢查根文件系統,並以讀寫方式重新掛載根文件系統

n 激活LVM和RAID設備

n 啓動磁盤限額

n 掛載其他文件系統

n 清理過期文件鎖和PID文件

/etc/rc.d/rc.sysinit這個腳本運行完畢,繼續按照/etc/inittab中繼續開啓對應運行級別中的服務,這些服務有inittab中:
l0:0:wait:/etc/rc.d/rc 0    

l1:1:wait:/etc/rc.d/rc 1    

l2:2:wait:/etc/rc.d/rc 2    

l3:3:wait:/etc/rc.d/rc 3    

l4:4:wait:/etc/rc.d/rc 4    

l5:5:wait:/etc/rc.d/rc 5    

l6:6:wait:/etc/rc.d/rc 6


來定義,對應的rc0~6目錄中是各需要開啓服務的鏈接文件,S開頭表示開啓,K開頭表示關閉。
所有服務開啓之後,將執行respawn控制的進程:開啓控制檯。
開啓對應運行級別的控制檯,並始終監控控制檯進程,一旦關閉將立即被開啓。





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