Sysvinit 的小結
Sysvinit 的優點是概念簡單。Service 開發人員只需要編寫啟動和停止指令碼,概念非常清楚;將 service 新增/刪除到某個 runlevel 時,只需要執行一些建立/刪除軟連線檔案的基本操作;這些都不需要學習額外的知識或特殊的定義語法(UpStart 和 Systemd 都需要使用者學習新的定義系統初始化行為的語言)。
其次,sysvinit 的另一個重要優點是確定的執行順序:指令碼嚴格按照啟動數字的大小順序執行,一個執行完畢再執行下一個,這非常有益於錯誤排查。UpStart 和 systemd 支援併發啟動,導致沒有人可以確定地瞭解具體的啟動順序,排錯不易。
但是序列地執行指令碼導致 sysvinit 執行效率較慢,在新的 IT 環境下,啟動快慢成為一個重要問題。此外動態裝置載入等 Linux 新特性也暴露出 sysvinit 設計的一些問題。針對這些問題,人們開始想辦法改進 sysvinit,以便加快啟動時間,並解決 sysvinit 自身的設計問題。
System V init啟動過程
概括地講,Linux/Unix系統一般有兩種不同的初始化啟動方式.
1) BSD system init
2) System V init
大多數發行套件的Linux使用了與System V init相仿的init也就是Sys V init,它比傳統的BSD system init更容易且更加靈活, System V init的主要思想是定義了不同的"執行級別(runlevel)". 通過配置檔案/etc/inittab定義了系統引導時的執行級別, 進入或者切換到一個執行級別時做什麼. 每個執行級別對應於一個子目錄/etc/rc.d/rc n.d.
以下是一個大致的System V init過程:
(1)init 過程執行的第一個指令碼是/etc/rc.d/rc.sysinit, (有疑問,按照鳥哥,/etc/rc.d/rc.sysinit 是由etc/inittab呼叫的,那自然第一個指令碼是inittab了,by imjacob)它主要做在各個執行級別中進行初始化工作,包括: 啟動交換分割槽;檢查磁碟;設定主機名;檢查並掛載檔案系統;載入並初始化硬體模組.
(2)執行預設的執行級別模式
這一步的內容主要在/etc/inittab中體現, inittab檔案會告訴init程式要進入什麼執行級別,以及在哪裡可以找到該執行級別的配置檔案.
(3)執行/etc/rc.d/rc.local指令碼檔案
這也是init過程中執行的最後一個指令碼檔案,所以使用者可以在這個檔案中新增一些需要在登入之前執行的命令.
(4)執行/bin/login程式