Rebalance卡在WAITING或EXECUTING且EST_MINUTES不更新,首要排查底层存储硬件坏道、HBA卡CRC错误或光纤链路抖动;需检查smartctl三项指标、/var/log/messages中的I/O错误、dd写入延迟,并确认DROPPING盘是否因I/O失败阻塞迁移,同时排除CSSD心跳抖动干扰。

Rebalance卡在WAITING或EXECUTING但EST_MINUTES不更新
这不是ASM配置问题,而是底层存储在“装死”——90%的长时间卡住源于磁盘坏道、HBA卡CRC错误或光纤链路抖动。这些故障不会让磁盘掉线(v$asm_disk.state仍为ONLINE),但会导致AU迁移反复超时重试,最终阻塞整个流程。
实操建议:
- 在所有RAC节点执行
smartctl -a /dev/sdX(替换为实际设备),紧盯Reallocated_Sector_Ct、Current_Pending_Sector、UDMA_CRC_Error_Count三项;任一非零即高风险 - 用
grep "I/O error\|aborted command\|resetting link" /var/log/messages查系统日志,时间戳必须与ALTER DISKGROUP ... ADD DISK命令发起时间对齐 - 跑
dd if=/dev/zero of=/dev/sdX bs=1M count=1024 oflag=direct测写入延迟:单次耗时>500ms或报Input/output error,直接标记为故障盘 - 别信
asmcmd lsdsk结果——它只验证路径可达,不校验扇区可写
确认DROPPING盘是否因I/O失败卡住迁移
当磁盘响应异常但未彻底失联,ASM会将其置为DROPPING状态并尝试迁移AU,却因读取失败而卡死。此时v$asm_operation显示STATE = 'EXECUTING',但v$asm_disk.header_status可能是PROVISIONED或UNKNOWN,而非MEMBER。
实操建议:
- 执行
SELECT name, state, header_status, mode_status, repair_timer FROM v$asm_disk WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'YOUR_DG_NAME');,若目标盘state = 'DROPPING'且repair_timer = 0,说明ASM已放弃等待,但AU迁移逻辑被I/O错误阻塞 -
ALTER DISKGROUP YOUR_DG_NAME DROP DISK 'ORCL:BAD_DISK'已无效;必须加FORCE清除元数据残留:ALTER DISKGROUP YOUR_DG_NAME DROP DISK 'ORCL:BAD_DISK' FORCE -
FORCE后需手动触发REBALANCE,否则磁盘组冗余度持续受损
别把CSSD心跳抖动当成Rebalance卡死
RAC环境下,Rebalance长时间无进展常被误判为ASM问题,实际根源可能是集群同步服务(CSSD)心跳不稳。一旦CSSD无法正常同步节点状态,ARB进程就无法协同工作,导致gv$asm_operation中power值不变、sofar停滞,甚至出现“假EXECUTING”。
实操建议:
- 查集群健康:
SELECT * FROM gv$css_history WHERE status NOT IN ('SUCCESS', 'INTERMEDIATE');出现FAILED记录即表明节点间同步中断 - 检查
crsctl check cluster -all输出,关注各节点CRS和CSS资源是否均为ONLINE - 运行
olsnodes -n -s确认所有节点是否仍在集群中注册;若某节点状态为UNKNOWN或缺失,优先排查网络与OCR投票盘
POWER设了但I/O没涨,rebalance还是慢
改了asm_power_limit参数但rebalance没提速,常见原因是:你改的是全局参数,而当前rebalance操作早已按旧值启动;或者RAC中某节点CSSD异常,导致ARB无法分发任务。
实操建议:
- 确认当前操作是否真用了新POWER:
SELECT inst_id, operation, state, power, sofar, est_work FROM gv$asm_operation——若power列没变,说明ALTER SYSTEM SET asm_power_limit = N生效了,但本次操作没继承 - 强制指定本次操作功率才有效:
ALTER DISKGROUP dg1 REBALANCE POWER 7(注意不是改参数,是改这次操作) - 全闪存阵列可设到6–8;混闪或机械盘务必≤4,并用
iostat -xm 1盯%util和await——%util > 95%或await > 20ms就得降POWER - RAC中各节点
asm_power_limit可能不同,务必用SELECT name, value FROM gv$parameter WHERE name = 'asm_power_limit'逐节点确认
复杂点在于:你看到的“卡住”,往往横跨三层——OS层磁盘物理故障、集群层CSSD心跳断裂、ASM层AU迁移逻辑阻塞。任何一个环节没摸清,就容易在错误方向上反复折腾。最常被忽略的是:不查所有节点的smartctl输出一致性,也不核对gv$css_history里那些看似无关的INTERMEDIATE失败记录。


















