kfod扫不到磁盘的根本原因是ASM无法按asm_diskstring配置“看到”它,而非设备未识别;需检查该参数值、UDEV/ASMLIB配置、权限及磁盘头状态。
为什么
扫不到磁盘,但
明明存在?
根本原因不是设备没识别,而是 asm 无法按当前配置“看到”它。asm 不直接读
,它依赖
参数定义的路径模板去扫描,再结合 asmlib 或 udev 规则映射为合法磁盘。如果
配置为空、路径写错、权限不足或 asmlib 未就绪,
就会返回空——这不是磁盘丢了,是“门关着”。
返回空,先别急着重启 ASM,先查
:
常见错误值:
(依赖 ASMLIB)、
(旧版 ASMLIB 路径)、
(UDEV 规则路径),必须与实际磁盘符号链接位置严格一致
若用 UDEV,确认规则文件(如
)已生效:
,再检查
是否指向真实块设备
和
结果不一致怎么办?
是底层发现工具,绕过 ASM 实例,只做路径扫描和头校验;
则依赖 ASM 实例已启动且能访问磁盘元数据。两者不一致,说明磁盘物理可达但元数据异常或实例未加载完整。
若
能扫出磁盘但
无输出:大概率是 ASM 实例没起来,或
进程未获得磁盘读权限(
看属主是否为
)
若
无输出但
有结果:极罕见,通常是 ASM 实例缓存了旧磁盘信息,需重启 ASM 并清空
下的最近 trace 文件
验证磁盘头是否有效:
—— 若报
,说明元数据损坏,不能强挂载
修改
后仍不生效?注意三个隐性依赖
改完参数不等于立刻生效。ASM 实例不会动态重读该参数,且它还受 OS 层、驱动层、集群注册状态三重约束。
必须重启 ASM 实例:
(RAC 环境下要逐节点操作)
ASMLIB 必须已加载且
已挂载:
输出必须含 “loaded” 和 “mounted”,否则
类路径永远失败
RAC 环境下,
必须通过,且所有节点的
值必须完全一致,否则某节点挂载成功,另一节点因扫描路径不同而报
挂载失败时,日志里反复出现
怎么办?
这不是配置问题,是仲裁机制触发的保护行为。
(Physical Sector Table)是 ASM 磁盘组的元数据仲裁结构,外部冗余要求至少 2 块磁盘在线才能形成 quorum;正常冗余需半数以上;高冗余需三分之二以上。少一块,就卡在这里。
查实际在线磁盘数:
(显示
的才算有效参与 quorum)
若磁盘状态为
或
,说明未加入磁盘组,需先执行
切勿在缺失磁盘时强行
——ASM 允许挂载,但后续 I/O 可能静默失败,且无法保证数据一致性
磁盘组挂载问题最麻烦的从来不是命令输错,而是你看到的“磁盘不存在”,其实是 ASM 在某个环节被拦住了:可能是路径没对上,可能是权限卡在系统层,也可能是集群节点间状态撕裂。动手前,先用
看 ASM 自己认出了几个组,比盲目重启更省时间。
kfod/dev/sdb1/dev/sdb1asm_diskstringasm_diskstringkfodkfod disk=allasm_diskstringsqlplus / as sysasm -c "show parameter asm_diskstring"'ORCL:*''/dev/oracleasm/disks/*''/dev/asm-disk*'/etc/udev/rules.d/99-oracle-asm.rulesudevadm control --reload-rules && udevadm triggerls -l /dev/asm-disk*kfodasmcmd lsdskkfodasmcmd lsdskkfodasmcmd lsdsk+ASMls -l /dev/asm-disk*grid:asmadminkfodasmcmd lsdsk$ORACLE_BASE/diag/asm/+asm/asm/trace/kfod op=validate ds=true dev=/dev/asm-disk1Invalid ASM disk headerasm_diskstringsrvctl stop asm -n $(hostname) && srvctl start asm -n $(hostname)/dev/oracleasmoracleasm statusORCL:*ocrcheckasm_diskstringORA-15063: ASM discovered an insufficient number of disksno PST quorumPSTasmcmd lsdsk -kheader_status = MEMBERPROVISIONEDCANDIDATEALTER DISKGROUP DATA ADD DISK '/dev/asm-disk2'mount forcekfod op=groups