Permanente Änderung des Eigentums (oder der Gruppe) des LVM-Volumes

9

Wie kann ich den Besitz (oder zumindest die Gruppe) eines LVM-Volumes dauerhaft ändern?

Ich dachte mir, dass ich udev verwenden muss, aber ich weiß nicht, wie die Regel aussehen soll?

Angenommen, ich möchte den Besitz von LVM / Festplatte in Benutzer- / Gruppen-Virtualbox ändern. Wie würde ich das tun?

Šimon Tóth
quelle
Über welches Betriebssystem sprichst du? Welches LVM (OS oder Veritas?)
Nils

Antworten:

14

Auf Debian (und hoffentlich auch auf Ihrer Distribution) sind alle LVM-Metadaten bereits in udev geladen (gemäß einigen Regeln in /lib/udev/rules.d). Sie können also eine Regeldatei wie die folgende verwenden:

$ 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"

Mit udevadm können Sie herausfinden, auf welche Art von Dingen Sie Ihre udev-Regeln stützen können. Alle E:Zeilen befinden sich in ENV in udev, z. B. die E: DM_LV_NAME=ora_dataZeile, die einer der oben genannten Regeln entspricht:

# 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

Sie können auch sysfs-Attribute in ATTR (nur Gerät) oder ATTRS (auch Eltern) abgleichen. Sie können alle Attribute wie folgt sehen:

# 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"

Obwohl dieser Abgleich für nicht virtuelle Geräte nützlicher ist (z. B. erhalten Sie viel Ausgabe, wenn Sie ihn auf / dev / sda1 ausprobieren).

derobert
quelle
0

Mit einem kurzen Blick auf die udev-Dokumentation und die vorhandenen Regeln auf meinem System sollte die folgende Regel (ungetestet) ein bestimmtes logisches Volume identifizieren und das dmsetupProgramm zum Abrufen der Volume-Informationen verwenden. Ersetzen Sie ggggggggdurch die UUID der Datenträgergruppe ( vgdisplay VG_NAME) und llllllldurch die UUID des logischen Datenträgers ( lvdisplay VG_NAME/LV_NAME), oder führen Sie den dmsetupBefehl manuell aus, um die UUID zu ermitteln.

SUBSYSTEM=="block", KERNEL=="dm-[0-9]*", \
PROGRAM=="dmsetup info -c --noheadings -o uuid", \
RESULT=="LVM-ggggggggllllllll", \
OWNER=="letmebe", GROUP="vmusers", MODE="0660"
Gilles 'SO - hör auf böse zu sein'
quelle