2009年1月13日 星期二

init 處理系統初始化流程 (/etc/rc.d/rc.sysinit)

還記得上面提到 /etc/inittab 裡頭有這一句『 si::sysinit:/etc/rc.d/rc.sysinit 』吧? 這表示:『我開始載入各項系統服務之前,得先做好整個系統環境,我主要利用 /etc/rc.d/rc.sysinit 這個 shell script 來設定好我的系統環境的。』夠清楚了吧? 所以,我想要知道到底 FC4 開機的過程當中幫我進行了什麼動作, 就得要仔細的分析 /etc/rc.d/rc.sysinit 囉。
Tips:
老實說,這個檔案的檔名在各不同的 distributions 當中都不相同, 例如 SuSE server 9 就使用 /etc/init.d/boot 與 /etc/init.d/rc 來進行的。 所以,你最好還是自行到該檔案去察看一下系統的工作喔! ^_^
鳥哥的圖示
/etc/rc.d/rc.sysinit 主要的工作大抵有這幾項:
  1. 取得網路環境與主機類型:
    首先讀取網路設定檔 /etc/sysconfig/network ,取得主機名稱與預設通訊閘 (gateway) 等網路環境。
  2. 測試與掛載記憶體裝置 /proc 及 USB 裝置 /sys:
    除掛載記憶體裝置 /proc 之外,還會主動偵測系統上是否具有 usb 的裝置, 若有則會主動載入 usb 的驅動程式,並且嘗試掛載 usb 的檔案系統。
  3. 決定是否啟動 SELinux :
    近期以來,很多 distributions 都加入了美國國家安全局發展的 Security Enhance Linux 套件, 這個 SELinux 可以更加強化 Linux 操作環境的安全性,不過,由於安全掛帥, 對於新手來說,不是很容易上手。因此,我們才會建議大家先不要啟動啊。無論如何, 在這個階段我們可以分析 SELinux 是否要啟動。
  4. 周邊設備的偵測與 Plug and Play (PnP) 參數的測試:
    根據核心在開機時偵測的結果 (/proc/sys/kernel/modprobe ) 開始進行 ide / scsi / 網路 / 音效 等周邊設備的偵測,以及利用以載入的核心模組進行 PnP 裝置的參數測試。
  5. 使用者自訂模組的載入
    使用者可以在 /etc/sysconfig/modules/*.modules 加入自訂的模組, 則此時會被載入到系統當中喔!
  6. 載入核心的相關設定:
    系統會主動去讀取 /etc/sysctl.conf 這個檔案的設定值,使核心功能成為我們想要的樣子。
  7. 設定系統時間 (clock):
  8. 設定終端機 (console) 字形:
  9. 設定 RAID 與 LVM 等硬碟功能:
  10. 以 fsck 檢驗磁碟檔案系統:
  11. 進行磁碟配額 quota 的轉換 (非必要):
  12. 重新以可讀取模式掛載系統磁碟:
  13. 啟動 quota 功能:
  14. 啟動系統亂數裝置 (產生亂數功能):
  15. 清除開機過程當中的暫存檔案:
  16. 將開機相關資訊載入 /var/log/dmesg 檔案中。
如此一來,在 /etc/rc.d/rc.sysinit 就已經將基本的系統設定資料都寫好了,也將系統的資料設定完整! 而如果你想要知道到底開機的過程中發生了什麼事情呢?那麼就使用 dmesg 就可以知道囉。 另外,基本上,在這個檔案當中所進行的很多工作的預設設定檔,其實都在 /etc/sysconfig 當中呢! 所以,請記得將 /etc/sysconfig 內的檔案好好的瞧一瞧喔! ^_^

在這個過程當中,比較值得注意的是自訂模組的載入!在 FC4 當中,如果我們想要載入核心模組的話, 可以將整個模組寫入到 /etc/sysconfig/modules/*.modules 當中,在該目錄下, 只要記得檔名最後是以 .modules 結尾即可。 這個過程是非必要的,因為我們目前的預設模組實在已經很夠用了,除非是您的主機硬體實在太新了, 非要自己載入新的模組不可,否則,在經過 /etc/rc.d/rc.sysinit 的處理後, 你的主機系統應該是已經跑得很順暢了啦!就等著你將系統相關的服務與網路服務啟動囉!