能修,因kfed-00322仅表示磁盘头magic(0x6b666564)损坏,物理扇区未覆写时备份头(如au=4m时blkn=2046)仍完好,kfed repair可据此恢复,但必须以root执行、显式指定正确ausz参数,修复后需用asmcmd afd_lsdsk确认afd接管状态。

能修,但必须用对命令、对参数、对时机。KFED-00322 错误只是磁盘头 magic 字段(0x6b666564)损坏,物理扇区未覆写时,备份头仍可读取;kfed repair 就是靠它恢复,不是靠猜。
看到 HEADER_STATUS=CANDIDATE 就删盘重加?别急
这是最常见误判。CANDIDATE 状态本身不表示磁盘失效,只说明 ASM 无法识别其头块 magic —— 很可能只是 LBA 0 的前 4 字节被覆盖(比如被 fdisk、parted 或 LVM 工具写入),而后续关键字段(dsknum、grpname、fgrpnum)仍在原位置。
- 先停 ASM 实例或至少确保没在运行中反复扫描该盘,避免缓存污染导致
state显示不准 - 用 root 执行
kfed read /dev/sdi,若报KFED-00322,立即转去读备份块:kfed read /dev/sdi blkn=2046(AU=4M 场景) - 如果
blkn=2046能正常输出kfbh.type: 1和有效grpname,说明备份头完好,repair可行
kfed repair 必须显式指定 ausz 参数
Oracle 不自动推导 AU 大小,填错直接导致磁盘组拒绝挂载 —— 这是修复失败的主因。
- AU=1M →
kfed repair /dev/sdi ausz=1048576 - AU=4M →
kfed repair /dev/sdi ausz=4194304 - AU=8M →
kfed repair /dev/sdi ausz=8388608 - 不确定 AU 大小?查历史记录:
SELECT au_size FROM v$asm_diskgroup WHERE name = 'DATADG';或从其他完好的同组磁盘上kfed read提取kfdhdb.ausize
修复后磁盘组仍不 mount?先过 AFD 这关
Oracle 19c RAC 默认启用 ASMFD(AFD),它是路径发现的第一道关卡。即使 kfed repair 成功、kfed read 显示正常,若 AFD 没接管该盘,ASM 实例根本看不到它。
- 执行
asmcmd afd_lsdsk,确认目标盘状态为a(active)而非u(unavailable)或空 - 若状态不对,需重新扫描:
asmcmd afd_scan,再检查;必要时重启oracleafd服务 - 验证成功标志:
kfed read /dev/sdi | egrep 'kfbh.type|dsknum|grpname'中kfbh.type为KFBTYP_DISKHEAD,且dsknum、grpname与原盘一致
kfed merge 是高危兜底操作,慎用
merge 是把外部头文件(如 header.bak)整块覆盖到 LBA 0,风险远高于 repair:
-
dsknum填错 → ASM 当成新盘,触发 rebalance,可能丢数据 -
grpnum填错 → 磁盘无法归属原 diskgroup,mount直接报ORA-15018 - 漏加
chksm=yes→ checksum 校验失败,ASM 拒绝识别 - 仅当
kfed read /dev/sdi blkn=2046返回全 0 或乱码(备份块也损坏),才考虑merge,且模板必须来自同一版本、同 AU、同冗余类型的磁盘
最易被忽略的一点:修复后别急着 ALTER DISKGROUP MOUNT,先确认 AFD 接管状态。很多“修好了却挂不上”的问题,卡在这一步。











