web-dev-qa-db-fra.com

comment créer une règle udev pour flash USB avec deux partitions pour créer un nœud persistant sous / dev?

J'ai une mémoire flash USB, j'ai créé deux partitions dessus, quand il est connecté, il faut parfois sda, sda1 et sda4 au lieu de sdb, sdb1, sdb4. Pour éviter cette confusion, j'ai décidé de créer une règle udev afin de la lier de manière symétrique sous/dev de manière persistante.

J'ai créé la règle ci-dessous

ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0461", ATTRS{idProduct}=="4d81", SYMLINK+="myusb"

Lorsque je redémarre, il crée un lien symbolique sous /dev/myusb mais je ne peux pas le monter.

 Sudo mount /dev/myusb /media/myusb

 mount: /dev/bus/usb/002/003 is not a block device

Je pense avoir cette erreur car elle contient deux partitions. Alors, que dois-je faire?

3
kenn

Je pense que le problème est que vous ne pouvez pas monter un lecteur entier avec plusieurs partitions à la fois. Vous devez monter chaque partition pour elle-même. Monter signifie avoir accès au système de fichiers, qui peut être très différent sur deux partitions différentes. Et comment mettriez-vous deux systèmes de fichiers dans un répertoire? Vous devez avoir au moins deux sous-répertoires comme /media/myusb/part1.

Cela dit, nous sommes revenus aux UUID et aux étiquettes.

Vous pouvez créer une règle udev déclenchant un script qui monte les deux partitions par leur uuid, comme

#!/bin/bash

mount /dev/disk/by-uuid/xxxxx-xxxx-xxxxx-xxxxxx /media/myusb/part1
mount /dev/disk/by-uuid/yyyyy-yyyy-yyyyyy-yyyyy /media/myusb/part2

Vous pouvez également placer les partitions dans/etc/fstab et laisser udev faire un mount -a.

Utilisez 'blkid' pour imprimer l'identifiant unique universel pour un périphérique; cela peut être utilisé avec UUID = comme un moyen plus robuste de nommer des périphériques qui fonctionne même si des disques sont ajoutés et supprimés.

Peut-être que vous pourriez essayer ça:

Pour la partition un:

KERNEL=="sd?1", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0461", ATTRS{idProduct}=="4d81", SYMLINK+="myusb1"

Pour la partition deux

KERNEL=="sd?4", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0461", ATTRS{idProduct}=="4d81", SYMLINK+="myusb2"

Je ne sais pas si cela fonctionne, mais vous pouvez l'essayer.

https://Oracle-base.com/articles/linux/udev-scsi-rules-configuration-in-Oracle-linuxhttps://wiki.ubuntuusers.de/udev/

3
JosefScript

Tout d'abord, je tiens à remercier tous ceux qui ont répondu, ils m'ont guidé sur le bon chemin.

Au début, j'ai vérifié les dispositifs pour localiser la clé USB

 fdisk -l 

Disk /dev/sda: 15.5 GB, 15512174592 bytes
234 heads, 12 sectors/track, 10789 cylinders, total 30297216 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00055ec3

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *       16128    30297215    15140544    c  W95 FAT32 (LBA)
/dev/sda4         2142880     5194399     1525760    0  Empty

Disk /dev/sdb: 120.0 GB, 120034123776 bytes
255 heads, 63 sectors/track, 14593 cylinders, total 234441648 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000517fa

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb2   *        2048    40959079    20478516   83  Linux
/dev/sdb3        40959998   234436544    96738273+   5  Extended
/dev/sdb5        40960000    52956093     5998047   83  Linux
/dev/sdb6        52957184   221904895    84473856   83  Linux
/dev/sdb7       221906944   234436544     6264800+  83  Linux

Ma clé USB a été saisie sdasda1 et sda4 (je n'ai pas encore trouvé le moyen d'affecter sda au disque principal)

Puis j'ai fait un attribute-walk pour obtenir les paramètres associés avec

udevadm info -a -p $(udevadm info -q path -n /dev/sda)
udevadm info -a -p $(udevadm info -q path -n /dev/sda1)
udevadm info -a -p $(udevadm info -q path -n /dev/sda4)

J'ai utilisé ATTRS{serial} et ATTR{partition}==1, ATTR{partition}==2 comme identifiants distinctifs.

KERNEL=="sd*", ATTRS{serial}=="0019E06B5883CCA187BC2C59", ATTR{partition}=="1", SYMLINK+="usbdevices"

fonctionne pour la partition 1

1
kenn