跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

如何解决Oracle 11g RAC中ASMLIB驱动失效_升级kmod-oracleasm内核模块版本

最常见原因是kmod-oracleasm内核版本与运行时uname -r不匹配,需确保RPM包名中内核版本、架构及变体(如el6xen)完全一致;同时须禁用SELinux并正确配置/etc/sysconfig/oracleasm中的ORACLEASM_MODULE参数。 确认当前内核与kmod- oracle asm版本是否匹配 驱动初始化失败最常见原因是
kmod-oracleasm
模块编译时所针对的内核版本和运行时
uname -r
输出不一致。比如系统内核是
2.6.32-754.35.1.el6.x86_64
,但安装的 rpm 包名却是
kmod-oracleasm-2.6.32-696.el6-2.0.8-1.el6.x86_64.rpm
,模块就无法加载。 执行以下命令快速比对:
uname -r rpm -qa | grep oracleasm
若输出中内核主干版本(如
2.6.32-754
)不一致,必须更换对应 RPM;注意还要匹配架构(
x86_64
vs
i686
)、SMP/PAE/XEN 变体(如
el6
vs
el6xen
)。 手动加载 oracleasm.ko 失败时检查模块路径与依赖
/sbin/insmod
直接加载失败,常见于:
oracleasm.ko
所在目录未被
depmod
索引,或模块依赖的符号(如
kernel/drivers/scsi/scsi_mod.ko
)未先加载。 先确认模块实际位置:
find /lib/modules/$(uname -r) -name oracleasm.ko
若不在标准子目录(如
kernel/drivers/addon/oracleasm/
),需手动拷贝并重建依赖:
cp oracleasm.ko /lib/modules/$(uname -r)/kernel/drivers/addon/oracleasm/ && depmod -a
再尝试加载:
modprobe oracleasm
(比
insmod
更智能,会自动处理依赖) SELinux 启用状态下 oracleasm 初始化静默失败 即使
modprobe oracleasm
成功,
/etc/init.d/oracleasm configure
仍可能卡在
Initializing the Oracle ASMLib driver: [FAILED]
,日志
/var/log/oracleasm
显示
Loading module "oracleasm": failed
—— 这往往是 SELinux 阻止了模块加载或设备节点创建。 临时验证:运行
setenforce 0
后重试
oracleasm configure
。若成功,则必须永久禁用: oracle知识库 oracle知识库下载 下载 编辑
/etc/selinux/config
将
SELINUX=enforcing
改为
SELINUX=disabled
重启生效(仅
setenforce 0
不足以让
oracleasm
服务自启时通过) 升级 kmod-oracleasm 后仍不生效的遗漏点 换包、禁 SELinux、
depmod
都做完,重启后
oracleasm status
仍显示未运行,大概率是 init 脚本未触发模块加载。RHEL/CentOS 6+ 的
oracleasm
服务默认不调用
modprobe
,而是依赖
/etc/sysconfig/oracleasm
中的
ORACLEASM_MODULE
设置。 检查并修正该配置项:
grep ORACLEASM_MODULE /etc/sysconfig/oracleasm
若为空或值不是
oracleasm
,请设为:
ORACLEASM_MODULE="oracleasm"
然后执行:
service oracleasm restart
。这步常被忽略,但决定驱动能否随服务一起加载。

相关文章