时间: 2021-07-31 作者:daque
底下是往日进修linux时写的,厥后提防接洽rc.sysinit后创造,只须要窜改下列场合就不妨了,不用这么烦恼的:
rc.sysinit中有如许的一段代码:
# load other user-defined modules
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
# load modules (for backward compatibility with vars)
if [ -f /etc/rc.modules ]; then
/etc/rc.modules
fi
看来只须要摆设两个场合的任何一个就不妨了(以加载fuse内核模块为例)
(1) 在/etc/sysconfig/modules/底下创造*.modules文献,参考仍旧有的*.modules文献,比方我写创造文献my.modules,实质为modprobe fuse
牢记结果chmod 755 my.modules
(2) 大概在/etc/rc.modules内里加上modprobe fuse,没有的话创造该文献。
而后reboot,lsmod | grep fuse考证一下就ok了。
==============
automatically load kernel modules:
为搞领会怎样在体例启用时机动加载模块,探求了长久,网上有很多人提出这个题目,但都没有精确的谜底,不管是华文社区仍旧英文社区,大师的回复都没有讲到点子上,无非是环绕modprobe.conf、modprobe讲来讲去的,要不即是对准一定题目试验各别的本领。有的还倡导把modprobe modulename写入rc.local,却未曾想,rc.local的实行被放在所有启用程序的很反面,而启用init.d底下设置的效劳却在rc.local前方,那么即使某个效劳要用这个模块,就不行了。
在尝试lvs时,由于我的fedora7的kernel(2.6.21-1)缺省没有加载ip_vs模块,而内核中仍旧包括编写翻译好的ipvs关系的模块了,放在:/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/底下,有:
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_dh.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_lc.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_nq.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_rr.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_sed.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_sh.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
个中ip_vs.ko是ipvs的基础模块,不加载ipvs就不许处事(运转ipvsadm会报错的),而其余的都是ipvs的安排算法或一定和议的扶助模块,须要时则须加载。
即使体例运转时手动加载则需:modprobe ip_vs 和modprobe ip_vs_sh等。
要领会怎样在体例启用时机动加载模块(automatically load kernel modules),就得先领会体例是如阿启用的,启用的进程中按什么程序做了什么,如何做的,那些启用操纵都有那些文献和剧本遏制。因为google和baidu出来的货色都处置不了题目,并且man modprobe和man modprobe.conf创造并不是须要窜改的文献。
所以复习鸟哥的linux.vbird.org/">http://linux.vbird.org/“开构造机过程与loader”:
1. 所有开机过程是
(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),但正如搜集上很多人的试验,窜改modprobe.conf都没有胜利(比方在modprobe.conf中减少install ip_vs...)。所以我窜改了/etc/rc.d/rc.sysinit就胜利加载了。
发端试验在rc.sysinit结果减少 modprobe.conf ip_vs,重启后lsmod | grep ip_vs,创造胜利机动加载了。
所以仿造rc.sysinit中其余模块的加载本领,扩充改剧本文献,在结果减少下来一段:
# load lvs ipvs modules
if [ -d /lib/modules/$unamer/kernel/net/ipv4/ipvs ]; then
for module in /lib/modules/$unamer/kernel/net/ipv4/ipvs/* ; do
module=${module##*/}
module=${module%.ko}
modprobe $module >/dev/null 2>&1
done
fi
就把/lib/modules/2.6.21-1.3194.fc7/kernel/net/ipv4/ipvs/下的一切模块都机动加载了。个中:
if语句查看ipvs模块的目次能否生存
for轮回遍历该目次底下的一切文献
module=${module##*/} :个中##表白从前方简略字符,*/表白简略到结果一个/,即使一个#就表白只简略到第一个/。即使变量反面接##,表白在##反面的字符串取最长的(从来到结果面),即使接#,表白取最小的一段。
module=${module%.ko}:表白从反面简略.ko。即使变量反面接%%,表白在%%反面的字符串取最长的(从来到最前方),即使接%,表白取最小的一段。
如许多module的两次窜改就获得了模块名,即是文献名不带路途和.ko后缀。
modprobe $module >/dev/null 2>&1:加载模块,输入都指向空摆设
如许重启后lsmod | grep ip_vs就会获得:
ip_vs_wrr 6977 0
ip_vs_wlc 6081 0
ip_vs_sh 6593 0
ip_vs_sed 6081 0
ip_vs_rr 6081 0
ip_vs_nq 5953 0
ip_vs_lc 5953 0
ip_vs_lblcr 10565 0
ip_vs_lblc 9797 0
ip_vs_ftp 10053 0
ip_vs_dh 6593 0
ip_vs 79425 22 ip_vs_wrr,ip_vs_wlc,ip_vs_sh,ip_vs_sed,ip_vs_rr,ip_vs_nq,ip_vs_lc,ip_vs_lblcr,ip_vs_lblc,ip_vs_ftp,ip_vs