导读:本期聚焦于芒果创作的《Oracle RAC集群如何通过udev绑定ASM磁盘?完整配置步骤详解》,敬请观看详情。搭建Oracle RAC集群时,ASM磁盘的权限和属主问题一直是环境配置中最容易踩坑的环节。如果依赖手工执行chown和chmod,节点重启后权限会被重置,导致ASM实例无法识别磁盘。本文围绕udev规则绑盘这一方案展开,先分析为什么RAC环境推荐用udev管理多路径设备,再介绍scsi_id获取磁盘UUID的两种常见方式,然后给出多路径场景与普通场景下的规则文件写法,包括99-oracle-asmdevices.rules的完整配置示例、udevadm trigger生效命令以及验证权限是否持久化的方法,最后总结了规则匹配注意点和常见报错排查思路,帮助你在Linux平台上稳定完成ASM存储层的准备工作。

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

Oracle RAC集群如何通过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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。