必须用udev规则基于dm_name创建/dev/asm-*符号链接并设权限,因asm 11g不识别/dev/mapper/设备,要求路径统一、主次号稳定、grid用户有660权限;仅配multipathd和alias必然报ora-15032/ora-15017。

Oracle 11g RAC 中,仅配置 multipathd 并设置 multipath.conf 的 alias 是不够的——ASM 启动必然失败,报 ORA-15032 和 ORA-15017。根本原因在于 ASM 要求设备节点路径固定、主次号稳定、权限可控,而 /dev/mapper/mpatha 类路径完全不满足这三点。
为什么 multipath -ll 显示正常但 ASM 扫不到盘?
因为 ASM 在 11g 版本中**不识别 device-mapper 块设备节点**(即 /dev/mapper/xxx),它只认原始块设备或符合其规则的符号链接。具体限制有三:
- 设备主次号必须在所有节点上一致且不随重启变化
- 所有 RAC 节点必须使用完全相同的路径名(如统一为
/dev/asm-disk1) -
grid用户必须对设备节点有crw-rw----权限,而默认/dev/mapper/下设备属主是root:root
更麻烦的是:multipath.conf 中的 alias 只影响 /dev/mapper/ 下软链名称,不控制设备节点创建时机、不设权限、也不保证跨节点映射一致性。RAC 多节点重启后,mpatha 在 node1 和 node2 上可能指向不同 WWN。
必须用 udev 规则基于 DM_NAME 创建 /dev/asm-* 设备
核心思路是:放弃依赖底层 SCSI 设备名(如 /dev/sdb)或 /dev/mapper/ 路径,改用内核暴露的稳定标识 DM_NAME(即你在 multipath.conf 中定义的 alias)来触发 udev 创建固定符号链接。
- 确认
DM_NAME已生效:udevadm info --name /dev/mapper/db1 | grep DM_NAME应输出E: DM_NAME=db1 - 规则文件必须放在
/etc/udev/rules.d/99-asm.rules(数字够大,确保在 multipath 自带规则之后执行) - 规则内容示例(将 alias
db1映射为/dev/asm-disk1):ENV{DM_NAME}=="db1", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="660" - 严禁使用
NAME=或匹配/dev/sdX—— 这些值在多路径下随时变化,不可靠
如何验证 udev 规则是否真正生效?
90% 的“规则不生效”问题,其实是没 reload 或没 trigger。别等重启,按顺序执行:
- 重载规则:
udevadm control --reload-rules - 触发设备事件:
udevadm trigger --subsystem-match=block --action=add - 检查结果:
ls -l /dev/asm-disk1应存在,且显示crw-rw---- 1 grid asmadmin - 在所有 RAC 节点重复验证 —— 必须每个节点都看到相同路径、相同权限、相同主次号(
ls -l /dev/asm-disk1输出的第 5–6 列)
漏掉任意一个节点,或者某个节点上 /dev/asm-disk1 属主不是 grid,ASM 就会拒绝识别该盘。这个细节最容易被忽略,也是集群启动失败最常见原因。











