udev

Rédigé par Paulo Aucun commentaire
Classé dans : Linux Mots clés : udev, usb


udev et clé usb

Executer un script (ou un service) au montage de ma clé USB

  • collecte des infos necessaires pour identifier précisement la clé USB
    lancer la commande qui suit avant de connecter la clé USB
    $udevadm monitor
    
    KERNEL[20108.824421] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4 (usb)
    KERNEL[20108.824872] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0 (usb)
    KERNEL[20108.825141] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22 (scsi)
    KERNEL[20108.825175] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/scsi_host/host22 (scsi_host)
    UDEV  [20108.828463] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4 (usb)
    UDEV  [20108.829644] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0 (usb)
    UDEV  [20108.830733] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22 (scsi)
    UDEV  [20108.831656] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/scsi_host/host22 (scsi_host)
    KERNEL[20109.828950] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0 (scsi)
    KERNEL[20109.828982] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0 (scsi)
    KERNEL[20109.829013] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/scsi_disk/22:0:0:0 (scsi_disk)
    KERNEL[20109.829058] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/scsi_device/22:0:0:0 (scsi_device)
    KERNEL[20109.829129] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg5 (scsi_generic)
    KERNEL[20109.829188] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0 (bsg)
    UDEV  [20109.829478] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0 (scsi)
    UDEV  [20109.829917] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0 (scsi)
    UDEV  [20109.830416] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/scsi_disk/22:0:0:0 (scsi_disk)
    UDEV  [20109.830594] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/scsi_device/22:0:0:0 (scsi_device)
    UDEV  [20109.830967] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg5 (scsi_generic)
    UDEV  [20109.831246] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0 (bsg)
    KERNEL[20109.833324] add      /devices/virtual/bdi/8:48 (bdi)
    UDEV  [20109.833755] add      /devices/virtual/bdi/8:48 (bdi)
    KERNEL[20109.876291] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd (block)
    KERNEL[20109.876320] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd/sdd1 (block)
    UDEV  [20109.995688] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd (block)
    UDEV  [20110.040260] add      /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd/sdd1 (block)


    Pour des infos plus précises sur la clé (/dev/sdd) : 

    $sudo udevadm info /dev/sdd
    
    P: /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd
    N: sdd
    S: disk/by-id/usb-Corsair_Flash_Voyager_A800000000025543-0:0
    S: disk/by-path/pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0
    E: DEVLINKS=/dev/disk/by-id/usb-Corsair_Flash_Voyager_A800000000025543-0:0 /dev/disk/by-path/pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0
    E: DEVNAME=/dev/sdd
    E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd
    E: DEVTYPE=disk
    E: ID_BUS=usb
    E: ID_FS_UUID=D439-4564
    E: ID_INSTANCE=0:0
    E: ID_MODEL=Flash_Voyager
    E: ID_MODEL_ENC=Flash\x20Voyager\x20\x20\x20
    E: ID_MODEL_ID=1000
    E: ID_PART_TABLE_TYPE=dos
    E: ID_PART_TABLE_UUID=c3072e18
    E: ID_PATH=pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0
    E: ID_PATH_TAG=pci-0000_00_1d_7-usb-0_4_1_0-scsi-0_0_0_0
    E: ID_REVISION=1100
    E: ID_SERIAL=Corsair_Flash_Voyager_A800000000025543-0:0
    E: ID_SERIAL_SHORT=A800000000025543
    E: ID_TYPE=disk
    E: ID_USB_DRIVER=usb-storage
    E: ID_USB_INTERFACES=:080650:
    E: ID_USB_INTERFACE_NUM=00
    E: ID_VENDOR=Corsair
    E: ID_VENDOR_ENC=Corsair\x20
    E: ID_VENDOR_ID=090c
    E: MAJOR=8
    E: MINOR=48
    E: SUBSYSTEM=block
    E: TAGS=:systemd:
    E: USEC_INITIALIZED=109876296
    

    Ou encore :

    $sudo udevadm info /dev/sdd1
    
    P: /devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd/sdd1
    N: sdd1
    S: disk/by-id/usb-Corsair_Flash_Voyager_A800000000025543-0:0-part1
    S: disk/by-label/CORSAIR
    S: disk/by-path/pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0-part1
    S: disk/by-uuid/D439-4564
    E: DEVLINKS=/dev/disk/by-id/usb-Corsair_Flash_Voyager_A800000000025543-0:0-part1 /dev/disk/by-label/CORSAIR /dev/disk/by-path/pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0-part1 /dev/disk/by-uuid/D439-4564
    E: DEVNAME=/dev/sdd1
    E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd/sdd1
    E: DEVTYPE=partition
    E: ID_BUS=usb
    E: ID_FS_LABEL=CORSAIR
    E: ID_FS_LABEL_ENC=CORSAIR
    E: ID_FS_TYPE=vfat
    E: ID_FS_USAGE=filesystem
    E: ID_FS_UUID=D439-4564
    E: ID_FS_UUID_ENC=D439-4564
    E: ID_FS_VERSION=FAT32
    E: ID_INSTANCE=0:0
    E: ID_MODEL=Flash_Voyager
    E: ID_MODEL_ENC=Flash\x20Voyager\x20\x20\x20
    E: ID_MODEL_ID=1000
    E: ID_PART_ENTRY_DISK=8:48
    E: ID_PART_ENTRY_FLAGS=0x80
    E: ID_PART_ENTRY_NUMBER=1
    E: ID_PART_ENTRY_OFFSET=32
    E: ID_PART_ENTRY_SCHEME=dos
    E: ID_PART_ENTRY_SIZE=7864288
    E: ID_PART_ENTRY_TYPE=0xc
    E: ID_PART_ENTRY_UUID=c3072e18-01
    E: ID_PART_TABLE_TYPE=dos
    E: ID_PART_TABLE_UUID=c3072e18
    E: ID_PATH=pci-0000:00:1d.7-usb-0:4:1.0-scsi-0:0:0:0
    E: ID_PATH_TAG=pci-0000_00_1d_7-usb-0_4_1_0-scsi-0_0_0_0
    E: ID_REVISION=1100
    E: ID_SERIAL=Corsair_Flash_Voyager_A800000000025543-0:0
    E: ID_SERIAL_SHORT=A800000000025543
    E: ID_TYPE=disk
    E: ID_USB_DRIVER=usb-storage
    E: ID_USB_INTERFACES=:080650:
    E: ID_USB_INTERFACE_NUM=00
    E: ID_VENDOR=Corsair
    E: ID_VENDOR_ENC=Corsair\x20
    E: ID_VENDOR_ID=090c
    E: MAJOR=8
    E: MINOR=49
    E: SUBSYSTEM=block
    E: TAGS=:systemd:
    E: USEC_INITIALIZED=109876339
    

    Avec l'option -a pour obtenir les attributs sysfs

    $sudo udevadm info -a /dev/sdd
    
    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/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0/block/sdd':
        KERNEL=="sdd"
        SUBSYSTEM=="block"
        DRIVER==""
        ATTR{ro}=="0"
        ATTR{size}=="7864320"
        ATTR{stat}=="    1846      470    11386     2083        0        0        0        0        0     1391     2079"
        ATTR{range}=="16"
        ATTR{discard_alignment}=="0"
        ATTR{events}=="media_change"
        ATTR{ext_range}=="256"
        ATTR{events_poll_msecs}=="-1"
        ATTR{alignment_offset}=="0"
        ATTR{inflight}=="       0        0"
        ATTR{removable}=="1"
        ATTR{capability}=="51"
        ATTR{events_async}==""
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0/22:0:0:0':
        KERNELS=="22:0:0:0"
        SUBSYSTEMS=="scsi"
        DRIVERS=="sd"
        ATTRS{rev}=="1100"
        ATTRS{type}=="0"
        ATTRS{scsi_level}=="0"
        ATTRS{model}=="Flash Voyager   "
        ATTRS{state}=="running"
        ATTRS{queue_type}=="none"
        ATTRS{iodone_cnt}=="0x810"
        ATTRS{iorequest_cnt}=="0x810"
        ATTRS{device_busy}=="0"
        ATTRS{evt_capacity_change_reported}=="0"
        ATTRS{timeout}=="30"
        ATTRS{evt_media_change}=="0"
        ATTRS{max_sectors}=="240"
        ATTRS{ioerr_cnt}=="0x2"
        ATTRS{queue_depth}=="1"
        ATTRS{vendor}=="Corsair "
        ATTRS{evt_soft_threshold_reached}=="0"
        ATTRS{device_blocked}=="0"
        ATTRS{evt_mode_parameter_change_reported}=="0"
        ATTRS{evt_lun_change_reported}=="0"
        ATTRS{evt_inquiry_change_reported}=="0"
        ATTRS{dh_state}=="detached"
        ATTRS{iocounterbits}=="32"
        ATTRS{eh_timeout}=="10"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22/target22:0:0':
        KERNELS=="target22:0:0"
        SUBSYSTEMS=="scsi"
        DRIVERS==""
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0/host22':
        KERNELS=="host22"
        SUBSYSTEMS=="scsi"
        DRIVERS==""
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb4/4-4/4-4:1.0':
        KERNELS=="4-4:1.0"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb-storage"
        ATTRS{bInterfaceClass}=="08"
        ATTRS{bInterfaceSubClass}=="06"
        ATTRS{bInterfaceProtocol}=="50"
        ATTRS{bNumEndpoints}=="02"
        ATTRS{supports_autosuspend}=="1"
        ATTRS{bAlternateSetting}==" 0"
        ATTRS{bInterfaceNumber}=="00"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb4/4-4':
        KERNELS=="4-4"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb"
        ATTRS{bDeviceSubClass}=="00"
        ATTRS{bDeviceProtocol}=="00"
        ATTRS{devpath}=="4"
        ATTRS{idVendor}=="090c"
        ATTRS{speed}=="480"
        ATTRS{bNumInterfaces}==" 1"
        ATTRS{bConfigurationValue}=="1"
        ATTRS{bMaxPacketSize0}=="64"
        ATTRS{busnum}=="4"
        ATTRS{devnum}=="11"
        ATTRS{configuration}==""
        ATTRS{bMaxPower}=="100mA"
        ATTRS{authorized}=="1"
        ATTRS{bmAttributes}=="80"
        ATTRS{bNumConfigurations}=="1"
        ATTRS{maxchild}=="0"
        ATTRS{bcdDevice}=="1100"
        ATTRS{avoid_reset_quirk}=="0"
        ATTRS{quirks}=="0x0"
        ATTRS{serial}=="A800000000025543"
        ATTRS{version}==" 2.00"
        ATTRS{urbnum}=="6015"
        ATTRS{ltm_capable}=="no"
        ATTRS{manufacturer}=="Corsair"
        ATTRS{removable}=="unknown"
        ATTRS{idProduct}=="1000"
        ATTRS{bDeviceClass}=="00"
        ATTRS{product}=="Flash Voyager"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb4':
        KERNELS=="usb4"
        SUBSYSTEMS=="usb"
        DRIVERS=="usb"
        ATTRS{bDeviceSubClass}=="00"
        ATTRS{bDeviceProtocol}=="00"
        ATTRS{devpath}=="0"
        ATTRS{idVendor}=="1d6b"
        ATTRS{speed}=="480"
        ATTRS{bNumInterfaces}==" 1"
        ATTRS{bConfigurationValue}=="1"
        ATTRS{bMaxPacketSize0}=="64"
        ATTRS{authorized_default}=="1"
        ATTRS{busnum}=="4"
        ATTRS{devnum}=="1"
        ATTRS{configuration}==""
        ATTRS{bMaxPower}=="0mA"
        ATTRS{authorized}=="1"
        ATTRS{bmAttributes}=="e0"
        ATTRS{bNumConfigurations}=="1"
        ATTRS{maxchild}=="6"
        ATTRS{bcdDevice}=="0319"
        ATTRS{avoid_reset_quirk}=="0"
        ATTRS{quirks}=="0x0"
        ATTRS{serial}=="0000:00:1d.7"
        ATTRS{version}==" 2.00"
        ATTRS{urbnum}=="236"
        ATTRS{ltm_capable}=="no"
        ATTRS{manufacturer}=="Linux 3.19.8-100.fc20.x86_64 ehci_hcd"
        ATTRS{removable}=="unknown"
        ATTRS{idProduct}=="0002"
        ATTRS{bDeviceClass}=="09"
        ATTRS{product}=="EHCI Host Controller"
    
      looking at parent device '/devices/pci0000:00/0000:00:1d.7':
        KERNELS=="0000:00:1d.7"
        SUBSYSTEMS=="pci"
        DRIVERS=="ehci-pci"
        ATTRS{irq}=="23"
        ATTRS{subsystem_vendor}=="0x1043"
        ATTRS{broken_parity_status}=="0"
        ATTRS{class}=="0x0c0320"
        ATTRS{companion}==""
        ATTRS{driver_override}=="(null)"
        ATTRS{consistent_dma_mask_bits}=="32"
        ATTRS{dma_mask_bits}=="32"
        ATTRS{local_cpus}=="00ff"
        ATTRS{device}=="0x3a3a"
        ATTRS{uframe_periodic_max}=="100"
        ATTRS{enable}=="1"
        ATTRS{msi_bus}=="1"
        ATTRS{local_cpulist}=="0-7"
        ATTRS{vendor}=="0x8086"
        ATTRS{subsystem_device}=="0x82d4"
        ATTRS{numa_node}=="-1"
        ATTRS{d3cold_allowed}=="1"
    
      looking at parent device '/devices/pci0000:00':
        KERNELS=="pci0000:00"
        SUBSYSTEMS==""
        DRIVERS==""

    Afin de creer la règle udev, j'ai "grepé" sur 'UUID' et sur 'model'
     

  • création du script à lancer : /home/user/test.sh
     
  • création de la règle udev '/etc/udev/rules.d/91-cle_usb.rules'
    avec critère de recherche sur uuid et model trouvé ci-dessus
    On aurait pu lancer aussi un service systemd. Dans ce cas, la commande 'PROGRAM ... 'deviendrait 'ENV{SYSTEM_WANTS}+="test.service" 
    $cat /etc/udev/rules.d/91-cle_usb.rules
        ACTION=="add", SUBSYSTEM=="block", ATTRS{model}=="Flash Voyager   ", ENV{ID_FS_UUID}="D439-4564", PROGRAM="/bin/bash /home/paulo/test.sh"
    Le script (et pourquoi pas un script pour faire des sauvegardes) sera lancé automagiquement au branchement de ma clé USB  
     

Rappel sur udev en CentOS 7 :

  • les règles par défaut se situent dans '/usr/lib/udev/rules.d'
  • les règles perso se situent dnas '/etc/udev/rules.d'
  • afin d'écraser un une règle d'origine (dans /usr....), il suffit de creer un homonyme dans '/etc...'
    Ex : la regle /usr/lib/udev/rules.d/71-biosdevname.rules' peut-être écrasée par le fichier  vide '/etc/udev/rules.d/71-biosdevname.rules'

Lien intéressant : https://docs.oracle.com/cd/E37670_01/E41138/html/ol_about_devices.html

 

Les commentaires sont fermés.