根本原因是Grid Infrastructure预检无法识别裸设备路径;需确保磁盘无分区/文件系统、禁用ASMLIB、用udev+WWID创建稳定符号链接(如/dev/asm-diskb),并验证多节点路径一致。

gridSetup.sh 静默安装失败:找不到 ASM 磁盘
根本问题不是磁盘不存在,而是 Grid Infrastructure 安装程序在 pre-check 阶段无法识别裸设备路径。常见现象是 gridSetup.sh 卡在“Performing pre-checks”后静默退出,或报 ORA-15018、ORA-15042。
必须确保磁盘满足三个条件:
- 无分区表、无文件系统:
fdisk -l /dev/sdb应显示 “Disk /dev/sdb doesn’t contain a valid partition table”;若存在,用dd if=/dev/zero of=/dev/sdb bs=1M count=100清除 MBR 和签名 - 禁用 ASMLIB(Oracle 12c R2 起官方弃用):不安装
oracleasm相关 RPM 包,不运行/etc/init.d/oracleasm - 使用 udev 创建稳定设备名:通过
scsi_id -g -u -d /dev/sdb获取 WWID,再在/etc/udev/rules.d/99-oracle-asm.rules中写入规则,例如:KERNEL=="sdb", SUBSYSTEM=="block", PROGRAM=="/sbin/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="36000c29a7e5b8f1e1d0a4c3b2a1f0e9", SYMLINK+="asm-diskb", OWNER="grid", GROUP="asmadmin", MODE="0660" - 重载规则并验证:
udevadm control --reload-rules && udevadm trigger,然后检查ls -l /dev/asm-diskb是否属主为 grid:asmadmin
asmca 静默创建磁盘组前 ASM 实例未启动
即使 GI 安装完成,asmca 或 sqlplus / as sysasm 仍可能报 ORA-01034: ORACLE not available 或 ORA-29701: unable to connect to Cluster Manager——这说明 ora.asm 资源未注册或未启动。
手动确认与修复步骤:
- 切换到
grid用户:su - grid - 检查 ASM 实例状态:
crsctl status res ora.asm -t;若为OFFLINE,执行crsctl start res ora.asm - 验证 ASM 实例是否可连:
sqlplus / as sysasm→ 运行SELECT instance_name, status FROM v$instance;,必须返回+ASM和OPEN - 若启动失败,检查
$ORACLE_BASE/diag/crs/<hostname>/crs/trace/crsd.log,常见原因是 OCR 磁盘组未挂载或ora.diskmon资源异常
使用 asmcmd 或 SQL*Plus 静默添加磁盘到磁盘组
不能依赖图形化 asmca,生产环境必须用命令行方式创建和扩容磁盘组,确保可脚本化、可复现。
两种主流方式各适用场景:
-
SQL*Plus 方式(推荐用于首次创建):
连接sqlplus / as sysasm后执行:CREATE DISKGROUP DATA_DG EXTERNAL REDUNDANCY DISK '/dev/asm-diskb' ATTRIBUTE 'compatible.asm'='19.0', 'compatible.rdbms'='19.0';
注意:EXTERNAL REDUNDANCY表示不启用 ASM 镜像(依赖底层存储 RAID),compatible.*必须与 Oracle 19c 版本严格匹配,否则后续 DB 无法挂载 -
asmcmd 方式(推荐用于在线扩容):
asmcmd进入交互模式后:addisk DATA_DG /dev/asm-diskc
或单行执行:asmcmd adddisk DATA_DG /dev/asm-diskc
添加后立即触发 rebalance,如需控制速度,另起会话执行:ALTER DISKGROUP DATA_DG REBALANCE POWER 5;(POWER 值 1–11,值越大越快,但 I/O 压力越高)
磁盘路径不一致导致 RAC 或重启后磁盘组无法挂载
这是最隐蔽也最致命的问题:单节点安装时用 /dev/sdb 创建了磁盘组,但服务器重启后该盘变成 /dev/sdc,或在 RAC 多节点中各节点看到的原始设备名不同——ASM 实例启动时找不到磁盘,直接报 ORA-15042 并拒绝挂载磁盘组。
唯一可靠解法是彻底放弃原始设备名,只使用 udev 生成的符号链接:
- 所有
CREATE DISKGROUP语句、dbca建库响应文件、asmcmd命令中,磁盘路径必须写成/dev/asm-diskb这类稳定名,而非/dev/sdb - 验证多节点一致性:
ssh node2 ls -l /dev/asm-disk*,确保符号链接指向相同 WWID 的物理盘 - 禁止在 udev 规则中使用
KERNEL=="sd*"这类模糊匹配;必须绑定 WWID 或 serial,否则 multipath 切换或内核重扫设备时极易错乱
udev 符号链接一旦配置错误,后续所有操作都会失效;它不是可选优化项,而是 ASM 在 Linux 上可用的前提。


















