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中:
來定義,對應的rc0~6目錄中是各須要開啓服務的連接文件,S開頭表示開啓,K開頭表示關閉。 全部服務開啓以後,將執行respawn控制的進程:開啓控制檯。 開啓對應運行級別的控制檯,並始終監控控制檯進程,一旦關閉將當即被開啓。
歡迎關注本站公眾號,獲取更多信息