在Oracle RAC集群的部署流程中,存储层的准备工作直接决定整个集群能否稳定运行。Oracle 11g之后推荐使用UDEV规则替代ASMLIB来绑定ASM磁盘,其核心目标是保证多路径设备在系统重启后依然拥有固定的名称、属主和权限。没有udev规则约束的情况下,手工执行chown grid:asmadmin和chmod 660设置的权限会在重启后失效,ASM实例启动时读取磁盘失败,CRS资源随之异常。本文将完整演示Linux平台下udev绑定ASM磁盘的思路、步骤和验证方法。

一、为什么RAC环境需要udev绑定磁盘
RAC是多节点共享存储的架构,所有节点必须以完全一致的方式访问同一块LUN。生产环境通常会配置multipath多路径软件做链路冗余,此时每个LUN在操作系统层面会同时存在多条路径设备(如/dev/sdb、/dev/sdc都指向同一个LUN),以及一个聚合后的多路径设备/dev/mapper/mpathX。如果直接把这些裸设备交给ASM使用,会面临两个问题:一是设备名在重启或存储链路抖动后可能漂移,sdb可能变成sdc;二是设备的属主默认是root,ASM进程以grid用户运行,没有读写权限。
udev规则恰好能同时解决这两个问题。通过scsi_id获取的UUID在存储层面是全局唯一且永不变化的,以UUID作为匹配条件创建别名设备,无论系统如何重启,别名始终指向同一块物理LUN。规则中还可以直接指定OWNER、GROUP和MODE,权限设置由内核层面的设备管理器自动完成,不再依赖人工操作或rc.local脚本,这是RAC存储标准化的推荐做法。
此外,udev规则是纯文本配置,不依赖任何额外软件包,相比ASMLIB更加轻量,且在Oracle 19c之后的版本中ASMLIB支持力度减弱,udev已经成为主流选择。
二、获取磁盘UUID并确认设备信息
绑定规则的前提是拿到每块磁盘稳定的唯一标识。不同Linux版本获取UUID的命令略有差异:RHEL 6及之前使用/sbin/scsi_id -g -u -d /dev/sdb,RHEL 7之后推荐使用/usr/lib/udev/scsi_id -g -u /dev/sdb。参数-g表示忽略白名单外的设备也照常输出,-u表示输出符合udev规范的UUID格式。
可以写一个简单循环批量获取所有候选盘的UUID:
# RHEL 7环境批量获取磁盘UUID for i in b c d e f; do echo "sd$i : `/usr/lib/udev/scsi_id -g -u /dev/sd$i`" done
输出结果类似sd对应一串形如3600508b4000的SCSI UUID。如果环境配置了多路径,应先执行multipath -ll确认每个mpath设备聚合了哪些sd设备,然后基于mpath设备的UUID来编写规则,这样规则只匹配聚合设备,不会和底层路径设备冲突。
三、编写udev规则文件
规则文件统一放在/etc/udev/rules.d目录下,命名建议为99-oracle-asmdevices.rules,数字前缀保证它在其他规则之后执行。普通sd设备的规则写法如下:
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u /dev/%k", RESULT=="3600508b40001a2b3c4d5e6f", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660"
这条规则的含义是:匹配所有sd开头的块设备,调用scsi_id程序取其UUID,当返回值等于指定UUID时,创建别名asm-disk1,并把属主设为grid、属组设为asmadmin、权限设为0660。多路径环境则改为匹配dm设备:
KERNEL=="dm-*", SUBSYSTEM=="block", ENV{DM_UUID}=="mpath-3600508b40001a2b3c4d5e6f", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660"
每块ASM盘写一行规则,磁盘较多时也可以用PROGRAM输出配合多个RESULT来精简。注意所有比较运算符必须是双等号,UUID必须与scsi_id实际输出完全一致,多一个空格都会导致匹配失败。
四、生效规则并验证结果
规则文件保存后执行以下命令使其生效,无需重启系统:
# 重新加载规则并触发块设备事件 /sbin/udevadm control --reload-rules /sbin/udevadm trigger --type=devices --action=change # 验证别名是否生成 ll /dev/asm-disk*
正常的输出应该显示别名链接指向底层设备,且属主为grid、属组为asmadmin、权限为brw-rw----。如果别名没有生成,可以用udevadm test /block/sdb模拟规则执行过程,观察哪一条规则没有命中。验证权限的另一个关键动作是重启服务器后再检查一次/dev/asm-disk*的属性,确认权限确实持久生效,这一步千万不能省略。
最后在配置ASM磁盘组时,路径填写/dev/asm-disk*即可,通过别名访问可以彻底规避设备名漂移风险。如果使用图形界面的asmca创建磁盘组,将磁盘发现路径改成/dev/asm*就能扫描到这些盘。常见排错方向包括:规则中UUID拼写错误、属组名与CRS安装时的asmadmin组不一致、multipath的user_friendly_names参数导致UUID格式变化,逐项核对后基本都能定位问题。
Oracle RACudev绑定ASM磁盘修改时间:2026-09-01 17:14:31