Ich möchte das USB-Laufwerk /media
basierend auf der UUID der Festplatte einbinden. Wie kann ich die UUID eines USB-Laufwerks in einer udev-Regeldatei verwenden und was ist eine udev-Regel, um das USB-Laufwerk mit der UUID-Nummer als Ordnername bereitzustellen?
Der blkid
Befehl gibt die UUID einer Festplatte aus, jedoch nur beim Mounten.
Antworten:
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 auslesenudevadm info /dev/sdc
. ZB für ein NTFS auf einem externen Laufwerk bekomme ich: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 übereinKERNEL=="sd?2"
, um sicherzustellen, dass ich nur Blockgeräte mit der richtigen Partitionsnummer behandle. Die vollständige Regel würde folgendermaßen aussehen: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 überjournalctl -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 anderswoUdev 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: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.quelle
.rules
Dateiname mit einer Zahl> 60 beginnen .Mir fällt eine grobe Lösung ein. Legen Sie den entsprechenden fstab-Eintrag fest, der durch die UUID identifiziert wurde. Und in udev-Regeln
mount -a
jedes Mal ausführen, wenn ein neues sd * -Gerät hinzugefügt wird.quelle