ASMLib 已被Oracle官方弃用,2021年起停止更新,RHEL/CentOS 8+及Oracle Linux 8+默认不兼容,/etc/init.d/oracleasm脚本被移除,systemd不再支持该服务。
asmlib 已被 oracle 官方弃用,2021 年起不再提供更新,rhel/centos 8+ 和 oracle linux 8+ 默认不兼容,强行配置极大概率失败。
oracleasm init 失败:/etc/init.d/oracleasm: No such file or directory
这是最典型的信号——系统里压根没装 ASMLib 内核模块或工具包。Oracle 官方早已停止为新内核编译 oracleasm 模块,尤其在 EL8+ 系统上,/etc/init.d/oracleasm 脚本被彻底移除,systemd 也不再支持该服务。
- 检查是否真有安装:
rpm -qa | grep oracleasm,若无输出,说明未安装(且不建议补装) - EL7 可能残留旧包,但需匹配精确内核版本,
uname -r输出必须与oracleasm-kmod包名中的 kernel 版本一致 - 即使 init 成功,后续
oracleasm scandisks也常因 udev 规则缺失或权限问题返回空结果
oracleasm listdisks 无输出:磁盘未标记或 udev 规则失效
ASMLib 不是自动发现磁盘的魔法工具,它依赖手动标记(oracleasm createdisk)和底层 udev 规则持久化设备名。一旦规则没生效,重启后 listdisks 就为空。
- 标记前先确认磁盘裸设备可读:
ls -l /dev/sdb,确保权限为brw-rw----且属组为asmadmin - 标记命令必须带大写盘符名:
oracleasm createdisk DATA /dev/sdb,名字不能含下划线或数字开头(如_DATA或1DATA会失败) - udev 规则文件(如
/etc/udev/rules.d/99-oracle-asmdevices.rules)必须包含OWNER="grid", GROUP="asmadmin", MODE="0660",否则oracleasm scandisks扫不到
扫描到磁盘但 ASM 实例无法识别:ASM_DISKSTRING 配置错误
即使 oracleasm listdisks 显示 DATA,ASM 实例仍可能报 ORA-15040: diskgroup is incomplete,根本原因是 ASM_DISKSTRING 没指向 ASMLib 设备路径。
- ASMLib 设备路径固定为
/dev/oracleasm/disks/*,不是原始路径/dev/sdb - 必须显式设置:
ALTER SYSTEM SET ASM_DISKSTRING='/dev/oracleasm/disks/*' SCOPE=BOTH; - 若混用 UDEV 路径(如
/dev/asm-disk*)和 ASMLib 路径,ASM 会忽略部分磁盘,且无法回退 - 修改后需重启 ASM 实例,
crsctl stop crs && crsctl start crs,仅 reload 参数无效
真正麻烦的是混合环境:旧系统还在跑 ASMLib,新节点加进来却装不了对应内核模块;或者误以为 oracleasm scandisks 能替代 udev 规则——它只是读取已标记的磁盘缓存,不解决设备名漂移。现在标准做法是直接用 udev + ASMLIB-free 方式(即 ASM_DISKSTRING='/dev/asm-disk*'),跳过整个 oracleasm 工具链。










