web-dev-qa-db-fra.com

Utilisez UUID dans les règles UDEV et monture USB Drive On / Media / $ UUID

Je veux monter le lecteur USB dans /media Basé sur l'UUID du disque. Comment puis-je utiliser l'UUID d'un lecteur USB dans un fichier de règles UDEM et quelle est une règle UDev pour monter le lecteur USB avec le numéro UUID comme nom de dossier.

La commande blkid tire l'UUID d'un disque mais uniquement lors du montage.

13
Talespin_Kit

Même si les uuids ne sont pas directement accessibles par UDev, au moins dans Fedora et Ubuntu, ils sont définis comme variables d'environnement (ENV). Vous pouvez lire toutes les variables d'environnement d'un appareil en appelant udevadm info /dev/sdc. Par exemple. Pour une NTFS sur un lecteur externe, je reçois:

$ udevadm info /dev/sdc2
P: /devices/pci0000:00/0000:00:14.0/usb4/4-2/4-2:1.0/Host7/target7:0:0/7:0:0:0/block/sdc/sdc2
N: sdc2
[…]
E: ID_FS_TYPE=ntfs
E: ID_FS_USAGE=filesystem
E: ID_FS_UUID=4A6F2ABC1232FA37
[…]

Tout avec un E: À l'avant est défini comme une variable d'environnement.

Correspondant contre les uuids

Vous pouvez faire correspondre contre elle avec ENV{ID_FS_UUID}=="4A6F2ABC1232FA37". En tant que premier filtre, je fais correspondre contre KERNEL=="sd?2" Pour vous assurer que je ne manipule que des appareils de blocage avec le numéro de partition correct. La règle complète ressemblerait à ceci:

KERNEL=="sd?2", ENV{ID_FS_UUID}=="4A6F2ABC1232FA37", RUN+="/usr/bin/logger --tag my-manual-usb-mount Mounting the device with UUID 4A6F2ABC1232FA37", RUN+="/usr/bin/mount [Your mount options here]"

La commande Logger est utile pour affirmer que la règle est réellement exécutée. Ensuite, vous devriez vérifier que la règle ne contient aucune erreur de syntaxe avec udevadm test /dev/sdc2. Votre fichier de règles doit être répertorié dans la sortie et aucun message d'erreur ne doit apparaître à côté. Vous pouvez maintenant déclencher toutes les règles de votre appareil pour vérifier si votre règle fonctionne comme prévu: Sudo udevadm trigger /dev/sdc2. Si votre règle correspondait, vous trouverez le message de journal personnalisé dans le journal système (/var/log/syslog ou via journalctl -b).

Edition: ali_m a souligné que les variables d'environnement sont définies par des règles précédentes et donc uniquement de manière accessible si votre .rules Fichier a une commande lexicographique suffisamment élevée . À partir de "60" devrait être suffisant. Personnellement, je démarre mes règles avec "ZZ" (si possible) pour les distinguer des règles prédéfinies en un coup d'œil.

Utilisation des uuids dans la commande RUN et ailleurs

UDEV a une variable et une attribution assez puissantes syntaxe de substitution . Spécifiquement chaque occurrence de $env{ID_FS_UUID} sera remplacé par l'UUID du lecteur. Afin de monter un appareil sous /media/UUID Vous pouvez utiliser cette règle:

KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"

Vous voulez probablement configurer uDisks à la place, cependant, il est spécialisé pour l'espace de problème que vous souhaitez résoudre. Voir https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2fmedia comme point de départ.

Mon cas d'utilisation réelle pour les appareils de montage avec Udev au lieu de /etc/fstab ou UDISKS consiste à monter les systèmes de fichiers ZFS qui ont des idiosyncrasies qui les rendent pas tout à fait adaptés aux outils habituels.

14
Perseids

Il y a une solution rugueuse dans mon esprit. Définissez l'entrée de FSTAB correspondante qui est idée par UUID. Et dans les règles UDEV, exécutez mount -a Chaque fois qu'il y a un nouveau périphérique SD * ajouté.

0
waTer