Obwohl udev nicht direkt auf UUIDs zugreifen kann, werden sie zumindest in Fedora und Ubuntu als Umgebungsvariablen festgelegt ( ENV
). Sie können alle Umgebungsvariablen eines Geräts durch Aufrufen auslesen udevadm info /dev/sdc
. ZB für ein NTFS auf einem externen Laufwerk bekomme ich:
$ 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
[…]
Alles mit einem E:
Vorzeichen wird als Umgebungsvariable festgelegt.
Matching gegen UUIDs
Sie können dagegen mit vergleichen ENV{ID_FS_UUID}=="4A6F2ABC1232FA37"
. Als ersten Filter stimme ich überein KERNEL=="sd?2"
, um sicherzustellen, dass ich nur Blockgeräte mit der richtigen Partitionsnummer behandle. Die vollständige Regel würde folgendermaßen aussehen:
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]"
Der Befehl logger ist nützlich, um zu bestätigen, dass die Regel tatsächlich ausgeführt wird. Als nächstes sollten Sie überprüfen, ob die Regel keine Syntaxfehler mit enthält udevadm test /dev/sdc2
. Ihre Regeldatei sollte in der Ausgabe aufgeführt sein und keine Fehlermeldung sollte daneben erscheinen. Jetzt können Sie alle Regeln für Ihr Gerät auslösen, um zu überprüfen, ob Ihre Regel wie geplant funktioniert : sudo udevadm trigger /dev/sdc2
. Wenn Ihre Regel übereinstimmt, finden Sie die benutzerdefinierte Protokollnachricht im Systemprotokoll ( /var/log/syslog
oder über journalctl -b
).
Bearbeiten: ali_m hat darauf hingewiesen, dass die Umgebungsvariablen durch vorherige Regeln festgelegt wurden und daher nur zugänglich sind, wenn Ihre .rules
Datei eine ausreichend hohe lexikografische Reihenfolge aufweist . Mit "60" zu beginnen sollte ausreichen. Persönlich beginne ich meine Regeln mit "zz" (wenn möglich), um sie auf einen Blick von vordefinierten Regeln zu unterscheiden.
Verwenden von UUIDs im RUN
Befehl und anderswo
Udev hat eine ziemlich leistungsfähige Syntax für die Substitution von Variablen und Attributen . Insbesondere wird jedes Vorkommen von $env{ID_FS_UUID}
durch die UUID des Laufwerks ersetzt. Um ein Gerät unter zu mounten, können /media/
UUID
Sie diese Regel verwenden:
KERNEL=="sd??", RUN+="/usr/bin/mkdir /media/$env{ID_FS_UUID}", RUN+="/usr/bin/mount $devpath /media/$env{ID_FS_UUID}"
Sie möchten wahrscheinlich stattdessen udisks konfigurieren, es ist jedoch auf den zu lösenden Problembereich spezialisiert. Siehe https://wiki.archlinux.org/index.php/udisks#udisks2:_mount_to_.2Fmedia als Ausgangspunkt.
Mein eigentlicher Anwendungsfall für das Mounten von Geräten mit udev anstelle von /etc/fstab
oder udisks ist das Mounten von zfs-Dateisystemen, die einige Besonderheiten aufweisen, sodass sie nicht ganz zu den üblichen Tools passen.