故事缘由
某应用服务器搬迁至另一机柜,涉及需要重启服务器相关应用服务。 其中包括keepalived服务,此服务启动会自动检测系统自带模块ipvs模式是否加载,如果未启动,会在系统日志中频繁写入日志,最终导致磁盘被日志填满。 以上问题都是有ipvs模块未在系统启动之后自动加载导致。 由此大家开始对于系统模块自动加载开始分析系统启动流程
- 读取服务器硬件信息,载入BIOS的硬件信息,并取得第一个开机装置的代号
- 读取第一个开机装置的MBR的boot Loader(/etc/grub.conf)的开机信息
- 载入系统内核(Kernel)信息,解压Kernel,尝试驱动硬件
- 内核(Kernel)执行init(/etc/inittab)程序并获得run-lebel信息(如3或5)
- 开始初始化(init)执行/etc/rc.d/rc.sysinit
- 启动内核外挂模块(/etc/modprobe.conf)
- 初始化(init)执行run-level的各种Scripts,启动系统及自启动的应用服务
- 初始化(init)执行/etc/rc.d/rc.local
- 执行/bin/login,等待用户Login
- 用户登录Login后进入Shell
模块自动启动
系统启动后自己调用部分模块,但是这些模块都是必须加载,有部分已经写入内核但是未加载的模块,不是必须的,比如ipvs模块。
模块地址:/lib/modules/`uname -r`/kernel/net/netfilter/ipvs
如果要让系统启动之后自己加载此类模块,其实系统已经有了说明。
打开/etc/rc.d/rc.sysinit文件- # Load other user-defined modules
- for file in /etc/sysconfig/modules/*.modules ; do
- [ -x $file ] && $file
- done
模块自启动解决办法
办法一
创建模块文件:/etc/sysconfig/modules/ipvs.modules,输入:- #!/bin/sh
- #
- # Load the LVS(IPVS) module for keepalived service
- #
- ModuleName=ip_vs
- /sbin/modinfo -F filename $ModuleName >/dev/null 2>&1
- if [ $? -eq 0 ]
- then
- modprobe $ModuleName >/dev/null 2>&1
- fi
办法二
在/etc/rc.d/rc.sysinit文件最后新增一段,进行自动化加载模块工作- # load LVS IPVS modules
- KERNEL_VER=`uname -r`
- IPVS_PATH=/lib/modules/$KERNEL_VER/kernel/net/netfilter/ipvs
- if [ -d $IPVS_PATH ]; then
- for module in $IPVS_PATH/* ; do
- module=${module##*/}
- module=${module%.ko}
- modprobe $module >/dev/null 2>&1
- done
- fi