在RHEL5中更改LVM LV设备节点的所有者

第一次使用serverfault,请原谅任何违反礼仪。

我在服务器的本地存储中创build了多个LVM2逻辑卷,并且希望其中一个设备节点(不是文件系统或挂载点)由root:root以外的用户/组拥有。

这几乎是默认的RHEL5服务器。 我知道设备节点是在LVM扫描pv / vg / lvs磁盘后在引导时dynamic创build的。 我不太确定udev,mapper和lvm如何相互作用来创build这些节点,而configuration文件规范对于没有太多经验的人来说有点神秘。

会有更多的lvs需要遵循,也需要备用权限,但是我理想的情况是保持卷组中的其他lvs为root:root,并且只更改特定的lvs。

任何人都可以帮我把这个弄出来吗? 我一直在Google上search几个小时。

在此先感谢Tony


更新:

我通过以下完成了这一点。 这可能是一个迂回的做事方式,但这只是一个临时的环境(有名的遗言!)。 哦,我也可能想删除打印到/ tmp / foo的行。

[root@xxxxxxx rules.d]# **cat /etc/udev/rules.d/11-lvm.rules** ACTION=="add|change", KERNEL=="dm-*", PROGRAM="/bin/sh -c /etc/udev/scripts/oracle_perms.sh" [root@xxxxxxx rules.d]# **cat /etc/udev/scripts/oracle_perms.sh** #!/bin/bash echo "DEVPATH=$DEVPATH" >> /tmp/foo MAJMIN=`cat /sys${DEVPATH}/dev` echo "MAJMIN=$MAJMIN" >> /tmp/foo MAJ=`echo ${MAJMIN} | awk -F: '{ print $1 }'` MIN=`echo ${MAJMIN} | awk -F: '{ print $2 }'` DEVNODE=`/sbin/dmsetup info -j ${MAJ} -m ${MIN} | grep Name | awk '{ print $2 }'` echo "DEVNODE=${DEVNODE}" >> /tmp/foo echo "${DEVNODE}" | grep ora >/dev/null 2>&1 if [ "$?" == "0" ]; then echo "Making change...." >> /tmp/foo chown oracle:dba /dev/mapper/${DEVNODE} chmod 660 /dev/mapper/${DEVNODE} ls -l /dev/mapper/${DEVNODE} >> /tmp/foo else echo "No 'ora' name detected. No change necessary." >> /tmp/foo fi 

请注意,上面的解决scheme自动更改名称中使用“ora”创build的ANY LV。 嘿,它现在工作。

以下应该工作(必要时适应):

 # cat /etc/udev/rules.d/99-custom.rules ENV{DM_NAME}=="system-test", ACTION=="add|change", MODE="0664", OWNER="michael", GROUP="disk", PROGRAM="/bin/logger /dev/$env{DM_NAME} owner changed to michael", SYMLINK+="oracle-$env{DM_NAME}" 

那么你应该得到的结果是:

 # lvcreate -L 1G /dev/system -n test # ls -al /dev/dm-9 /dev/oracle-system-test /dev/system/test /dev/mapper/system-test brw-rw-r-- 1 michael disk 253, 9 2009-08-08 01:20 /dev/dm-9 brw-r----- 1 root disk 253, 9 2009-08-08 01:20 /dev/mapper/system-test lrwxrwxrwx 1 root root 4 2009-08-08 01:20 /dev/oracle-system-test -> dm-9 lrwxrwxrwx 1 root root 23 2009-08-08 01:20 /dev/system/test -> /dev/mapper/system-test 

我无法弄清楚如何修改由LVM创build的实际设备节点,但我能够修改设备映射程序节点。 然后,我添加了一个符号链接oracle来访问它,这是一个黑客,但工程。

(我刚才的回答有点急,没有经过检验,但我真的很好奇,怎么做才对:)