Linux的系統啟動流程,boot loader,init
系統啟動流程
以debian6為例
1 加載BIOS的硬件信息與進行自我測試,並取得啟動設備(如硬盤、光盤、閃存)
2 讀取並執行啟動設備內MBR的boot loader(如grub等)
3 依據boot loader的設定加載kernel,kernel開始偵測硬件並加在驅動程序
4 硬件驅動成功後,kernel會主動呼叫init程序,而init會取得run-level信息
5 init執行/etc/init.d/rc腳本來准備軟件執行的工作環境(如網絡、時區等)
6 init執行run-level的各個服務之啟動(scipt方式)
7 init執行/etc/rc.d/rc.local文件
8 init執行終端機啟動login程序,等待用戶登錄
boot loader
1 每個硬盤的MBR只有一個
2 每個文件系統(filesystem,或者是partition)都會保留一塊啟動扇區(boot sector)
3 每個操作系統默認會安裝boot loader到他自己的文件系統的boot sector中
4 boot loader可以安裝在MBR中,boot loader也可以安裝在boot sector中
5 boot loader可以將管理權轉交給其他的boot loader
init初始程序及其配置文件/etc/inittab
/sbin/init最主要的功能就是准備軟件執行的環境,包括系統主機名、網絡設定、語系處理、文件系統格式即其他服務的啟動
/etc/inittab是/sbin/init的配置文件,此配置文件類似script,需要一步一步執行
init處理流程,也就是/etc/inittab執行步驟
1 設置默認的runlevel id:2:initdefault:
2 系統啟動初始化腳本 si::sysinit:/etc/init.d/rcS
3 運行runlevel為2的腳本 l2:2:wait:/etc/init.d/rc 2
4 設置ctrl+alt+del組合進行重啟 ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
5 設置電源管理 pf::powerwait:/etc/init.d/powerfail start
6 啟動終端tty1 1:2345:respawn:/sbin/getty 38400 tty1
步驟詳細分析
1 上表第2步調用rsS其實是調用/etc/init.d/rc S,
上表第3步也是同樣調用/etc/init.d/rc 2
2 查看/etc/init.d/rc腳本,此腳本根據參數runlevel調用相應runlevel的腳本
相應runlevel的腳本的路徑為/etc/rc$runlevel.d/
3 /etc/rc$runlevel.d/路徑下腳本被依次執行,啟動或關閉相應的服務
/etc/rc$runlevel.d/S* 需要開啟的服務
/etc/rc$runlevel.d/K* 需要關閉的服務
4 /etc/init.d/rc.local腳本在/etc/rc$runlevel.d/路徑下最後執行
/etc/init.d/rc.local腳本為用戶自定義系統啟動腳本
/etc/inittab主要語法
/etc/inittab由:(冒號)來分隔成4部分
1 id。最多4個字符,代表init的主要工作,只是簡單說明
2 runlevel。代表該初始化動作在哪些runlevel下運行
3 action。代表初始化的特別動作
4 process。代表需要進行的命令,通常是一些script
更詳細的可參考man inittab
action初始化特別動作
initdefault 代表預設的runlevel設定值
sysinit 代表系統初始化的動作
ctrlaltdel 代表按下這3個按鍵是否可以重啟
wait 代表後面的process命令必須執行完畢才能繼續
respawn
代表後面的process命令可以無限制的再生。
例如getty啟動login,注銷後,此動作還會啟動login
runlevel執行等級
runlevel作用就是規定系統使用不同的服務來啟動,根據目的設置相應的工作環境
不同版本的linux還需要查看/etc/inittab
0 halt 系統直接關機
1 single-user 單人維護模式,用在系統出問題時的維護
2 multi-user without NFS 多用戶文本模式,無NFS服務
3 full multi-user 完整含有網絡功能的多用戶純文本模式
4 unused 系統保留
5 X11 多用戶圖形界面,加載使用X Window
6 reboot 重啟
相關文件
/boot/vmlinuz-$(uname -r) linux核心文件
/boot/initrd-$(uname -r) 啟動時虛擬文件系統
/boot/grub/* boot loader程序
/etc/inittab init配置文件
/etc/init.d/rc 初始化系統啟動腳本
/etc/rc$runlevel.d/* 相應runlevel系統啟動腳本
/etc/init.d/rc.local 用戶自定義系統啟動腳本