Oracle 19c安装时ASM“看不见”磁盘的根本原因有三类:udev规则未生效、设备被占用、发现路径配置错误;19c已弃用ASMLib,强行安装会污染磁盘头导致asmfd初始化失败;需确认udev重载、属主权限、扫描路径匹配(如设为/dev/asm-*)、NVMe/multipath适配及/u01挂载选项不含nosuid。
Oracle 19c 安装时磁盘阵列“看不见”,不是没挂上,是 ASM 根本没扫到
oracle 19c 安装过程中 gridsetup.sh 报“未找到可用磁盘”,和物理磁盘是否存在无关,而是 asm 实例启动前的设备发现阶段失败。此时 ls -l /dev/sdb 看起来权限正常、fdisk -l /dev/sdb 能列出分区,但 asmcmd lsdsk 为空 —— 这说明设备节点存在,但 grid infrastructure 没把它当作 asm 候选盘纳入扫描范围。
根本原因集中在三类:udev 规则未生效、设备被占用(哪怕没挂载)、发现路径配置错位。尤其注意:19c 已彻底弃用 ASMLib,强行安装或启用 oracleasm 不仅无效,还会污染磁盘头,导致后续 asmfd 初始化失败。
为什么装了 ASMLib 还是看不到磁盘?因为 19c 已不认它
在 RHEL8+/OEL8+ 或 UEK6+ 内核上,modprobe oracleasm 直接报 Module oracleasm not found 是常态 —— Oracle 从 12.1 就标记为 deprecated,19c 中内核模块和用户态工具均被移除。即使你手动装了旧版 rpm 包,也会引发冲突:
-
oracleasm initialize写入的磁盘头与 ASMFD 的过滤逻辑不兼容,kfed read /dev/sdb可能报KFED-00322: Invalid OSM block type -
oracleasm scandisks成功,但asmcmd lsdsk仍为空,且crsctl stat res ora.asm显示 online,ps -ef | grep asm_pmon却找不到进程 —— ASM 实际未启动 - 混用会导致 CRS 资源异常、OCR 磁盘组无法识别、静默安装响应文件中
oracle.install.asm.diskgroup.name参数被忽略
正确做法是彻底卸载:yum remove oracleasmlib oracleasm-support,再执行 dd if=/dev/zero of=/dev/sdb bs=1M count=100 清磁盘头。
UDEV 规则写对了,但磁盘还是不显示?检查这四点
裸设备 + udev 是 19c 的基础支撑方式,但规则生效≠ASM 能识别。常见断点如下:
- 规则未 reload:执行
udevadm control --reload-rules && udevadm trigger后,必须用ls -l /dev/asm-diskb确认属主已变成grid:asmadmin、权限是0660,不能只看udevadm info输出 - 路径不匹配:gridSetup.sh 默认扫描
/dev/oracleasm/disks/(ASMLib 遗留路径),而你建的是/dev/asm-diskb;安装界面需手动把ASM Disk Discovery Path改成/dev/asm-*或具体路径如/dev/mapper/mpatha - NVMe 盘漏适配:
/dev/nvme0n1不匹配sd*模式,udev 规则必须用SUBSYSTEM=="block", KERNEL=="nvme[0-9]n[0-9]",否则scsi_id -g -u -d /dev/nvme0n1返回空 - 多路径设备名不一致:节点间
ls -l /dev/mapper/输出不同,说明 multipath 配置未同步;检查/etc/multipath.conf中wwid字段是否与scsi_id -g -u -d /dev/sda输出完全一致(含大小写、空格)
ASMFD 启用后 asmcmd afd_lsdsk 仍为空?先查 ADR 初始化是否卡住
asmfd -i 执行成功不代表磁盘就绪。Kfod result Error 49802 initializing ADR 是典型假死信号 —— 不是磁盘问题,而是 Grid 的诊断框架(ADR)初始化失败,整个磁盘发现流程直接中断。
检查步骤:
- 运行
df -h /u01,确认$GRID_HOME所在文件系统未满(尤其/u01/app/grid/diag) - 确认
grid用户对/u01/app/grid全路径有读写权限,重点检查diag/子目录是否可写 - 验证
ORACLE_BASE和GRID_HOME归属:必须是grid:oinstall,且不能与数据库软件共用同一路径 - 执行
crsctl stat res ora.asmfd -p | grep ENABLED,输出应为ENABLED=1;若为 0,需crsctl enable resource ora.asmfd
最易忽略的是:/u01 挂载选项含 nosuid(常见于 RHEL6/7 的 fstab 配置),会导致 $GRID_HOME/bin/oracle 无法以 SUID 方式提权,进而使 ASMFD 无法加载设备过滤器 —— 此时必须修改 /etc/fstab 并重启。



















