结论是:VMware部署Oracle 11g(尤其RAC)时,ASM稳定识别裸设备取决于磁盘创建(vmware-vdiskmanager -t 2 -a lsilogic)、VMX配置(scsiN.sharedBus="virtual"、independent-persistent模式、disk.locking="false")和Linux权限(udev固化/dev/mapper属主)三者严格对齐,缺一即导致asmca不可见盘或crs启动失败。

直接说结论:在 VMware 等虚拟化平台部署 Oracle 11g(单机或 RAC)时,存储配置的核心不是“能不能用”,而是“ASM 能不能稳定识别裸设备”——这取决于磁盘创建方式、VMX 配置、Linux 设备权限三者是否严格对齐。错一个环节,asmca 就看不到盘,或者 crsctl start crs 启动失败。
vmware-vdiskmanager 创建磁盘必须用 -t 2 和 -a lsilogic
Oracle ASM 对 SCSI 控制器类型和磁盘模式极其敏感。用错参数会导致 Linux 内核无法将磁盘识别为可共享的块设备:
-
-t 2表示创建“独立持久型”磁盘(independent-persistent),这是共享磁盘的前提;用-t 0(默认)或-t 1会导致写入被缓存或锁定,RAC 节点间看到的 LUN 不一致 -
-a lsilogic是必须项,buslogic或pvscsi在 OL6/7 上常导致scsi_id获取失败或udev规则不生效 - 大小单位建议统一用
Mb(如-s 4096Mb),避免Gb解析歧义(某些版本vmware-vdiskmanager把4Gb当作 4 × 1000³ 字节而非 4 × 1024³)
vmx 文件中 scsiN.sharedBus = "virtual" 必须显式设置
仅靠 GUI 添加磁盘不会自动启用共享总线模式,必须手动编辑 .vmx 文件,否则两台虚拟机无法同时以读写方式打开同一块 VMDK:
- 每个共享磁盘对应行必须含
scsi1:1.mode = "independent-persistent"—— 缺少该行,Linux 下可能挂载为只读,或触发ORA-15081错误 -
scsi1.sharedBus = "virtual"是关键开关,设成"none"或漏写,oracleasm scandisks会完全找不到设备 -
disk.locking = "false"和diskLib.dataCacheMaxSize = "0"必须添加,否则 VMware 自动加锁机制会阻塞 ASM 的并发 I/O
/dev/mapper/xxx 权限在 reboot 后丢失是常态
使用 LVM 划分 ASM 磁盘(如 lv_asm1)时,重启后设备属主自动变回 root:root,grid 用户无法访问:
- 不能只靠
chown grid:asmadmin /dev/mapper/ora_vg-lv_asm1临时修复,必须用udev规则固化 - 规则文件如
/etc/udev/rules.d/99-oracle-asm.rules应包含:KERNEL=="dm-*", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="360050768028000000000000000000001", OWNER="grid", GROUP="asmadmin", MODE="0660" - 验证是否生效:
udevadm trigger后检查ls -l /dev/mapper/ora_vg-lv_asm1,且oracleasm listdisks能返回盘名
OCR 磁盘组必须用 Normal 冗余且至少 3 块盘(RAC 场景)
RAC 启动依赖 OCR 和 Voting Disk,但很多人误以为 1 块盘也能建 OCR 磁盘组,结果集群服务反复崩溃:
-
CREATE DISKGROUP OCR NORMAL REDUNDANCY DISK 'ORCL:OCR1', 'ORCL:OCR2', 'ORCL:OCR3'—— 少于 3 块盘,crsctl check crs显示CRS-4639,ocrcheck报PROT-1 - 单节点 ASM 可用
EXTERNAL REDUNDANCY,但 RAC 强制要求NORMAL(即镜像),否则root.sh执行到一半静默退出 - 所有 OCR 盘必须大小一致(官方要求最小 1G,实践中建议 ≥2G),否则
asmca图形界面不显示该磁盘
最容易被忽略的是:VMware 中关闭虚拟机必须用“关机”而非“挂起”,否则下次启动时共享磁盘锁未释放,oracleasm scandisks 返回空,asmca 界面一片空白——这个状态不会报错,只会让你反复检查 udev 规则,实际只需强制关机再启动一次。











