Wir aktualisieren unsere Server von einer sehr veralteten Distribution auf ein modernes Debian Jessie-basiertes System, einschließlich lightdm / xfce und natürlich systemd (und udisks2). Ein Knackpunkt ist die automatische Bereitstellung von USB-Laufwerken. Früher haben wir dies mit einigen udev-Regeln erreicht. Die alten Regeln funktionieren fast immer noch - der Bereitstellungspunkt wird erstellt und das Laufwerk ist ordnungsgemäß bereitgestellt, aber nach einigen Sekunden führt systemd etwas aus, das die Bereitstellung unterbricht, sodass nachfolgende Zugriffsversuche zu Fehlern führen, dass der Transportendpunkt nicht verbunden ist.
Das manuelle Mounten des Laufwerks über die Befehlszeile funktioniert einwandfrei. Das gleiche gilt für den Dateimanager (thunar und thunar-volman, die wiederum udisks2 verwenden). Aber das sind keine praktikablen Optionen - diese Systeme laufen meistens ohne Kopf, so dass Thunar normalerweise nicht läuft. Wir müssen in der Lage sein, Festplattenlaufwerke für unbeaufsichtigte Cron-basierte Sicherungen anzuschließen.
Ich dachte, dass das Ändern des udev-Skripts, um einen getrennten Job zu erzeugen, der einige Sekunden vor dem Ausführen des Ladevorgangs wartet, den Trick machen könnte, aber systemd scheint alles zu tun, um dies zu verhindern - es wartet irgendwie immer noch, bis der getrennte Job beendet ist auch weiterhin.
Vielleicht ist es der richtige Ansatz, wenn das udev-Skript udisks2 kitzelt? Ich bin ratlos, daher wird jeder Rat sehr geschätzt.
quelle
Antworten:
Nach mehreren Fehlstarts habe ich das herausgefunden. Der Schlüssel besteht darin, einen System-Unit-Service zwischen udev und einem Mount-Skript hinzuzufügen.
(Ich verstehe, ich war nicht in der Lage, dies mit udisks2 (über so etwas wie
udisksctl mount -b /dev/sdb1
), das entweder direkt aus einer udev-Regel oder aus einer systemd-Unit-Datei aufgerufen wurde , zum Laufen zu bringen . Es scheint eine Race-Bedingung zu geben, und der Geräteknoten ist nicht ganz bereit , was zuError looking up object for device /dev/sdb1
Unglück führt, da udisks2 sich um die ganze Unordnung auf dem Mount Point kümmern könnte ...)Das schwere Heben wird durch ein Shell-Skript erledigt, das das Erstellen und Entfernen von Bereitstellungspunkten sowie das Bereitstellen und Entfernen der Laufwerke übernimmt.
/usr/local/bin/usb-mount.sh
Das Skript wird wiederum von einer systemd-Unit-Datei aufgerufen. Wir verwenden die Dateinamensyntax "@", um den Gerätenamen als Argument zu übergeben.
/etc/systemd/system/[email protected]
Schließlich starten und stoppen einige udev-Regeln den System-Unit-Service beim Hotplug / Unplug:
/etc/udev/rules.d/99-local.rules
Dies scheint den Trick zu tun! Ein paar nützliche Befehle zum Debuggen von Dingen wie folgt:
udevadm control -l debug
Aktiviert die ausführliche Protokollierung,/var/log/syslog
damit Sie sehen können, was gerade passiert.udevadm control --reload-rules
nachdem Sie Dateien im Verzeichnis rules.d geändert haben (möglicherweise nicht erforderlich, kann aber nicht schaden ...).systemctl daemon-reload
Nachdem Sie die System-Unit-Dateien geändert haben.quelle
blkid
anscheinend kein Extrakt vorhanden istID_FS_LABEL
, also habe ich stattdessen nur das verwendet,DEVBASE
anstatt dasLABEL
zu konstruierenMOUNT_POINT
.udevadm
anstelle von verwendenblkid
. Es enthält viel mehr Details sowie zusätzliche Informationen. (zBudevadm info --query=property --name=sda1
)/usr/bin/find: '/media/*': No such file or directory
. Bei der Bereinigung kann wieif [ "$f" != "/media/*" ]; then
vor dem Ausführen eine zusätzliche Überprüfung durchgeführt werdenfind
.Es gibt eine neue, prägnante
systemd
Auto-Mount-Option, mitfstab
der Sie alle standardisierten Mount-Berechtigungsoptionen verwenden können. Sie sieht folgendermaßen aus:Ein Beispiel in einer
fstab
Zeile:Die
noauto
Option bedeutet, dass nicht versucht wird, beim Booten gemountet zu werden, wie bei älterer Softwareautofs
.Nachdem Sie eine neue
x-systemd.automount
Zeile hinzugefügt haben , müssenfstab
Sie Folgendes ausführen:und dann beide oder eine der folgenden:
Für weitere Informationen dazu:
https://wiki.archlinux.org/index.php/Fstab#Automount_with_systemd
quelle
sudo systemctl restart local-fs.target
hat den Trick für mich getanIch habe das Skript von @MikeBlackwell geändert zu:
/dev/sd[a-z]
sondern/dev/sd[a-z]*
; Dies ist häufig bei Servern mit einer größeren Anzahl von Spindeln der Fall./var/log/usb-mount.track
/var/log/messages
mit dem Tag usb-mount.sh/media/sdd2_usbtest
,/media/sdd2_
Da @MikeBlackwell bereits die meiste Zeit mit dem Heben von Lasten verbracht hat, habe ich beschlossen, es nicht umzuschreiben. habe gerade die notwendigen Änderungen vorgenommen. Ich habe seine Arbeit bestätigt, indem ich seinen Namen und die URI der ursprünglichen Antwort gesehen habe.
Finden Sie es unter https://github.com/raamsri/automount-usb
quelle
Mit pmount , systemd und Mike Blackwells Ansatz können Sie das Ganze vereinfachen:
/etc/systemd/system/[email protected]
/etc/udev/rules.d/99-usb-mount.rules
HTH und danke Mike.
quelle
Ich würde Warren Youngs Antwort folgen, an der ich einige Änderungen vorgenommen habe
Ich fügte einen Platzschutz hinzu, da er Fehler aus der Umgebungsbewertung für das Laufwerk ergab.
Ich habe einen Abschnitt hinzugefügt, um eine USB-Festplatte zu chmodieren, damit alle Benutzer uneingeschränkten Zugriff auf Nicht-NTFS- oder VFAT-Festplatten haben.
/usr/local/bin/usb-mount.sh
quelle