Forum Linux.général Règle udev

Posté par (page perso) . Licence CC by-sa
Tags : aucun
1
16
juil.
2013

Bonjour,

J'essaie de créer cette règle udev pour mon disque usb que j'utilise pour faire mes sauvegardes depuis mon serveur. L'idée est de faire en sorte, que peut importe le port usb ou je branche le disque, qu'il ai toujours le même nom pour udev.

KERNEL=="sd*", SUBSYSTEMS=="usb", DRIVERS=="usb", ATTRS{product}=="My Passport 0748", ATTRS{serial}=="575838314139324C31353233", SYMLINK+="backup%n", RUN+="/root/test.sh"

Le problème est que le script test.sh est lancé deux fois. Je pense que c'est parce que mon disque est détecté "deux fois", une fois pour le péréphérie et une pour la partition.

/dev/backup
/dev/backup1

Le problème est que udevadm ne me permet pas de les différencier, ou alors j'ai loupé un truc :

# udevadm info -a -p $(udevadm info -q path -n /dev/sdi)

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/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35/target35:0:0/35:0:0:0/block/sdi':
    KERNEL=="sdi"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{range}=="16"
    ATTR{ext_range}=="256"
    ATTR{removable}=="0"
    ATTR{ro}=="0"
    ATTR{size}=="3906963456"
    ATTR{alignment_offset}=="0"
    ATTR{capability}=="52"
    ATTR{stat}=="      51        0      408      124        0        0        0        0        0      124      124"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35/target35:0:0/35:0:0:0':
    KERNELS=="35:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="WD      "
    ATTRS{model}=="My Passport 0748"
    ATTRS{rev}=="1019"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x4e"
    ATTRS{iodone_cnt}=="0x4e"
    ATTRS{ioerr_cnt}=="0x1"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35/target35:0:0':
    KERNELS=="target35:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35':
    KERNELS=="host35"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0':
    KERNELS=="2-2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb-storage"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="08"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bInterfaceProtocol}=="50"
    ATTRS{modalias}=="usb:v1058p0748d1019dc00dsc00dp00ic08isc06ip50"
    ATTRS{supports_autosuspend}=="0"
    ATTRS{interface}=="MSC Bulk-Only Transport"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2':
    KERNELS=="2-2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}=="USB Mass Storage"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{urbnum}=="307"
    ATTRS{idVendor}=="1058"
    ATTRS{idProduct}=="0748"
    ATTRS{bcdDevice}=="1019"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="32"
    ATTRS{version}==" 2.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Western Digital"
    ATTRS{product}=="My Passport 0748"
    ATTRS{serial}=="575838314139324C31353233"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2':
    KERNELS=="usb2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="678"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="6"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.32-5-amd64 ehci_hcd"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x293a"
    ATTRS{subsystem_vendor}=="0x1028"
    ATTRS{subsystem_device}=="0x0278"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="23"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{modalias}=="pci:v00008086d0000293Asv00001028sd00000278bc0Csc03i20"
    ATTRS{numa_node}=="-1"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{companion}==""

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

# udevadm info -a -p $(udevadm info -q path -n /dev/sdi1)

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/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35/target35:0:0/35:0:0:0/block/sdi/sdi1':
    KERNEL=="sdi1"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{partition}=="1"
    ATTR{start}=="2048"
    ATTR{size}=="3906961408"
    ATTR{alignment_offset}=="0"
    ATTR{stat}=="      34        0      272      108        0        0        0        0        0      108      108"
    ATTR{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35/target35:0:0/35:0:0:0/block/sdi':
    KERNELS=="sdi"
    SUBSYSTEMS=="block"
    DRIVERS==""
    ATTRS{range}=="16"
    ATTRS{ext_range}=="256"
    ATTRS{removable}=="0"
    ATTRS{ro}=="0"
    ATTRS{size}=="3906963456"
    ATTRS{alignment_offset}=="0"
    ATTRS{capability}=="52"
    ATTRS{stat}=="      51        0      408      124        0        0        0        0        0      124      124"
    ATTRS{inflight}=="       0        0"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35/target35:0:0/35:0:0:0':
    KERNELS=="35:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="3"
    ATTRS{vendor}=="WD      "
    ATTRS{model}=="My Passport 0748"
    ATTRS{rev}=="1019"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x4e"
    ATTRS{iodone_cnt}=="0x4e"
    ATTRS{ioerr_cnt}=="0x1"
    ATTRS{modalias}=="scsi:t-0x00"
    ATTRS{evt_media_change}=="0"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35/target35:0:0':
    KERNELS=="target35:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host35':
    KERNELS=="host35"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0':
    KERNELS=="2-2:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb-storage"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="08"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bInterfaceProtocol}=="50"
    ATTRS{modalias}=="usb:v1058p0748d1019dc00dsc00dp00ic08isc06ip50"
    ATTRS{supports_autosuspend}=="0"
    ATTRS{interface}=="MSC Bulk-Only Transport"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-2':
    KERNELS=="2-2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}=="USB Mass Storage"
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="80"
    ATTRS{bMaxPower}=="500mA"
    ATTRS{urbnum}=="307"
    ATTRS{idVendor}=="1058"
    ATTRS{idProduct}=="0748"
    ATTRS{bcdDevice}=="1019"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="32"
    ATTRS{version}==" 2.10"
    ATTRS{maxchild}=="0"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Western Digital"
    ATTRS{product}=="My Passport 0748"
    ATTRS{serial}=="575838314139324C31353233"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2':
    KERNELS=="usb2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="678"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0206"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="1"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="6"
    ATTRS{quirks}=="0x0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 2.6.32-5-amd64 ehci_hcd"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x293a"
    ATTRS{subsystem_vendor}=="0x1028"
    ATTRS{subsystem_device}=="0x0278"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="23"
    ATTRS{local_cpus}=="00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000f"
    ATTRS{local_cpulist}=="0-3"
    ATTRS{modalias}=="pci:v00008086d0000293Asv00001028sd00000278bc0Csc03i20"
    ATTRS{numa_node}=="-1"
    ATTRS{enable}=="1"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{companion}==""

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""
  • # fstab, uuid

    Posté par . Évalué à 3.

    les disques ont un identifiant unique appelé UUID
    tu dois pouvoir te baser dessus pour monter le disque avant de lancer le backup.

    avec fstab tu peux definir quel UUID chercher plutot que le /dev/sdXY qui lui peut changer.

    • [^] # Re: fstab, uuid

      Posté par (page perso) . Évalué à 1.

      Je n'y avais pas pensé et je pense que ça sera bien plus simple pour fixer le point de montage mais ça ne règle pas mon problème de "multi" lancement de la commande RUN+=… de ma règle udev.

      Born to Kill EndUser !

      • [^] # Re: fstab, uuid

        Posté par . Évalué à 3.

        tu t'en fous

        tu laisses les deux /dev/backup et /dev/backup1 s'activer,
        dans ton script test.sh,
        - tu testes si le disque est deja monté (ou si le script tourne deja), sinon tu fais le mount sur l'UUID
        - tu fais ton backup

      • [^] # Re: fstab, uuid

        Posté par . Évalué à 2.

        udev gère aussi les UUID et comme chaque partition de disk dispose d'un UUID a lui tu devrais ne pas avoir de soucis

    • [^] # Re: fstab, uuid

      Posté par . Évalué à 3.

      avec fstab tu peux definir quel UUID chercher plutot que le /dev/sdXY qui lui peut changer.

      Et que ce soit avec udev au le fstab, tu peux aussi utiliser les labels, plus lisibles que les UUID et constants (bien que sûrement moins uniques que les UUID, mais bon).

    • [^] # Re: fstab, uuid

      Posté par (page perso) . Évalué à 1.

      Du coups j'ai fais un mixe des UUID et d'une règle udev. Dans mon script je vérifie si le disque est déjà monté et avant chaque vérification j'ai ajouté un sleep 10s pour être certain que deux montages se croisent pas, pour le moment je suis satisfais du résultat.

      Merci à tous pour l'aide.

      Born to Kill EndUser !

  • # hopla

    Posté par . Évalué à 1.

    KERNEL=="sd??*"
    

    (marche pas si tu as plus de 26 disques)

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.