udev
Rédigé par Paulo
Aucun commentaire
Classé dans : Linux
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