Forum Linux.noyau Règle udev appelée deux fois :-( Pourquoi ?

Posté par  .
Étiquettes : aucune
0
7
août
2006
Salut,

Je suis en train de mettre en place une sauvegarde serveur sur disque dur usb
externe. En gros, on branche le disque, une règle udev le détecte (marque/modèle
serial) et lance un script qui copie ce que je souhaite. A la fin, je fais mumuse avec
les leds du clavier et du disque pour dire que c'est fini :-)

Voila la règle (un simple fichier /etc/udev/rules.d/z99_sauvdiskusb.rules) :

BUS=="usb", SYSFS{idProduct}=="6830", SYSFS{idVendor}=="04b4",
SYSFS{serial}=="6000000000010958", NAME="%k",
SYMLINK+="usbdiskbackup%n", OWNER="root", GROUP="root", MODE="0770",
RUN+="/usr/local/sbin/backup_usbdisk.sh", OPTIONS="all_partitions"

Mon script est bien appelé avec $ACTION=="add" quand je branche le disque,
mais pourquoi udev le fait-il très rapidement deux fois de suite ?

C'est pas trop grave vu que je gère un verrou sur l'éxécution et que donc la 2ème
se voit rejetée mais c'est juste histoire de comprendre pour éviter les surprises...
  • # Quelques infos supplémentaires SVP :-)

    Posté par  . Évalué à 3.

    Bonjour,

    Pourrais tu rajouter quelques informations supplémentaires:
    ¤ Version du noyau ?
    ¤ Distribution (si applicable :P) ?
    ¤ Quelques traces (type dmesg, /var/log/syslog ou /var/log/messages);
    ¤ Eventuellement, le résultat de commandes telles que "udevtest /class/...." ou autre (voir le lien en fin de commentaire pour avoir des exemples de syntaxe).

    Merci d'avance.

    Cdlt,

    PS: Je ne suis pas connaisseur en udev, mais en parcourant les documentations disponibles, j'ai l'impression que ce serait équivalent au cas "USB Hard Disk" décrit dans:
    [http://www.reactivated.net/writing_udev_rules.html]
    S'il y a des (au moins 1 :P) partitions sur le disque branché, alors il y aura plusieurs occurences (au moins: une pour le disque lui-même, puis une par partition "mount"-able) de udev pour la même règle....
    • [^] # Re: Quelques infos supplémentaires SVP :-)

      Posté par  . Évalué à 1.

      Le noyau est un 2.6.12-2-k7 (noyau standard de la debian testing)
      Udev est en version 0.093-1.

      Dmesg (rien de particulier, le baratin classique) :

      usb 4-5: new high speed USB device using ehci_hcd and address 4
      usb 4-5: configuration #1 chosen from 1 choice
      SCSI subsystem initialized
      Initializing USB Mass Storage driver...
      scsi0 : SCSI emulation for USB Mass Storage devices
      usbcore: registered new driver usb-storage
      USB Mass Storage support registered.
      usb-storage: device found at 4
      usb-storage: waiting for device to settle before scanning
      Vendor: IC35L060 Model: AVER07-0 Rev: 0000
      Type: Direct-Access ANSI SCSI revision: 00
      usb-storage: device scan complete
      SCSI device sda: 120103200 512-byte hdwr sectors (61493 MB)
      sda: Write Protect is off
      sda: Mode Sense: 27 00 00 00
      sda: assuming drive cache: write through
      SCSI device sda: 120103200 512-byte hdwr sectors (61493 MB)
      sda: Write Protect is off
      sda: Mode Sense: 27 00 00 00
      sda: assuming drive cache: write through
      sda: sda1 sda2
      sd 0:0:0:0: Attached scsi disk sda

      /var/log/syslog et messages : pareil que dmesg...

      # udevtest /block/sda
      parse_file: line too long, rule skipped '/etc/udev/rules.d/025_libsane.rules:540'
      main: looking at device '/block/sda' from subsystem 'block'
      run_program: 'usb_id -x'
      run_program: '/lib/udev/usb_id' (stdout) 'ID_VENDOR=IC35L060'
      run_program: '/lib/udev/usb_id' (stdout) 'ID_MODEL=AVER07-0'
      run_program: '/lib/udev/usb_id' (stdout) 'ID_REVISION=0000'
      run_program: '/lib/udev/usb_id' (stdout) 'ID_SERIAL=IC35L060_AVER07-0_6000000000010958'
      run_program: '/lib/udev/usb_id' (stdout) 'ID_TYPE=disk'
      run_program: '/lib/udev/usb_id' (stdout) 'ID_BUS=usb'
      run_program: '/lib/udev/usb_id' returned with status 0
      run_program: 'edd_id --export /dev/.tmp-8-0'
      run_program: '/lib/udev/edd_id' (stderr) 'no kernel EDD support'
      run_program: '/lib/udev/edd_id' returned with status 2
      run_program: 'path_id /block/sda'
      run_program: '/lib/udev/path_id' (stdout) 'ID_PATH=pci-0000:00:10.3-usb-0:5:1.0-scsi-0:0:0:0'
      run_program: '/lib/udev/path_id' returned with status 0
      udev_rules_get_name: add symlink 'disk/by-id/usb-IC35L060_AVER07-0_6000000000010958'
      udev_rules_get_name: add symlink 'disk/by-path/pci-0000:00:10.3-usb-0:5:1.0-scsi-0:0:0:0'
      run_program: 'vol_id --export /dev/.tmp-8-0'
      run_program: '/lib/udev/vol_id' returned with status 4
      udev_rules_get_name: add symlink 'usbdiskbackup'
      udev_rules_get_name: rule applied, 'sda' becomes 'sda'
      udev_device_event: device '/block/sda' already known, remove possible symlinks
      udev_node_add: creating device node '/dev/sda', major = '8', minor = '0', mode = '0770', uid = '0', gid = '0'
      udev_node_add: creating device partition nodes '/dev/sda[1-15]'
      udev_node_add: creating symlink '/dev/disk/by-id/usb-IC35L060_AVER07-0_6000000000010958' to '../../sda'
      udev_node_add: creating symlink '/dev/disk/by-path/pci-0000:00:10.3-usb-0:5:1.0-scsi-0:0:0:0' to '../../sda'
      udev_node_add: creating symlink '/dev/usbdiskbackup' to 'sda'
      main: run: 'socket:/org/freedesktop/hal/udev_event'
      main: run: 'socket:/org/kernel/udev/monitor'
      main: run: 'udev_run_hotplugd block'
      main: run: 'udev_run_devd block'
      main: run: '/usr/local/sbin/s6gem_backup_usbdisk.sh'

      Le lien que tu donnes est celui qui m'a servi à faire mes règles. C'est une bonne doc sur udev je trouve aussi...

      Je vais explorer la piste que tu m'a donnée au sujet du nombre de partiches, je
      vais en créer 4 ou 5 et voir si le nombre de RUNs change (actuellement j'en ai 2,
      une en vfat et une en ext3 donc il devrait y avoir 3 appels :-(((
      • [^] # Re: Quelques infos supplémentaires SVP :-)

        Posté par  . Évalué à 1.

        C'était bien ça (je m'étais planté sur le nb de lancements, c'était 3 en fait).
        Le script est bien lancé (1+nb_partitions ) fois (4 partoches => 5x RUN)
        Merci du tuyau (mais j'ai pas vu ça dans la doc :-)

Suivre le flux des commentaires

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