Suite à une question posée dans ce forum, j'ai voulu faire le test de la création d'une règle pour gérer un périphérique dans la Rpi3+.
1) Qu'est-ce que je désire faire et pourquoi ?
J'utilise une clef USB de la marque Verbatim, qui contient la distribution Stretch.
On peut l'utiliser pour un autre usage, par exemple, du stockage.
A chaque fois que je désire utiliser ma clef USB, mon problème est que je dois faire le montage des deux partitions manuellement pour accéder à leur contenu.
Autant le faire automatiquement est source de moins d'erreurs et de gain de temps.
On peut après le montage, faire un traitement, par exemple, de la recopie.
2) identification du montage.
Je pars de l'hypothèse que ma règle fonctionne correctement.
Code : Tout sélectionner
~> blkid
/dev/sda1: LABEL="boot" UUID="13C6-2676" TYPE="vfat" PARTUUID="9cba179a-01"
/dev/sda2: UUID="037616fd-28fe-4652-8248-2042ea30b929" TYPE="ext4" PARTUUID="9cba179a-02"
/dev/sdb1: LABEL="boot" UUID="13C6-2676" TYPE="vfat" PARTUUID="12345678-01"
/dev/sdb2: UUID="037616fd-28fe-4652-8248-2042ea30b929" TYPE="ext4" PARTUUID="12345678-02"
~>
Et quand ils sont montés, voici ce que l'on obtient :
Code : Tout sélectionner
~> df
Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur
/dev/root 16453544 5276804 10450172 34% /
devtmpfs 470112 0 470112 0% /dev
tmpfs 474720 0 474720 0% /dev/shm
tmpfs 474720 14428 460292 4% /run
tmpfs 5120 4 5116 1% /run/lock
tmpfs 474720 0 474720 0% /sys/fs/cgroup
tmpfs 10240 12 10228 1% /tmp
tmpfs 10240 340 9900 4% /var/log
tmpfs 10240 0 10240 0% /var/tmp
/dev/sda1 42137 22499 19638 54% /boot
tmpfs 94944 0 94944 0% /run/user/0
tmpfs 94944 0 94944 0% /run/user/1000
tmpfs 94944 0 94944 0% /run/user/109
/dev/sdb2 16453544 4913748 10813228 32% /mnt/rootfs
/dev/sdb1 42137 22499 19638 54% /mnt/boot
~>
Nous devrons utiliser ces deux commandes pour voir si le montage s'est bien fait.
Dans cet exemple, nous retiendrons "/dev/sdb".
3) Comment identifier le périphérique (ma clef USB) ?
Faire ceci avant d'insérer la clef USB dans la Raspberry :
Code : Tout sélectionner
~> lsusb
Bus 001 Device 004: ID 0bc2:61b3 Seagate RSS LLC
Bus 001 Device 005: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
~>
Code : Tout sélectionner
~> lsusb
Bus 001 Device 004: ID 0bc2:61b3 Seagate RSS LLC
Bus 001 Device 006: ID 18a5:0302 Verbatim, Ltd Flash Drive
Bus 001 Device 005: ID 0424:7800 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 002: ID 0424:2514 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
~>
Code : Tout sélectionner
Bus 001 Device 006: ID 18a5:0302 Verbatim, Ltd Flash Drive
4) Récupérer des informations pour identifier de manière unique le périphérique.
On va utiliser la commande "lsusb". Nous savons que qu'il s'agit du bus "001" et du device "006".
Code : Tout sélectionner
~> lsusb -s 001:006 -v
Bus 001 Device 006: ID 18a5:0302 Verbatim, Ltd Flash Drive
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x18a5 Verbatim, Ltd
idProduct 0x0302 Flash Drive
bcdDevice 1.00
iManufacturer 1 Verbatim
iProduct 2 STORE N GO
iSerial 3 07013A109B3D5264
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 200mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk-Only
iInterface 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0200 1x 512 bytes
bInterval 0
Device Qualifier (for other device speed):
bLength 10
bDescriptorType 6
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
bNumConfigurations 1
Device Status: 0x0000
(Bus Powered)
~>
Le vendeur :
Code : Tout sélectionner
~> lsusb -s 001:006 -v | grep idVendor
idVendor 0x18a5 Verbatim, Ltd
Code : Tout sélectionner
~> lsusb -s 001:006 -v | grep idProduct
idProduct 0x0302 Flash Drive
Code : Tout sélectionner
~> lsusb -s 001:006 -v | grep iSerial
iSerial 3 07013A109B3D5264
Le vendeur :
Code : Tout sélectionner
~> udevadm info /dev/sdb | grep ID_VENDOR_ID
E: ID_VENDOR_ID=18a5
Code : Tout sélectionner
~> udevadm info /dev/sdb | grep ID_MODEL_ID
E: ID_MODEL_ID=0302
Code : Tout sélectionner
~> udevadm info /dev/sdb | grep ID_SERIAL_SHORT
E: ID_SERIAL_SHORT=07013A109B3D5264
Pour filtrer, vous devez nécessairement identifier le niveau de la règle que vous désirer récupérer.
Voici ce que l'on obtient sans filtrage :
Code : Tout sélectionner
~> udevadm info -a -p $(udevadm info -q path -n /dev/sdb2)
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/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1/target1:0:0/1:0:0:0/block/sdb/sdb2':
KERNEL=="sdb2"
SUBSYSTEM=="block"
DRIVER==""
ATTR{alignment_offset}=="0"
ATTR{discard_alignment}=="0"
ATTR{inflight}==" 0 0"
ATTR{partition}=="2"
ATTR{ro}=="0"
ATTR{size}=="33554432"
ATTR{start}=="206848"
ATTR{stat}==" 63 29 4410 2750 1 0 8 750 0 3070 3500"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1/target1:0:0/1:0:0:0/block/sdb':
KERNELS=="sdb"
SUBSYSTEMS=="block"
DRIVERS==""
ATTRS{alignment_offset}=="0"
ATTRS{capability}=="51"
ATTRS{discard_alignment}=="0"
ATTRS{events}=="media_change"
ATTRS{events_async}==""
ATTRS{events_poll_msecs}=="-1"
ATTRS{ext_range}=="256"
ATTRS{inflight}==" 0 0"
ATTRS{range}=="16"
ATTRS{removable}=="1"
ATTRS{ro}=="0"
ATTRS{size}=="120918016"
ATTRS{stat}==" 191 42 10647 6830 1 0 8 750 0 5360 7580"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1/target1:0:0/1:0:0:0':
KERNELS=="1:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{device_blocked}=="0"
ATTRS{device_busy}=="0"
ATTRS{eh_timeout}=="10"
ATTRS{evt_capacity_change_reported}=="0"
ATTRS{evt_inquiry_change_reported}=="0"
ATTRS{evt_lun_change_reported}=="0"
ATTRS{evt_media_change}=="0"
ATTRS{evt_mode_parameter_change_reported}=="0"
ATTRS{evt_soft_threshold_reached}=="0"
ATTRS{inquiry}==""
ATTRS{iocounterbits}=="32"
ATTRS{iodone_cnt}=="0x2c4"
ATTRS{ioerr_cnt}=="0x2"
ATTRS{iorequest_cnt}=="0x2c4"
ATTRS{max_sectors}=="240"
ATTRS{model}=="STORE N GO "
ATTRS{queue_depth}=="1"
ATTRS{queue_type}=="none"
ATTRS{rev}=="5.00"
ATTRS{scsi_level}=="5"
ATTRS{state}=="running"
ATTRS{timeout}=="30"
ATTRS{type}=="0"
ATTRS{vendor}=="Verbatim"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1/target1:0:0':
KERNELS=="target1:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0/host1':
KERNELS=="host1"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2/1-1.1.2:1.0':
KERNELS=="1-1.1.2:1.0"
SUBSYSTEMS=="usb"
DRIVERS=="usb-storage"
ATTRS{authorized}=="1"
ATTRS{bAlternateSetting}==" 0"
ATTRS{bInterfaceClass}=="08"
ATTRS{bInterfaceNumber}=="00"
ATTRS{bInterfaceProtocol}=="50"
ATTRS{bInterfaceSubClass}=="06"
ATTRS{bNumEndpoints}=="02"
ATTRS{supports_autosuspend}=="1"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2':
KERNELS=="1-1.1.2"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="00"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="200mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0100"
ATTRS{bmAttributes}=="80"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="6"
ATTRS{devpath}=="1.1.2"
ATTRS{devspec}==" (null)"
ATTRS{idProduct}=="0302"
ATTRS{idVendor}=="18a5"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Verbatim"
ATTRS{maxchild}=="0"
ATTRS{product}=="STORE N GO"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="removable"
ATTRS{serial}=="07013A109B3D5264"
ATTRS{speed}=="480"
ATTRS{urbnum}=="2006"
ATTRS{version}==" 2.00"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1':
KERNELS=="1-1.1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="02"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="2mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0bb3"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="3"
ATTRS{devpath}=="1.1"
ATTRS{idProduct}=="2514"
ATTRS{idVendor}=="0424"
ATTRS{ltm_capable}=="no"
ATTRS{maxchild}=="3"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="fixed"
ATTRS{speed}=="480"
ATTRS{urbnum}=="46"
ATTRS{version}==" 2.00"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1/1-1':
KERNELS=="1-1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="02"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="2mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0bb3"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="2"
ATTRS{devpath}=="1"
ATTRS{idProduct}=="2514"
ATTRS{idVendor}=="0424"
ATTRS{ltm_capable}=="no"
ATTRS{maxchild}=="4"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="unknown"
ATTRS{speed}=="480"
ATTRS{urbnum}=="47"
ATTRS{version}==" 2.00"
looking at parent device '/devices/platform/soc/3f980000.usb/usb1':
KERNELS=="usb1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{authorized_default}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="09"
ATTRS{bDeviceProtocol}=="01"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="0mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 1"
ATTRS{bcdDevice}=="0414"
ATTRS{bmAttributes}=="e0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="1"
ATTRS{devpath}=="0"
ATTRS{idProduct}=="0002"
ATTRS{idVendor}=="1d6b"
ATTRS{interface_authorized_default}=="1"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="Linux 4.14.69-v7+ dwc_otg_hcd"
ATTRS{maxchild}=="1"
ATTRS{product}=="DWC OTG Controller"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="unknown"
ATTRS{serial}=="3f980000.usb"
ATTRS{speed}=="480"
ATTRS{urbnum}=="31"
ATTRS{version}==" 2.00"
looking at parent device '/devices/platform/soc/3f980000.usb':
KERNELS=="3f980000.usb"
SUBSYSTEMS=="platform"
DRIVERS=="dwc_otg"
ATTRS{busconnected}=="Bus Connected = 0x1"
ATTRS{buspower}=="Bus Power = 0x1"
ATTRS{bussuspend}=="Bus Suspend = 0x0"
ATTRS{devspeed}=="Device Speed = 0x0"
ATTRS{driver_override}=="(null)"
ATTRS{enumspeed}=="Device Enumeration Speed = 0x1"
ATTRS{fr_interval}=="Frame Interval = 0x1d4b"
ATTRS{ggpio}=="GGPIO = 0x00000000"
ATTRS{gnptxfsiz}=="GNPTXFSIZ = 0x01000306"
ATTRS{gotgctl}=="GOTGCTL = 0x001c0000"
ATTRS{gpvndctl}=="GPVNDCTL = 0x00000000"
ATTRS{grxfsiz}=="GRXFSIZ = 0x00000306"
ATTRS{gsnpsid}=="GSNPSID = 0x4f54280a"
ATTRS{guid}=="GUID = 0x2708a000"
ATTRS{gusbcfg}=="GUSBCFG = 0x20001700"
ATTRS{hcd_frrem}=="HCD Dump Frame Remaining"
ATTRS{hcddump}=="HCD Dump"
ATTRS{hnp}=="HstNegScs = 0x0"
ATTRS{hnpcapable}=="HNPCapable = 0x1"
ATTRS{hprt0}=="HPRT0 = 0x00001005"
ATTRS{hptxfsiz}=="HPTXFSIZ = 0x02000406"
ATTRS{hsic_connect}=="HSIC Connect = 0x1"
ATTRS{inv_sel_hsic}=="Invert Select HSIC = 0x0"
ATTRS{mode}=="Mode = 0x1"
ATTRS{mode_ch_tim_en}=="Mode Change Ready Timer Enable = 0x0"
ATTRS{rd_reg_test}=="Time to read GNPTXFSIZ reg 10000000 times: 1720 msecs (172 jiffies)"
ATTRS{regdump}=="Register Dump"
ATTRS{regoffset}=="0xffffffff"
ATTRS{regvalue}=="invalid offset"
ATTRS{rem_wakeup_pwrdn}==""
ATTRS{remote_wakeup}=="Remote Wakeup Sig = 0 Enabled = 0 LPM Remote Wakeup = 0"
ATTRS{spramdump}=="SPRAM Dump"
ATTRS{srp}=="SesReqScs = 0x0"
ATTRS{srpcapable}=="SRPCapable = 0x1"
ATTRS{wr_reg_test}=="Time to write GNPTXFSIZ reg 10000000 times: 290 msecs (29 jiffies)"
looking at parent device '/devices/platform/soc':
KERNELS=="soc"
SUBSYSTEMS=="platform"
DRIVERS==""
ATTRS{driver_override}=="(null)"
looking at parent device '/devices/platform':
KERNELS=="platform"
SUBSYSTEMS==""
DRIVERS==""
~>
Comment faire ? En utilisant d'abord nos trois paramètres qui vont s'écrire ainsi :
Code : Tout sélectionner
ATTRS{idVendor}=="18a5"
ATTRS{idProduct}=="0302"
ATTRS{serial}=="07013A109B3D5264"
Code : Tout sélectionner
KERNEL=="sdb2"
SUBSYSTEM=="block"
6) Où créer la règle et comment la nommer ?
Cela se passe dans le répertoire : "/etc/udev/rules.d".
Comme il s'agit de ma clef USB, je l'ai nommé : "10-my-usb-key.rules".
Vous devez impérativement préfixer par un numéro sur deux chiffres et suffixer par ".rules".
Pourquoi ce "10" ? Je n'ai pas trouvé de raison à cela.
7) voici la règle "10-my-usb-key.rules" :
Code : Tout sélectionner
#
# Identification de la clef usb
#
SUBSYSTEM!="block",\
ATTRS{idVendor}!="18a5",\
ATTRS{idProduct}!="0302",\
ATTRS{serial}!="07013A109B3D5264",\
GOTO="my_usb_key_end"
#
# Paramètres
#
ACTION=="add",ENV{ID_OPTIONS}="defaults,auto"
#
# Ajout des liens symboliques
#
ACTION=="add",KERNEL=="sd[b-z]1",SYMLINK+="my_usb_key_1"
ACTION=="add",KERNEL=="sd[b-z]2",SYMLINK+="my_usb_key_2"
#
# Montage des partitions
#
ACTION=="add",KERNEL=="sd[b-z]1",RUN+="/bin/mount -t $env{ID_FS_TYPE} -o $env{ID_OPTIONS} /dev/%k /mnt/boot"
ACTION=="add",KERNEL=="sd[b-z]2",RUN+="/bin/mount -t $env{ID_FS_TYPE} -o $env{ID_OPTIONS} /dev/%k /mnt/rootfs"
#
# traitements
#
ACTION=="add",KERNEL=="sd[b-z]1",RUN+="/root/test.sh"
ACTION=="add",KERNEL=="sd[b-z]2",RUN+="/root/test.sh"
#
# Démontage des partitions
#
ACTION=="remove",KERNEL=="sd[b-z]1",RUN+="/bin/umount /mnt/boot"
ACTION=="remove",KERNEL=="sd[b-z]2",RUN+="/bin/umount /mnt/rootfs"
#
#
# fin de la règle "my_usb_key"
#
LABEL="my_usb_key_end"
a) nous retrouvons le filtrage (subsystem, idVendor, idProduct et serial) au début de la règle. Pourquoi ?
Pour deux raisons.
La première est que nous devrions placer ces quatre filtres partout dans toutes les actions que nous allons entreprendre.
Je considère qu'il est inutile de charger les actions par cette façon de faire.
La seconde raison est que nous pouvons filtrer en utilisant un bloc de conditions au travers du GOTO.
Le GOTO, pour se brancher doit être utiliser en association avec "LABEL".
Dans mon exemple, je n'utilise qu'un seul "LABEL" qui correspond à la structure d'un "IF filtrage THEN bloc END".
b) afin de ne pas tout le temps répéter le paramétrage, j'ai créé un section spéciale.
Le paramètre est "ID_OPTIONS", qui ne doit pas exister au préalable.
c) nous avons deux actions possibles (dans notre cas), qui sont "add" pour l'insertion de la clef et "remove" pour son retrait.
Comme nous avons deux partitions, nous devons les identifier.
Cela se fait par : KERNEL=="sd[b-z]1" pour la partition "boot"
et par :KERNEL=="sd[b-z]2" pour la partition "rootfs".
d) sur chaque action, nous pouvons faire un traitement.
j'ai créé quatre traitements qui sont :
--> les liens symboliques
--> le montage des partitions
--> l'exécution d'un traitement (ici il est bidon car je ne fais que visualiser les variables d'environnements).
--> démontage des partitions en cas de retraits de la clef USB.
e) et bien sûr, pour terminer le bloc, mettre le "label".
8) le montage des partitions.
C'est que j'ai rentré quelques problèmes.
Si manuellement cela peut se résumer à :
Code : Tout sélectionner
mount /dev/sdb2 /mnt/rootfs
Après une recherche sur le NET, il faut ajouter le type de partition, à savoir "vfat" et "ext4".
Cette information se trouve dans la variable d'environnement "ID_FS_TYPE", comme on peut le voir ci-après :
Code : Tout sélectionner
~> udevadm info /dev/sdb1 | grep ID_FS_TYPE
E: ID_FS_TYPE=vfat
~> udevadm info /dev/sdb2 | grep ID_FS_TYPE
E: ID_FS_TYPE=ext4
~>
J'ai choisi "defaults,auto".
Si dans l'état du service "UDEV", vous obtenez ceci :
Code : Tout sélectionner
~> systemctl status udev
? systemd-udevd.service - udev Kernel Device Manager
Loaded: loaded (/lib/systemd/system/systemd-udevd.service; static; vendor preset: enabled)
Active: active (running) since Thu 2018-09-20 05:37:51 CEST; 1min 43s ago
Docs: man:systemd-udevd.service(8)
man:udev(7)
Main PID: 1467 (systemd-udevd)
Status: "Processing with 16 children at max"
CGroup: /system.slice/systemd-udevd.service
+-1467 /lib/systemd/systemd-udevd
sept. 20 05:37:51 RaspberryPi systemd[1]: Starting udev Kernel Device Manager...
sept. 20 05:37:51 RaspberryPi systemd[1]: Started udev Kernel Device Manager.
sept. 20 05:38:05 RaspberryPi mtp-probe[1474]: checking bus 1, device 11: "/sys/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.1/1-1.1.2"
sept. 20 05:38:13 RaspberryPi systemd-udevd[1480]: Process '/bin/mount -o default /dev/sdb1 /mnt/boot' failed with exit code 32.
sept. 20 05:38:13 RaspberryPi systemd-udevd[1482]: Process '/bin/mount -o default /dev/sdb2 /mnt/rootfs' failed with exit code 32.
sept. 20 05:49:00 RaspberryPi systemd-udevd[1583]: Process '/bin/umount -l /mnt/boot' failed with exit code 32.
sept. 20 05:49:00 RaspberryPi systemd-udevd[1587]: Process '/bin/umount -l /mnt/rootfs' failed with exit code 32.
~>
Cela se résout par le paramétrage de la commande "mount".
9) recharger les règles.
Code : Tout sélectionner
udevadm control --reload-rules
Code : Tout sélectionner
systemctl restart udev.service
Code : Tout sélectionner
systemctl status udev.service
12) Pourquoi le montage ne s'effectue pas, même si le code retour est ok ?
Après une recherche sur le NET, vous devez modifier un paramètre dans le service "UDEV".
Le source se trouve dans "/lib/systemd/system/systemd-udevd.service".
Vous recherchez le paramètre "MountFlags".
Avant, il y a "slave". Vous mettez "shared".
Après la modification, vous rechargez le service :
Code : Tout sélectionner
systemctl daemon-reload
En principe, si vous n'avez pas de exit code 32, le montage doit se faire correctement.
13) conclusion.
C'est l'astuce du paragraphe 12) qui m'a bloqué dans la résolution de cette règle "UDEV".
Sinon, il n'est pas très compliqué d'automatiser des traitements à l'insertion ou au retrait d'un clef USB.
Si j'ai oublié quelque chose, je modifierais ce message. Si vous avez des questions, n'hésitez pas !
@+