集群件自动卸载asm磁盘组本质是css检测到磁盘心跳丢失(默认3秒)后触发的安全熔断机制,非bug而是保全一致性的主动dismount;真因需查asmalert.log和cssd日志中的disk heartbeat timeout或ora-15042,而非crsctl stat res -t。
集群件自动卸载 asm 磁盘组,本质不是“卸载动作被触发”,而是 css(cluster synchronization services)检测到磁盘组底层状态异常后,主动 dismount 以保全一致性。直接查 crsctl stat res -t 看不到“自动卸载”日志,真因藏在 asmalert.log 和 cssd 日志里。
为什么CSS会强制dismount磁盘组?
CSS 不管 ASM 逻辑,只认物理磁盘心跳。一旦某个节点上某块 ASM 磁盘连续丢失心跳(默认 3 秒),CSS 就判定该磁盘不可用,进而通知 ASM 实例 dismount 所属磁盘组——这是 RAC 的安全熔断机制,不是 bug。
-
ORA-15042(disk X is missing from group Y)出现在 alert.log,说明 CSS 已把磁盘踢出心跳列表 -
cssd日志中出现disk heartbeat timeout或missed heartbeat from disk是关键证据 - 即使磁盘在 OS 层仍可见(
ls -l /dev/asm*正常),只要 ASM 层读不到 AU header(如头损坏、AFD 未接管),CSS 就收不到心跳 - EXTERNAL 冗余磁盘组最敏感:一块盘失联即触发 dismount;NORMAL 冗余下若 repair_timer > 0,可能暂不 dismount
检查AFD状态和磁盘头是否真正在线
AFD 环境下,asmcmd afd_lsdsk 显示的 HEADER_STATUS 必须是 MEMBER,否则 CSS 心跳必然失败。CANDIDATE 或 DISABLED 都代表磁盘头不可读,CSS 会放弃该盘。
- 运行
asmcmd afd_lsdsk | grep -E "(LABEL|HEADER_STATUS)",确认所有磁盘 LABEL 存在且 HEADER_STATUS = MEMBER - 若为 CANDIDATE:磁盘头已损,需用
kfed repair恢复(注意指定正确ausz),不能仅靠afd_label - 若为 DISABLED:检查
afddriverstate是否为LOADED,并确认afd_configure已执行且无报错 - 别信
ls -l /dev/asm*结果——AFD 设备路径是/dev/oracleafd/disks/*,OS 层看到的/dev/sdX不参与心跳
排查多节点磁盘可见性与权限漂移
RAC 各节点对同一磁盘的访问必须完全一致。补丁升级、grid 用户属组变更、udev 规则未同步,都会导致某节点上磁盘“存在但不可读”,CSS 在该节点收不到心跳,从而 dismount 整个磁盘组。
- 逐节点执行:
id -Gn grid,确保都含asmadmin;ls -l /dev/oracleafd/disks/权限应为brw-rw----,属主grid:asmadmin - 检查
$ORACLE_HOME/bin/oracle属组:RAC 补丁后常见问题就是它被改回oinstall,必须手工chgrp asmadmin $ORACLE_HOME/bin/oracle - 在所有节点运行
asmcmd afd_lsdsk对比输出,LABEL 名称、路径、HEADER_STATUS 必须一字不差 - AIX 环境重点查
reserve_policy=no_reserve,Linux 查 multipath alias 是否唯一且各节点一致
真正棘手的点在于:CSS 的 dismount 决策基于毫秒级心跳,而 human 排查要分钟级。等你登录上去看日志时,磁盘可能已恢复,但 dismount 状态不会自动回滚——必须人工 alter diskgroup ... mount,且前提是所有磁盘已重回 MEMBER 状态。漏掉任意一个节点的 AFD 权限或磁盘头修复,mount 就会再次失败并重进死循环。











