裸金属服务器上ASM磁盘必须先用oracleasm标记为可识别,因设备名易变且ASM不接受未注册的原始块设备;创建磁盘组时须显式指定COMPATIBLE.ASM和AU_SIZE,并严格遵循fdisk→createdisk→scandisks→验证→ADD全流程。

裸金属服务器上 ASM 磁盘必须先标记为“可识别”
裸金属服务器没有虚拟化层,磁盘设备名(如 /dev/sdb)易因内核加载顺序或 SCSI 总线重扫而变动,直接在 CREATE DISKGROUP 里写死设备路径会失败。Oracle ASM 不接受未标记、未注册的原始块设备。
最稳妥的做法是用 oracleasm(即 ASMLib)封装一层逻辑标识——它把物理设备映射成稳定命名的 ASM 磁盘(如 DATA1),且由内核模块拦截 I/O,屏蔽底层路径漂移。
- 确认已安装匹配内核版本的
oracleasm-support和oracleasmlibRPM 包(注意:Oracle 19c+ 官方已弃用 ASMLib,但 11g/12c 在裸金属仍广泛使用) - 运行
/etc/init.d/oracleasm configure,启用服务并设为开机自启;关键选项:Default user: oracle、Default group: dba、Scan for ASM disks: yes - 用
fdisk /dev/sdb创建单主分区(如/dev/sdb1),**不要格式化**,也不要挂载 —— ASM 只需要裸块设备 - 执行
/etc/init.d/oracleasm createdisk DATA1 /dev/sdb1,成功后oracleasm listdisks应返回DATA1
创建磁盘组时必须指定 COMPATIBLE.ASM 参数
裸金属环境通常部署较老版本 Oracle(如 11.2.0.4),但磁盘组兼容性不匹配会导致后续无法扩容或升级。例如,用 11.2.0.4 的 ASM 实例创建磁盘组时,若未显式设 COMPATIBLE.ASM='11.2',默认值可能是 '10.1',这会禁用 ADVM、ACFS 等特性,且未来无法通过 ALTER DISKGROUP ... SET ATTRIBUTE 提升。
正确做法是在 CREATE DISKGROUP 语句中强制声明:
CREATE DISKGROUP DATA NORMAL REDUNDANCY
FAILGROUP fg1 DISK 'ORCL:DATA1' NAME DATA1
FAILGROUP fg2 DISK 'ORCL:DATA2' NAME DATA2
ATTRIBUTE 'compatible.asm' = '11.2',
'au_size' = '4M';
-
ORCL:DATA1是oracleasm注册后的 ASM 磁盘名,不是/dev/sdb1 -
au_size建议设为4M(而非默认 1M):裸金属 I/O 吞吐高,大 AU 减少元数据开销,提升大文件读写效率 - 如果只有一块盘(测试环境),冗余类型必须用
EXTERNAL REDUNDANCY,否则报错ORA-15018: diskgroup cannot be created
扩容磁盘组前务必检查磁盘是否被 ASM 实例“看到”
裸金属加新盘后,常出现 ALTER DISKGROUP DATA ADD DISK 'ORCL:NEW_DISK' 报 ORA-15032: not all alterations performed + ORA-15075: disk is not visible cluster-wide。这不是权限问题,而是新磁盘未被所有节点同步识别。
排查顺序必须是:
- 在新增磁盘的节点上运行
oracleasm scandisks,再oracleasm listdisks确认NEW_DISK出现在列表中 - 在 RAC 所有节点上分别执行
ls -l /dev/oracleasm/disks/,确保设备文件存在且属主为oracle:dba - 用
sqlplus / as sysasm连接本地 ASM 实例,查SELECT path FROM v$asm_disk WHERE header_status = 'PROVISIONED';—— 如果新盘状态是PROVISIONED,说明 ASM 已发现但尚未加入任何磁盘组;如果是空结果,说明根本没识别到 - 切忌直接改 udev 规则或硬链接设备文件:ASM 实例只信任
oracleasm管理的磁盘,绕过它会导致元数据损坏
裸金属 ASM 磁盘组性能调优的关键点
没有虚拟化抽象层,I/O 栈更短,但错误配置反而更容易打穿硬件瓶颈。两个常被忽略的细节:
-
disk_repair_time属性默认 3.6 小时,裸金属磁盘故障恢复快,建议设为1H(ALTER DISKGROUP DATA SET ATTRIBUTE 'disk_repair_time' = '1H';),避免临时离线盘长时间占用 rebalance 资源 - 如果使用 NVMe 盘,禁用操作系统 I/O 调度器:
echo none > /sys/block/nvme0n1/queue/scheduler;ASM 自身的条带和 rebalance 已足够智能,内核调度器反而引入延迟 - 裸金属常见多路径(multipath)配置,务必确认
asm_diskstring参数指向 multipath 设备(如/dev/mapper/mpatha),而不是底层路径(如/dev/sdb),否则 RAC 节点可能看到不同路径,导致磁盘组挂载失败
裸金属上 ASM 最容易出问题的环节不在创建,而在磁盘生命周期管理——新加一块盘,必须走完 fdisk → oracleasm createdisk → scandisks → LISTDISKS → v$asm_disk 验证 → ALTER DISKGROUP ADD 全流程,跳任何一步都可能让磁盘组处于“半可用”状态,后续维护成本陡增。


















