Changement permanent de la propriété (ou du groupe) du volume LVM

9

Comment puis-je changer définitivement la propriété (ou au moins le groupe) d'un volume LVM?

J'ai pensé que je devais utiliser udev, mais je ne sais pas à quoi devrait ressembler la règle?

Disons que je veux changer la propriété de LVM / disque en virtualbox utilisateur / groupe, comment dois-je faire?

Šimon Tóth
la source
De quel OS parlez-vous? Quel LVM (OS ou Veritas?)
Nils

Réponses:

14

Sur Debian (et, espérons-le, votre distribution également), toutes les métadonnées LVM sont déjà chargées dans udev (par certaines des règles de /lib/udev/rules.d). Vous pouvez donc utiliser un fichier de règles comme celui-ci:

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

Vous pouvez utiliser udevadm pour savoir sur quels types de choses vous pouvez baser vos règles udev. Toutes les E:lignes peuvent être trouvées dans ENV dans udev, par exemple, la E: DM_LV_NAME=ora_dataligne correspondant à l'une des règles ci-dessus:

# 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

En outre, vous pouvez faire correspondre les attributs sysfs, dans ATTR (périphérique uniquement) ou ATTRS (parents également). Vous pouvez voir tous les attributs comme ceci:

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

Bien que cette correspondance soit plus utile pour les périphériques non virtuels (par exemple, vous obtiendrez beaucoup de sortie si vous l'essayez sur / dev / sda1).

derobert
la source
0

D'un rapide coup d' œil à la documentation udev et les règles existantes sur mon système, la règle ci - dessous (non testé) doit identifier un volume logique particulier, en utilisant le dmsetupprogramme pour récupérer les informations de volume. Remplacez-le ggggggggpar l'UUID du groupe de volumes ( vgdisplay VG_NAME) et lllllllpar l'UUID du volume logique ( lvdisplay VG_NAME/LV_NAME), ou exécutez la dmsetupcommande manuellement pour rechercher l'UUID.

SUBSYSTEM=="block", KERNEL=="dm-[0-9]*", \
PROGRAM=="dmsetup info -c --noheadings -o uuid", \
RESULT=="LVM-ggggggggllllllll", \
OWNER=="letmebe", GROUP="vmusers", MODE="0660"
Gilles 'SO- arrête d'être méchant'
la source