udev配置块设备属主¶
我在探索 添加Ceph OSDs (RAW磁盘) 遇到一个经常在存储集群中会遇到的问题,当服务器重启以后,原先在 ceph-volume raw prepare
命令中执行的子命令:
/usr/bin/chown -R ceph:ceph /dev/nvme0n1p1
当操作系统重启以后,磁盘设备会恢复到默认的 root
用户属主:
brw-rw---- 1 root disk 259, 1 Nov 30 16:31 /dev/nvme0n1p1
备注
实际最后这个设备文件属性还是通过Ceph OSD自身的内置功能去设置的,并没有使用本文的 udev
设置方法,不过,本文设置 udev
方法具有普适性,可作为参考。
这个问题实际上在 Oracle ASM 存储中(作为Oracle RAC集群的存储基础)也有类似要求(重启后要求设备属主属于 oinstall
),也就是说对于分布式系统,应用进程必须能直接访问存储块设备(raw disk),具备对应权限。
我的目标就是重启系统以后,能够自动把 /dev/nvme0n1p1
恢复回 ceph
属主,所以参考 Oracle ASM的配置方法,对磁盘设备进行如下udev rule设置:
检查设备在
udev
中的固定uuid以及变量命名方法:udevadm info --query=all --name=/dev/nvme0n1p1 | grep -i uuid
输出显示:
S: disk/by-partuuid/f3d76ad0-b809-4951-bcff-25309ed6b366
E: ID_PART_TABLE_UUID=d0203fa3-097b-48cb-8844-601a33239b3e
E: ID_PART_ENTRY_UUID=f3d76ad0-b809-4951-bcff-25309ed6b366
E: DEVLINKS=/dev/disk/by-path/pci-0000:06:00.0-nvme-1-part1 /dev/disk/by-id/nvme-SAMSUNG_MZVL21T0HCLR-00B00_S676NF0R908202-part1 /dev/disk/by-partuuid/f3d76ad0-b809-4951-bcff-25309ed6b366 /dev/disk/by-partlabel/primary /dev/disk/by-id/nvme-eui.002538b911b37f97-part1
创建
/etc/udev/rules.d/99-perm.rules
ACTION=="add|change", ENV{ID_PART_ENTRY_UUID}=="f3d76ad0-b809-4951-bcff-25309ed6b366", OWNER="ceph", GROUP="ceph"
这里可以看到,根据 udevadm info --query=all --name=/dev/nvme0n1p1 | grep -i uuid
输出中显示 E
表示 ENV
,所以 E: ID_PART_ENTRY_UUID
在规则中就是 ENV{ID_PART_ENTRY_UUID}
,填写对应的 uuid
即可。
重新加载规则并触发:
udevadm control --reload-rules udevadm trigger --type=devices --action=change
然后检查磁盘属主:
ls -lh /dev/nvme0n1p1
就可以看到自动修改成 ceph
brw-rw---- 1 ceph ceph 259, 1 Nov 30 16:31 /dev/nvme0n1p1