根本原因是runcluvfy.sh预检脚本未在ASM_DISKSTRING指定路径下发现可读、属主为grid:asmadmin的块设备;需用scsi_id获取WWID配udev规则绑定持久路径(如/dev/asm-ocr)、固化权限、正确设置ASM_DISKSTRING为/dev/asm*,并确保所有节点完全一致。
根本原因不是磁盘不存在,而是 asm 实例启动前,gridsetup.sh 预检脚本(runcluvfy.sh)压根没在指定路径下看到可读、可访问、属主正确的块设备。
udev 规则没生效,设备路径重启后漂移
裸设备名(如 /dev/sdb)在多路径切换、热插拔或节点重启后极易变成 /dev/sdc,RAC 直接失败。ASMLib 已弃用且在 EL8+ 内核不可用,不能依赖它“稳定”设备名。
- 必须用
scsi_id -g -u -d /dev/sdb获取 WWID(例如360050768028004d2e000000000000123),再写 udev 规则绑定持久名,如/dev/asm-ocr - 规则文件(
/etc/udev/rules.d/99-oracle-asm.rules)中必须包含:KERNEL=="sd*", PROGRAM=="/sbin/scsi_id -g -u -d /dev/$name", RESULT=="360050768028004d2e000000000000123", NAME="asm-ocr", OWNER="grid", GROUP="asmadmin", MODE="0660" - 执行
udevadm control --reload-rules && udevadm trigger --subsystem-match=block后,ls -l /dev/asm-*必须显示属主为grid:asmadmin,否则规则未生效 - 切勿在规则里写
GROUP="oinstall"—— Oracle 12c+ 要求 ASM 设备组必须是asmadmin,否则crsctl start res ora.asm会静默拒绝启动
ASM_DISKSTRING 配错或未覆盖实际路径
gridSetup.sh 只扫描 ASM_DISKSTRING 参数指定路径下的设备,不查 oracleasm listdisks 输出。即使 oracleasm 显示磁盘,只要这个参数没对上,就完全不可见。
- 默认值
'/dev/oracleasm/disks/*'是旧 ASMLib 模式,若你用 udev 创建了/dev/asm-*,就必须显式改成'/dev/asm*' - 多个路径混用(如
'/dev/oracleasm/disks/*','/dev/asm*')会导致 ASM 静默跳过部分磁盘,不报错也不提示 - NVMe 盘(
/dev/nvme0n1)需单独适配:udev 规则要匹配SUBSYSTEM=="block", KERNEL=="nvme[0-9]n[0-9]",且ASM_DISKSTRING必须包含对应通配符 - 安装界面中可手动修改 “ASM Disk Discovery Path”,填入
/dev/asm*或具体路径,别依赖默认值
磁盘被占用或权限未持久化
预检脚本只检查设备是否存在、是否可读、属主是否合规。哪怕 ls -l 看起来正常,只要底层有分区表、文件系统签名,或权限在重启后丢失,就会直接跳过。
- 运行
fdisk -l /dev/sdb,确认输出中无分区表;若有,用dd if=/dev/zero of=/dev/sdb bs=1M count=100清除 MBR 和签名 -
chown grid:asmadmin /dev/sdb && chmod 660 /dev/sdb的效果仅限当前会话,重启即失效 —— 必须靠 udev 规则固化权限 - 检查是否被其他进程占用:
lsof /dev/sdb或blkid /dev/sdb;若返回 UUID 或 TYPE,说明已有文件系统,ASM 会主动忽略该设备 -
asmcmd lsdsk返回空?先确认 ASM 实例已启动:su - grid -c "sqlplus / as sysasm @\"SELECT state FROM v$asm_instance;\""
KFOD 报错 Error 49802 initializing ADR
这不是磁盘问题,而是 Grid 的诊断框架(ADR)初始化失败,导致整个磁盘发现流程中断。常见于 $GRID_HOME 所在文件系统权限异常或空间不足。
- 日志中出现
Kfod result Error 49802 initializing ADR at /u01/app/grid,优先检查:df -h /u01是否满,ls -ld /u01/app/grid/diag是否可写 -
$ORACLE_BASE和$GRID_HOME必须归属grid:oinstall,且不能与数据库软件共用同一路径 - 别忽略
GRID_HOME下的diag子目录权限 —— 它由 CRS 自动创建,若父目录权限不对(如 root:root),后续所有诊断路径都会失败
真正卡住的从来不是“怎么配”,而是“配完之后 ASM 能不能跨进程、跨重启、跨用户稳定看到它”。路径、权限、WWID、参数四者缺一不可,且必须在所有节点上完全一致。


















