必须先让所有节点识别同一块物理磁盘的唯一标识(UUID),否则 grid 安装时会报 ORA-15018: diskgroup cannot be created 或 no disks found;需用 /usr/lib/udev/scsi_id -g -u -d /dev/sdb 验证各节点输出完全一致,不一致则需启用 VMware disk.EnableUUID="TRUE" 并重启虚拟机,再通过 udev 绑定 ASM 设备(裸盘用 KERNEL=="sd?",分区用 KERNEL=="sd?1"),多路径环境必须绑定 /dev/mapper/xxx 而非 /dev/sdX,且确保 multipathd 已启用、SELinux 彻底关闭、grid 用户可读设备。

必须先让所有节点识别同一块物理磁盘的唯一标识(UUID),否则 grid 安装时会报 ORA-15018: diskgroup cannot be created 或 no disks found —— 这不是磁盘没挂,而是 udev 没绑对、或多路径没生效。
确认共享磁盘是否可见且 UUID 一致
在每个 RAC 节点上执行:
-
/usr/lib/udev/scsi_id -g -u -d /dev/sdb(替换为你的实际设备名,如sdc、sdd) - 输出应完全相同;若不同,说明 VMware 或虚拟化层未启用
disk.EnableUUID = "TRUE",需编辑 .vmx 文件并重启虚拟机 - 注意:不要用
lsblk或fdisk -l直接比对设备名,它们可能因扫描顺序不同而错位;只认scsi_id输出的 WWID
用 udev 绑定 ASM 设备(推荐,无需 asmlib)
CentOS 7 默认不带 oracleasmlib,且 Oracle 19c 已弃用 asmlib 支持,直接走 udev 是最稳路径:
- 若使用裸盘(不分区):
KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29d4b8e7a3f1e2d3c4b5a6f7e8", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660" - 若已分区(如
/dev/sdb1),则把KERNEL=="sd?"改成KERNEL=="sd?1",$name改成$parent - 规则文件必须存为
/etc/udev/rules.d/99-oracle-asmdevices.rules,权限 644,且所有节点内容完全一致 - 重载后验证:
udevadm control --reload-rules && udevadm trigger --type=devices --action=change,再检查ls -l /dev/asm*是否指向dm-*或sd?1
多路径环境下绑定 dm 设备(生产环境必做)
当底层存储走 multipath(如 iSCSI、FC),/dev/sdX 是不稳定路径,必须绑定到 /dev/mapper/xxx 或 /dev/dm-X:
- 先运行
multipath -ll确认 WWID 和 alias(如mpathb (36000c29d4b8e7a3f1e2d3c4b5a6f7e8)) - udev 规则写成:
KERNEL=="dm-*", ENV{DM_UUID}=="mpath-36000c29d4b8e7a3f1e2d3c4b5a6f7e8", SYMLINK+="asm_data1", OWNER="grid", GROUP="asmadmin", MODE="0660" - 关键点:ENV{DM_UUID} 值必须和
multipath -ll输出的括号内完全一致,包括前缀mpath-,大小写敏感 - 别漏掉
systemctl enable --now multipathd,否则dm-设备根本不会生成
验证 grid 用户能否访问绑定后的设备
这步常被跳过,但它是安装失败的高频原因:
- 切换到
grid用户:sudo -u grid bash - 执行:
asmcmd afd_lsdsk(若启用了 AFD)或ls -l /dev/asm*+dd if=/dev/asm-disk1 of=/dev/null bs=8k count=1 - 必须看到可读(
brw-rw----)、属主为grid:asmadmin、且无 permission denied - 若提示
Operation not permitted,检查 SELinux 是否真关闭(getenforce返回Disabled,不只是Permissive)
最易忽略的是:VMware 虚拟机里没开 disk.EnableUUID,导致两个节点看到的 scsi_id 不同;其次是 multipath 环境下仍用 /dev/sdX 写 udev 规则,结果 grid 启动时设备名漂移。这两处一错,后续所有 ASM 操作都会卡在“找不到磁盘”。











