asmcmd lsdg看不到磁盘组,主因是ASM未发现磁盘而非磁盘损坏;需先用asmcmd lsdsk验证物理可见性,若无输出则属发现失败,常见于权限错误、路径不一致或多路径冲突。
磁盘组挂载失败时,asmcmd lsdg 显示 dismounted 或根本不出现在列表里,不代表磁盘本身坏了——大概率是底层磁盘没被asm识别或没联机。
为什么 asmcmd lsdg 看不到磁盘组?先确认磁盘是否被发现
挂载失败的常见错觉是“磁盘组丢了”,其实 ASM 连磁盘都没看见。必须跳过 SQL*Plus,直接用 asmcmd 验证物理层可见性:
-
asmcmd lsdsk—— 若返回空或报ORA-15033: diskgroup 'DATA' is not mounted,说明 ASM 根本没扫描到任何磁盘;不是挂载失败,是发现失败 -
asmcmd lsdsk -k—— 加-k强制检查内核级设备路径,能暴露权限/路径不一致问题(比如节点1看到/dev/mapper/DATA01,节点2看到/dev/sdb) - 若
lsdsk有输出但lsdg没有,说明磁盘已发现但未组成磁盘组,需查v$asm_disk中STATE是否为PROVISIONED或FOREIGN
asmcmd 显示磁盘 OFFLINE?别急着 ALTER DISKGROUP ... ONLINE
asmcmd lsdsk 输出中某盘状态为 OFFLINE,通常不是磁盘故障,而是 ASM 实例无法读取其头部(disk header)。原因集中在三处:
- 设备文件权限不对:
ls -l /dev/mapper/DATA01必须是brw-rw---- 1 grid oinstall(12c 默认),不是root:disk或oracle:oinstall - 多路径别名冲突:
asm_diskstring同时包含/dev/mapper/DATA01和/dev/dm-12,触发ORA-15077+ORA-15063,ASM 拒绝加载 - ASMLib 设备未刷新:
/dev/oracleasm/disks/DISK1是软链,但目标设备属主仍是root:root,需oracleasm force-scandisks重扫
节点间 asmcmd lsdsk 输出不一致?RAC 挂载必然失败
RAC 要求所有节点对同一磁盘的路径、权限、WWID 完全一致。哪怕只差一个字符,CRS 就无法协调跨节点挂载:
- 在每个节点运行:
blkid | grep -i data和ls -l /dev/mapper/ | grep data,逐行比对输出是否完全相同 - 检查
asm_diskstring参数:show parameter asm_diskstring,确保所有节点值一致,且不含重复路径(如同时含/dev/mapper/*和/dev/dm-*) - 若某节点
lsdsk有盘、其他节点没有,优先查该节点的/etc/udev/rules.d/99-asm-disk.rules是否缺失或未生效(udevadm trigger --subsystem-match=block)
真正卡住人的地方,往往不是 SQL 命令写错,而是 asmcmd lsdsk 在节点 A 正常、节点 B 返回空——这时再翻 alert 日志已经晚了,得立刻切到操作系统层比对设备状态。RAC 的“一致性”不是口号,是每台机器上 ls -l 的输出都得一字不差。











