asmcmd lsdsk无输出说明asm未发现磁盘,属发现失败而非挂载失败;应先用lsdsk -k验证内核路径一致性,再检查udev规则、权限及节点间设备状态是否完全一致。

asmcmd lsdsk 无输出,说明 ASM 根本没看见磁盘
这不是挂载失败,是发现失败。很多 DBA 直接查 v$asm_diskgroup 或跑 alter diskgroup mount,结果报 ORA-15001 或 ORA-15033,却没意识到 ASM 连设备文件都没扫描到。
实操建议:
- 切到
grid用户,运行asmcmd lsdsk:若返回空或仅报错ORA-15033,说明底层设备不可见 - 立刻加
-k参数重试:asmcmd lsdsk -k,它绕过 ASM 缓存,直接读内核设备路径,能暴露节点间路径不一致(如节点1是/dev/mapper/DATA01,节点2是/dev/sdb) - 若仍无输出,检查
/etc/udev/rules.d/99-asm-disk.rules是否存在、内容是否含OWNER="grid"GROUP="asmadmin"MODE="0660",然后执行udevadm trigger --subsystem-match=block和udevadm control --reload-rules
lsdsk 有输出但 lsdg 没有,大概率是磁盘头损坏
看到磁盘列表但看不到磁盘组,或者 v$asm_disk.header_status 显示 CANDIDATE 或 PROVISIONED,基本可锁定磁盘头(disk header)失效——不是磁盘坏,是 AU 0 的前 512 字节 magic(0x6b666564)被覆盖或校验失败。
实操建议:
- 用
kfed read /dev/mapper/DATA01 | grep kfbh.type确认:正常应为KFBTYP_DISKHEAD,若为KFBTYP_INVALID就得修 -
kfed repair必须用root执行,且显式指定ausz参数:AU=4M 时填4194304,AU=1M 填1048576,填错会导致后续挂载报ORA-15063 - 修复后别急着
alter diskgroup mount,先跑asmcmd afd_lsdsk确认状态为a(AFD 已接管),否则 ASM 实例根本不会加载该盘
RAC 多节点间设备状态不一致,挂载必然失败
RAC 不要求“某个节点能 mount”,而要求“所有节点对同一磁盘的路径、权限、WWID 完全一致”。差一个字符,CRS 就拒绝协调跨节点挂载。
实操建议:
- 在每个节点运行
blkid | grep -i data和ls -l /dev/mapper/ | grep data,逐行比对输出是否一字不差 - 检查
asm_diskstring参数:show parameter asm_diskstring,确保所有节点值相同,且不含重复路径(比如同时含/dev/mapper/*和/dev/dm-*) - 特别注意多路径冲突:如果
asm_diskstring同时包含/dev/mapper/DATA01和/dev/dm-12,ASM 会报ORA-15077+ORA-15063并静默跳过该盘
OCR 磁盘报 ORA-15038:Group Creation Timestamp 不匹配
这种错误只出现在 OCR 或 voting disk 所在磁盘组(如 +CRSDG),本质是某块磁盘记录的磁盘组创建时间戳与当前集群不一致——通常是旧环境残留磁盘被误识别进来。
实操建议:
- 查告警日志里的完整报错:
ORA-15038: disk '/dev/mapper/cell4ocr02' mismatch on 'Group Creation Timestamp',定位到具体设备名 - 确认该磁盘是否属于当前集群:对比
crsctl query css votedisk输出和实际多路径配置,若不在列表中,说明它是外来盘 - 编辑
/etc/multipath.conf,把问题磁盘的 WWID 或别名从devices或blacklist段移除或明确屏蔽,然后重启 AFD:afdstop→afdstart→asmcmd afd_scan
asmcmd lsdsk 有输出、节点 B 返回空——这时再翻 alert 日志已经晚了,得立刻切到操作系统层比对设备状态。











