最稳匹配SCSI设备用ID_WWN(次选ID_SERIAL),ASM规则须设OWNER="grid"、GROUP="asmadmin"、MODE="0660",规则文件存于/etc/udev/rules.d/99-asm.rules并重载生效。
udev规则里用什么匹配SCSI设备最稳
直接看 /dev/sd* 设备名来写规则是坑,重启、加盘、控制器变动后顺序全乱。真正可靠的是用 scsi 设备的唯一标识:id_serial 或更推荐的 id_wwn(world wide name),它由磁盘固件生成,不随系统识别顺序变化。
- 查设备真实 WWN:
udevadm info --name=/dev/sdb --query=property | grep ID_WWN - 如果没
ID_WWN(老盘或某些 HBA),退而求其次用ID_SERIAL,但得确认它不含空格或特殊字符(否则规则解析失败) - 别用
ID_PATH——它依赖 PCI 拓扑,换插槽就失效 - 验证匹配是否准确:
udevadm test /sys/class/block/sdb看输出里规则是否被触发、变量是否赋值成功
ASM磁盘规则必须设对的三个权限项
Oracle ASM 不只认设备存在,还严格检查属主、组和权限。缺一不可,且组必须是 asmadmin(或你实际配置的 ASM 管理组)。
-
OWNER="grid":必须是运行 ASM 实例的用户,不是oracle(除非你真这么配) -
GROUP="asmadmin":和asmadmin组名完全一致,大小写敏感;提前用getent group asmadmin确认组存在 -
MODE="0660":不能是0600(ASM 实例起不来),也不能是0664(可能被审计策略拦截) - 漏掉
SYMLINK+="asm-disk1"倒没关系,但建议加上,方便后续用/dev/asm-disk1这种名字在asmca里选盘
规则文件放哪、怎么加载才生效
放错位置或没重载,改了等于白改。RHEL/CentOS 7+ 和 Oracle Linux 默认只读取 /etc/udev/rules.d/99-asm.rules 这类带数字前缀的文件,且要求后缀是 .rules。
- 路径必须是:
/etc/udev/rules.d/99-asm.rules(数字确保在其他规则之后执行) - 写完立刻测试:
udevadm control --reload-rules && udevadm trigger --subsystem-match=block - 别信
start_udev——这命令在新版系统里已废弃,无效 - 验证结果:
ls -l /dev/asm-disk*看属主/组/权限;udevadm info --name=/dev/asm-disk1 | grep -E "(OWNER|GROUP|MODE)"看规则是否命中
常见报错和对应排查点
ERROR: diskgroup XXX is not mounted 或 ORA-15018: diskgroup cannot be created 很多时候根本不是 ASM 配置问题,而是 udev 规则没生效导致盘权限不对。
-
Failed to issue method call: No such file or directory:udevadm control --reload-rules执行失败,检查文件语法(比如漏了双引号、等号两边有空格) - 设备出现在
/dev/asm-disk*但属主是root:root:规则里OWNER/GROUP拼错了,或对应用户/组不存在 -
Device /dev/sdb not found在asmca里:不是 udev 问题,是ASMLIB被启用了(禁用它:service oracleasm stop && chkconfig oracleasm off) - 同一块盘被绑出两个链接(如
asm-disk1和asm-disk1-backup):规则里用了==而不是==匹配,或多个规则同时命中,删掉冗余规则
最麻烦的其实是 WWN 获取时机——必须在盘被系统识别后查,如果刚插上就跑 udevadm info,可能返回空。先 ls /sys/class/block/ 确认设备名存在,再查属性。另外,虚拟化环境(VMware/VirtualBox)里 SCSI WWN 可能不唯一,这时只能退到 ID_SERIAL 并手动去重校验。










