Oracle 19c RAC中启用ASMLib会导致ASM/CRS无法正常启动,因其与ASMFD根本冲突;必须彻底清除内核模块、磁盘头残留及udev规则,并正确配置AFD设备识别与asm_diskstring。

Oracle 19c RAC 中只要启用了 ASMLib,就不可能正常启动 ASM 或 CRS —— 它不是“配置错误”,而是根本性冲突。官方已弃用,内核模块加载即故障,磁盘头被覆盖即不可逆损坏。
确认 ASMLib 是否仍在运行:别信配置文件,看内核和磁盘头
生产环境里残留的 ASMLib 比比皆是,尤其从 12c/18c 升级上来的集群。不能只查 oracleasm status,必须验证两件事:
-
lsmod | grep oracleasm:输出非空 = 内核模块已加载 → 立刻停用,否则crsctl start crs必卡在ora.asm或直接报ORA-15063 -
kfed read /dev/mapper/mpatha | head -20:若看到KFED-00322: Invalid OSM block type或开头无afd_disk签名 → ASMLib 曾写入磁盘头,破坏了 ASMFD 元数据 -
asmcmd afd_lsdsk输出大量?或为空,但ls -l /dev/mapper/asm*权限正常 → 基本可断定是 ASMLib 干扰 AFD 设备识别
停用 ASMLib 不等于卸载:必须清除三处残留
仅执行 oracleasm disable 和 yum remove kmod-oracleasm 远远不够。残留会持续干扰 ASMFD 启动路径:
- 内核模块:在所有节点执行
oracleasm exit && rmmod oracleasm 2>/dev/null,再确认lsmod | grep oracleasm无输出 - 磁盘头元数据:对未挂载、无数据的磁盘(如新 LUN 或 OCR 备用盘),执行
dd if=/dev/zero of=/dev/mapper/mpatha bs=4096 count=100;若已是 ASM 磁盘组成员,跳过此步,改用重建磁盘组 - udev 规则:删除所有含
oracleasm的规则文件,重点清理/etc/udev/rules.d/99-oracle-asm.rules和任何自定义的/etc/udev/rules.d/*asm*
切换到 ASMFD 后仍不识别磁盘:检查 WWID 和 asm_diskstring
ASMFD 启动后磁盘仍不显示,问题大概率出在设备发现层,而非 ASM 实例本身:
- 先验证 WWID 一致性:
scsi_id -g -u -d /dev/sda在所有 RAC 节点上输出必须完全相同;若不同,multipath 映射或存储侧配置有误 -
asm_diskstring必须显式设置,19c 默认为NULL且不可靠。安全写法是逗号分隔的绝对路径:ALTER SYSTEM SET asm_diskstring='/dev/mapper/asmcrs1','/dev/mapper/asmcrs2' SCOPE=BOTH; - 切勿使用
/dev/oracleasm/disks/*或ORCL:*:这些是 ASMLib 时代语法,在 ASMFD 下完全失效,会导致v$asm_disk返回空 - 确认
grid用户对路径有读写权限:ls -l /dev/mapper/asm*应显示属主为grid:asmadmin、权限为660
CRS 启动卡在 ora.storage INTERMEDIATE:本质是 ASMFD 未真正接管设备
这个状态说明 ora.asm 进程起来了,但无法 MOUNT 任何磁盘组——常见于 ASMFD 已启用但设备未被正确标记为 AFD:
- 执行
asmcmd afd_lsdsk,状态列应为a(available);若为?,说明 AFD 未识别该设备,需检查/etc/oracle/afd/conf/afd.conf中是否漏配 WWID - 手动标记设备:
asmcmd afd_label DATA01 /dev/mapper/datap1 --init(--init强制重写 AFD 头,等价于清理 ASMLib 残留) - 重启 AFD 服务:
crsctl stop resource ora.asmfd && crsctl start resource ora.asmfd,再观察crsctl stat res -t - 若仍失败,检查
/var/log/oracleafd.log,常见错误如AFD-622: Unable to open device,指向权限或 SELinux 限制
最易被忽略的一点:ASMLib 残留不会立即报错,它让集群“看似能启动”,实则在后台持续触发 ASM 自动重平衡、控制文件争用和心跳超时。哪怕你暂时绕过启动问题,IO 性能也会在数小时内断崖式下跌。


















