/dev/sdx权限重启后丢失是因为udev动态生成设备节点且不固化权限,必须用scsi_id提取wwid并编写严格匹配的udev规则绑定owner、group和mode。

为什么/dev/sdX权限重启后总丢
因为Linux内核每次加载SCSI设备时,/dev/sdX节点由udev动态生成,默认属主是root:disk,权限是0660。你手动chown grid:asmadmin /dev/sdc只改当前节点,下次重启、多路径重载或内核模块重载后,/dev/sdc可能已指向另一块物理盘——ASM实例一启动就报ORA-15025或ORA-15031。
必须用scsi_id+udev规则固化别名和权限
裸盘唯一标识是SCSI WWID(不是设备名),得靠scsi_id提取它,再写udev规则绑定固定路径+权限。操作前先确认:
-
/dev/sdX是裸盘:运行fdisk -l /dev/sdf,输出必须含Disk /dev/sdf doesn't contain a valid partition table - 取WWID要加
--whitelisted(RHEL/CentOS 8.5+、OL 8+必需):/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdf - 同一磁盘在RAC两个节点上,上述命令输出必须**完全一致**(含空格),否则规则不匹配
/etc/udev/rules.d/99-oracle-asmdevices.rules怎么写才生效
规则文件位置、格式、顺序都卡得死。必须:
- 存为
/etc/udev/rules.d/99-oracle-asmdevices.rules,权限644,属主root:root - 每行末尾不能有空格,等号两侧不留空格,引号用英文双引号
- 必须含
ENV{DEVTYPE}=="disk"过滤掉分区和LVM设备 - 用
PROGRAM调scsi_id全路径,RESULT值严格匹配上一步输出(一字不差) - 用
OWNER="grid"、GROUP="asmadmin"、MODE="0660",不能只设GROUP
示例(以/dev/sdf为例):
KERNEL=="sd*", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/$name", RESULT=="3604fe8d100d5d230b888210a00000038", OWNER="grid", GROUP="asmadmin", MODE="0660"
规则写了但权限还是不对?三步快速验证
udev规则不是“写完就生效”,容易卡在中间环节:
- 先重载规则:
udevadm control --reload-rules,再触发扫描:udevadm trigger --subsystem-match=block - 查设备是否被规则命中:
udevadm info --name=/dev/sdf | grep -E "(OWNER|GROUP|MODE)",输出应含OWNER="grid"等字段 - 确认
grid用户UID和asmadmin组GID在RAC双节点上**完全一致**(id grid比对),否则OWNER设置无效
最常被忽略的是:RAC双节点的scsi_id输出不一致,或grid用户UID不同——这时规则再准也白写。











