Même si les UUID 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 périphérique en appelant udevadm info /dev/sdc
. Par exemple, pour un NTFS sur un disque externe, j'obtiens:
$ 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 ce qui a un E:
devant est défini comme une variable d'environnement.
Correspondance avec les UUID
Vous pouvez rivaliser avec ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. En tant que premier filtre, je me compare KERNEL=="sd?2"
pour m'assurer que je ne gère que les périphériques de bloc 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 devez 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é. Maintenant , vous pouvez 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 correspond, vous trouverez le message de journal personnalisé dans le journal système ( /var/log/syslog
ou via journalctl -b
).
Edit: ali_m a souligné que les variables d'environnement sont définies par les règles précédentes et donc uniquement accessibles si votre .rules
fichier a un ordre lexicographique suffisamment élevé . Commencer par "60" devrait suffire. Personnellement, je commence mes règles par "zz" (si possible) pour les distinguer des règles prédéfinies en un coup d'œil.
Utilisation des UUID dans la RUN
commande et ailleurs
Udev a une syntaxe de substitution de variable et d'attribut assez puissante . Plus précisément, chaque occurrence de $env{ID_FS_UUID}
sera remplacée par l'UUID du lecteur. Donc, pour 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 voudrez probablement configurer les 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éel pour monter des périphériques avec udev au lieu de /etc/fstab
ou udisks est de monter des systèmes de fichiers zfs qui ont quelques particularités les rendant pas tout à fait adaptés aux outils habituels.