必须在所有rac节点的.vmx文件中添加disk.enableuuid="true"并关机重启,确保scsi_id跨节点输出一致的33位uuid,否则udev规则失效、asm无法识别磁盘。

必须在所有RAC节点上启用 disk.EnableUUID = "TRUE",否则 scsi_id 获取不到稳定唯一 UUID,udev 规则会静默失效,ASM 识别磁盘失败。
确认虚拟机磁盘 UUID 可读且跨节点一致
VMware Workstation 或 ESXi 环境下,若未开启磁盘 UUID 支持,scsi_id -g -u -d /dev/sdb 会返回空或重复值,后续所有绑定都不可靠。
- 编辑每个节点的
.vmx文件,添加一行:disk.EnableUUID = "TRUE" - 必须关机后重启虚拟机(热添加不生效)
- 重启后执行:
scsi_id -g -u -d /dev/sdb,输出应为 33 位十六进制字符串(如3613e0937b040da0801c0cd8afee9a263) - 同一块共享盘在两个节点上运行该命令,输出必须完全相同;不一致说明未真正共享或 VMware 设置未生效
CentOS 7+ 中 scsi_id 路径和参数必须写对
scsi_id 在 CentOS 7+ 不再位于 /sbin/,而是在 /usr/lib/udev/;路径错误会导致 udev 规则匹配失败且无任何报错提示。
- 正确调用方式:
/usr/lib/udev/scsi_id -g -u -d /dev/$name(注意是$name,不是$parent,除非你绑的是分区设备) - 不要预先对 ASM 磁盘做
fdisk分区 —— Oracle 官方明确要求使用原始块设备(如/dev/sdb),分区后 ASM 可能拒绝识别 - 若使用 multipath 设备,应基于 multipath 设备名(如
/dev/mapper/mpatha)获取 UUID,而非底层 sdX
编写和加载 udev 规则的实操要点
规则文件位置固定为 /etc/udev/rules.d/99-oracle-asmdevices.rules,但字段含义和加载方式在不同版本差异明显。
- 使用
SYMLINK+="asm-diskb"(不是NAME="asm-diskb"),因为NAME在新版 udev 中已被弃用,且仅创建设备节点不生成符号链接,ASM 无法发现 - 每行规则只绑一块盘,
RESULT值必须与对应磁盘的scsi_id输出严格一致(区分大小写、无空格) - 加载规则不靠
start_udev(RHEL6 旧法),而是:udevadm control --reload-rules && udevadm trigger --type=devices --action=change - 触发后立即验证:
ls -l /dev/asm*,应看到brw-rw----权限、属主grid、属组asmadmin;若仍是lrwxrwxrwx指向sdb等,说明规则未命中
最容易被忽略的是:规则中 PROGRAM 调用的路径是否真实存在、$name 和 $parent 是否用混、以及虚拟机是否真的重启过 —— 这三项出错,udevadm test 也看不出问题,只会让 ASM 启动时反复报 “no disks found”。











