Linux内核模块管理

今天突然发现一台服务器无法ssh了。然后通过ILO登录查看,上去检查后发现根分区已经被写爆了(庆幸ILO已经登录了,不然又得折腾),导致 不能够登入系统。检查发现/var/log/messages*居然有100多G。查看日志内容如下

Feb  9 14:31:49 yantao kernel: ip_vs: Unknown symbol icmpv6_send
Feb  9 14:31:49 yantao abrt[14833]: abrtd is not running. If it crashed, /proc/sys/kernel/core_pattern contains a stale value, consider resetting it to 'core'
Feb  9 14:31:49 yantao kernel: ip_vs: Unknown symbol ip6_local_out
Feb  9 14:31:49 yantao kernel: ip_vs: Unknown symbol ip6_route_me_harder
Feb  9 14:31:49 yantao kernel: ip_vs: Unknown symbol ipv6_dev_get_saddr
Feb  9 14:31:49 yantao kernel: ip_vs: Unknown symbol ip6_route_output
Feb  9 14:31:49 yantao modprobe: FATAL: Error inserting ip_vs (/lib/modules/2.6.32-504.12.2.el6.x86_64/kernel/net/netfilter/ipvs/ip_vs.ko): Unknown symbol in module, or unknown parameter (see dmesg)

日志中全是上面所示内容,根据日志提示可以看出:内核未加载IPV6模块,而这台服务器上使用了IPV6地址,所以 会有如上告警。

解决方法很简单,把ipv6模块载入内核就OK了。解决方法在最后面,这里先写下内核模块管理。

1. 列出已加载模块

lsmod

2. 查看模块信息

modinfo [module_name]

[root@yantao ~]# modinfo ipv6
filename:       /lib/modules/2.6.32-504.12.2.el6.x86_64/kernel/net/ipv6/ipv6.ko
alias:          net-pf-10
license:        GPL
description:    IPv6 protocol stack for Linux
author:         Cast of dozens
srcversion:     38A8F5328B002272D4EC12B
depends:        
vermagic:       2.6.32-504.12.2.el6.x86_64 SMP mod_unload modversions 
parm:           disable:Disable IPv6 module such that it is non-functional (int)
parm:           disable_ipv6:Disable IPv6 on all interfaces (int)
parm:           autoconf:Enable IPv6 address autoconfiguration on all interfaces (int)

3. 挂载新模块以及新模块依赖的模块

$ modprobe [module_name]
$ insmod

以上两个命令都可以挂载新的模块。但是modprobe命令的功能更加强大。modprobe直接使用模块名就可以挂载了,但是insmod命令挂载模块时需要制定模块的完整路径(通过modinfo [module_name] 查看)。

modprobe其他用法

$ modprobe -l

列出内核中所有的模块,包括已经加载和未加载的

4. 移除已加载模块

$ rmmod [module_name]
$ modprobe -r [module_name]

这两个命令都可以移除已加载模块,但前提是模块此时没有被使用

5. 处理文章起始提到的问题

  • 首先检查是否加载了ipv6模块
[root@yantao ~]# lsmod | grep 'ipv6'
[root@yantao ~]# 

检查发现内核确实没有加载ipv6模块

  • 再将模块挂入内核

这里就用insmod加载,模块路径用modinfo命令查看

[root@yantao ~]# insmod /lib/modules/2.6.32-504.12.2.el6.x86_64/kernel/net/ipv6/ipv6.ko

# 查看已经加载
[root@twin13a083s4 ~]# lsmod | grep 'ipv6'          
ipv6                  334740  55 ip_vs

最后检查下日志文件,发现此类告警已经没有了。

你可能感兴趣的:(Linux内核模块管理)