『壹』 Linux如何在系統啟動時自動載入模塊
為搞清楚如何在系統啟動時自動載入模塊,搜索了好久,網上有很多人提出這個問題,但都沒有正確的答案。大家的回答都沒有講到點子上,無非是圍繞modprobe.conf、modprobe講來講去的,要不就是針對特定問題嘗試不同的方法。有的還建議把modprobe molename寫入rc.local,卻不曾想rc.local的執行被放在整個啟動順序的很後面,而啟動init.d下面定義的服務卻在rc.local前面,那麼如果某個服務要用這個模塊,就不行了。 在測試LVS時,因為我的Fedora7的Kernel(2.6.21-1)預設沒有載入ip_vs模塊,而內核中已經包含編譯好的IPVS相關的模塊了,放在:/lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/下面,有: /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_dh.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_ftp.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lblc.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lc.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_nq.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_rr.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_sed.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_sh.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_wlc.ko /lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_wrr.ko 其中ip_vs.ko是IPVS的基本模塊,不載入IPVS就不能工作(運行ipvsadm會報錯的),而其他的都是IPVS的調度演算法或特定協議的輔助模塊,需要時則須載入。 要了解如何在系統啟動時自動載入模塊(Automatically load kernel moles),就得先了解系統是如何啟動的,啟動的過程中按什麼順序做了什麼,怎麼做的,這些啟動操作都有那些文件和腳本控制。整個開機流程是: (1) 載入BIOS的硬體信息,並取得第一個開機裝置的代號 (2)讀取第一個開機裝置的MBR的boot Loader (grub)的開機信息 (3)載入OS Kernel信息,解壓Kernel,嘗試驅動硬體 (4) Kernel執行init程序並獲得run-lebel信息(如3或5) (5) init執行/etc/rc.d/rc.sysinit (6)啟動內核外掛模塊(/etc/modprobe.conf) (7) init執行run-level的各種Scripts,啟動服務 (8) init執行/etc/rc.d/rc.local (9)執行/bin/login,等待用戶Login (10)Login後進入Shell看來正確的方式是把需要載入的模塊放在(5)或(6),我修改了/etc/rc.d/rc.sysinit就成功載入了。初步嘗試在rc.sysinit最後增加 modprobe.conf ip_vs,重啟後lsmod | grep ip_vs,發現成功自動載入了。於是仿效rc.sysinit中其他模塊的載入方法,擴展改腳本文件,在最後增加下來一段: # load LVS IPVS moles if [ -d /lib/moles/$unamer/kernel/net/ipv4/ipvs ]; then for mole in /lib/moles/$unamer/kernel/net/ipv4/ipvs/* ; do mole=${mole##*/} mole=${mole%.ko} modprobe $mole >/dev/null 2>&1 done fi就把/lib/moles/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/下的所有模塊都自動載入。