asmcmd lsdsk为空时,须先验证multipath是否成功聚合路径并生成稳定alias;若multipath -ll无alias输出,说明配置未生效,需检查/etc/multipath.conf中alias定义、重启multipathd及执行udevadm reload与trigger。

asmcmd lsdsk 为空时,先确认 multipath 是否真正识别了 alias
看到 asmcmd lsdsk 返回空,别急着改权限或重装驱动。第一步必须验证 multipath 层是否已把物理路径聚合成你期望的逻辑设备,并打上了稳定别名(alias)。否则 ASM 根本没机会看见“盘”。
执行 multipath -ll,查找类似 mpatha (36001405) alias db1 的输出。如果没有 alias 字样,说明 multipath.conf 里没配 alias,或配置未生效。
常见错误现象:
-
multipath -ll显示 mpatha/b/c,但没 alias → udev 规则无法基于DM_NAME匹配 - 节点间
multipath -ll输出顺序不一致 → 比如 node1 的 mpatha 对应 WWN A,node2 的 mpatha 对应 WWN B → 后续 udev 规则会绑定错盘
实操建议:
- 在
/etc/multipath.conf中为每组 LUN 显式定义alias,例如:alias "db1" - 重启 multipathd:
systemctl restart multipathd - 逐节点执行
udevadm info --name /dev/mapper/db1 | grep DM_NAME,必须返回E: DM_NAME=db1
udev 规则写了却没生成 /dev/asm-disk1?检查 reload 和 trigger 是否真执行
规则文件存在不等于生效。90% 的“规则不生效”问题,是没触发内核事件重载,或规则本身没匹配上设备。
关键验证点:
-
ls -l /dev/asm-disk1不存在 → 规则没触发 -
ls -l /dev/asm-disk1存在但属主不是grid:asmadmin→ 规则里OWNER/GROUP写错,或被其他规则覆盖
实操建议:
- 确认规则文件放在
/etc/udev/rules.d/99-asm.rules(数字足够大,确保晚于 multipath 自带规则) - 内容必须用
ENV{DM_NAME}=="db1",不能用NAME或SYMLINK混用;示例:ENV{DM_NAME}=="db1", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660" - 执行
udevadm control --reload-rules+udevadm trigger --subsystem-match=block --action=add(注意是add,不是change) - 再检查
ls -l /dev/asm-disk1,权限应为crw-rw----,属主grid:asmadmin
ASMFD 已启用但 asmcmd lsdsk -k 仍无输出?重点查 WWID 和 asm_diskstring
Oracle 19c RAC 默认启用 ASMFD,它不认 /dev/oracleasm/disks/* 或 ORCL:* 这类 ASMLib 语法。若 asmcmd lsdsk -k 无输出,说明设备发现层就断了。
两个硬性前提必须同时满足:
- 所有节点上
scsi_id -g -u -d /dev/sda输出完全一致(WWID 是唯一标识,不一致 = 存储映射或 multipath 配置有误) -
asm_diskstring必须显式设为绝对路径,且只包含 ASMFD 能识别的设备,例如:'/dev/mapper/db1','/dev/mapper/db2'
实操建议:
- 用
sqlplus / as sysasm执行:ALTER SYSTEM SET asm_diskstring='/dev/mapper/db1','/dev/mapper/db2' SCOPE=BOTH; - 切勿写成
'/dev/oracleasm/disks/*'或'ORCL:*'—— 这些在 ASMFD 下直接失效,v$asm_disk为空 - 确认
grid用户对这些路径有读权限:ls -l /dev/mapper/db1应显示属主为grid:asmadmin(非 root:root)
ASMLib 残留导致 CRS 启动卡在 ora.asm?必须清除三处而非仅卸载包
Oracle 19c RAC 中只要内核加载过 oracleasm 模块,就会与 ASMFD 冲突,导致 crsctl start crs 卡死在 ora.asm,报 ORA-15063 或 KFED-00322。这不是配置错误,是根本性互斥。
只运行 oracleasm disable 和 yum remove kmod-oracleasm 不够。残留存在于:
- 内核模块:执行
oracleasm exit && rmmod oracleasm 2>/dev/null,再确认lsmod | grep oracleasm无输出 - 磁盘头元数据:若磁盘曾被 ASMLib 初始化过,头部已被覆盖,
kfed read /dev/mapper/db1 | head -20会显示KFED-00322: Invalid OSM block type;此时需重建磁盘组,或对空盘执行dd if=/dev/zero of=/dev/mapper/db1 bs=4096 count=100 - udev 规则:删除所有含
oracleasm的规则文件,特别是/etc/udev/rules.d/99-oracle-asm.rules及任何自定义的*asm*文件
最后一步:清完残留后,必须重启节点,再启动 CRS —— ASMFD 不接受热切换。


















