如何永久更改 LVM 卷的所有权(或至少是组)?
我想我必须使用udev,但我不知道规则应该是什么样子?
假设我想将 LVM/磁盘的所有权更改为用户/组 virtualbox,我该怎么做?
答案1
在 Debian(希望也是您的发行版)上,所有 LVM 元数据都已加载到 udev 中(根据 /lib/udev/rules.d 中的一些规则)。所以你可以使用这样的规则文件:
$ cat /etc/udev/rules.d/92-local-oracle-permissions.rules
ENV{DM_VG_NAME}=="vgRandom" ENV{DM_LV_NAME}=="ora_users_*" OWNER="oracle"
ENV{DM_VG_NAME}=="vgRandom" ENV{DM_LV_NAME}=="ora_undo_*" OWNER="oracle"
ENV{DM_VG_NAME}=="vgSeq" ENV{DM_LV_NAME}=="ora_redo_*" OWNER="oracle"
您可以使用 udevadm 来了解您的 udev 规则可以基于哪些类型的事物。所有E:
行都可以在 udev 的 ENV 中找到,例如,E: DM_LV_NAME=ora_data
符合上述规则之一的行:
# udevadm info --query=all --name /dev/dm-2
P: /devices/virtual/block/dm-2
N: dm-2
L: -100
S: block/253:2
S: mapper/vgRandom-ora_data
S: disk/by-id/dm-name-vgRandom-ora_data
S: disk/by-id/dm-uuid-LVM-d6wXWIzc7xWJkx3Tx3o4Q9huEG1ajakYr0SLSl5as3C6RoydA66sgNHxBZdpem89
S: disk/by-uuid/787651c2-e4c7-40e2-b0fc-1a3978098dce
S: vgRandom/ora_data
E: UDEV_LOG=3
E: DEVPATH=/devices/virtual/block/dm-2
E: MAJOR=253
E: MINOR=2
E: DEVNAME=/dev/dm-2
E: DEVTYPE=disk
E: SUBSYSTEM=block
E: DM_UDEV_PRIMARY_SOURCE_FLAG=1
E: DM_NAME=vgRandom-ora_data
E: DM_UUID=LVM-d6wXWIzc7xWJkx3Tx3o4Q9huEG1ajakYr0SLSl5as3C6RoydA66sgNHxBZdpem89
E: DM_SUSPENDED=0
E: DM_UDEV_RULES=1
E: DM_VG_NAME=vgRandom
E: DM_LV_NAME=ora_data
E: DEVLINKS=/dev/block/253:2 /dev/mapper/vgRandom-ora_data /dev/disk/by-id/dm-name-vgRandom-ora_data /dev/disk/by-id/dm-uuid-LVM-d6wXWIzc7xWJkx3Tx3o4Q9huEG1ajakYr0SLSl5as3C6RoydA66sgNHxBZdpem89 /dev/disk/by-uuid/787651c2-e4c7-40e2-b0fc-1a3978098dce /dev/vgRandom/ora_data
E: ID_FS_UUID=787651c2-e4c7-40e2-b0fc-1a3978098dce
E: ID_FS_UUID_ENC=787651c2-e4c7-40e2-b0fc-1a3978098dce
E: ID_FS_VERSION=1.0
E: ID_FS_TYPE=ext4
E: ID_FS_USAGE=filesystem
E: FSTAB_NAME=/dev/mapper/vgRandom-ora_data
E: FSTAB_DIR=/opt/oracle/oracle/oradata
E: FSTAB_TYPE=ext4
E: FSTAB_OPTS=noatime
E: FSTAB_FREQ=0
E: FSTAB_PASSNO=3
此外,您还可以在 ATTR(仅限设备)或 ATTRS(也包括父设备)中匹配 sysfs 属性。你可以看到所有的属性,如下所示:
# udevadm info --attribute-walk --name /dev/dm-2
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/virtual/block/dm-2':
KERNEL=="dm-2"
SUBSYSTEM=="block"
DRIVER==""
ATTR{range}=="1"
ATTR{ext_range}=="1"
ATTR{removable}=="0"
ATTR{ro}=="0"
ATTR{size}=="41943040"
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{capability}=="10"
ATTR{stat}=="36383695 0 4435621936 124776016 29447978 0 3984603551 342671312 0 191751864 467456484"
ATTR{inflight}==" 0 0"
尽管该匹配对于非虚拟设备更有用(例如,如果在 /dev/sda1 上尝试,您将获得大量输出)。
答案2
快速浏览一下我系统上的 udev 文档和现有规则,下面的规则(未经测试)应该使用以下命令来识别特定的逻辑卷:dmsetup
程序检索卷信息。替换gggggggg
为卷组的 UUID ( vgdisplay VG_NAME
) 和lllllll
逻辑卷的 UUID ( lvdisplay VG_NAME/LV_NAME
),或dmsetup
手动运行命令查找 UUID。
SUBSYSTEM=="block", KERNEL=="dm-[0-9]*", \
PROGRAM=="dmsetup info -c --noheadings -o uuid", \
RESULT=="LVM-ggggggggllllllll", \
OWNER=="letmebe", GROUP="vmusers", MODE="0660"