Automatisches Backup mit udev bei Anschluss von externer Festplatte

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Automatisches Backup mit udev bei Anschluss von externer Festplatte
Hey Leute,

ich probiere schon seit Stunden meinen Backup-Prozess zu automatisieren, sodass er selbst startet, sobald ich meine externe Festplatte anschließe. Das würde ich gerne per „udev“ realisieren (ohne genau zu wissen, was es ist). Dazu folgte ich folgender Anleitung: https://wiki.ubuntuusers.de/udev/#udev-Regel-schreiben-und-speichern.

Meine Regel:

KERNEL=="sd?1", SUBSYSTEMS=="usb", ATTRS{serial}=="2017112315035", ATTRS{idProduct}=="0579", ATTRS{idVendor}=="152d", ACTION=="add", RUN+="/home/philipp/Backup/udevTest.sh"

Die ATTRS-Daten stimmen, da das Skript prinzipiell ausgeführt wird – genau dort liegt auch mein Problem.

Das auszuführende Skript „udevTest.sh“:

#!/bin/bash
# /home/philipp/Backup/backup-skript
cp /home/philipp/Backup/test.txt /media/philipp/BACKUP-FESTPLATTE/
touch /home/philipp/Schreibtisch/udevTest.txt # dient lediglich zur Kontrolle, ob Skript ausgeführt wurde

Mein Problem: der „cp“-Befehl wird ignoriert, die Dummy-Datei aber angelegt. Starte ich das Skript manuell, wird die Test-Datei auf meine externe Festplatte kopiert.

Außerdem:
Die auskommentierte Zeile startet ein weiteres Skript, das das Backup anlegt. Entferne ich den Kommentar geschieht wie bei „cp“ gar Nichts, per Kommandozeilenausführung nimmt alles seinen gewohnten Lauf.

Wenn ihr wisst, was ich falsch mache, lasst es mich bitte wissen!
Beste Grüße und bis dann
Philipp


Mir erscheint es als ob deine Aktion schlicht zu früh erfolgt: Wahrscheinlich ist zum Zeitpunkt der Scriptausführung /media/philipp/BACKUP-FESTPLATTE/ noch nicht wirklich verfügbar. Die UDEV-Regel greift schließlich sofort wenn das Gerät angeschlossen wird. Eingehängt (unter /media/philipp) wird es aber erst später.

Die Empfehlung wäre, dass das Script genau darauf wartet.


Wenn ich ein „sleep 10“ vor das „cp“ einbaue, ändert das Nichts. Meiner Beobachtung nach, wird erst das Skript ausgeführt und dann die Festplatte eingehängt, weil es 10s dauert bis mir die Festplatte in Dateiexplorer angezeigt wird.
Des Weiteren passiert Nichts, wenn ich eine Abfrage nach dem Verzeichnis dem Skript voranstelle:

DIRECTORY='/media/philipp/BACKUP-FESTPLATTE/'
while [ ! -d "$DIRECTORY" ]; do
	sleep 5
done

Ansonsten weiß ich nicht, wie ich auf das Einhängen warten kann.


In einer UDEV-Regel darfst du tatsächlich nicht warten. Diese werden seriell nacheinander ausgeführt und währenddessen ist das entspr. Gerät blockiert.

Was ich eigentlich ausdrücken wollte ist der Vorschlag, nicht auf den Anschluss der Festplatte sondern auf deren Einhängung zu reagieren.

Hier ist ein Beispiel wie jemand (mit etwas Hilfe, einfach im Thread weiterlesen) genau dieses Problem mittels Systemd löst: https://bbs.archlinux.org/viewtopic.php?id=207050 Dazu der Hinweis, dass Systemd units nicht nur im System-, sondern auch im Nutzerkontext installiert werden können. Auch das wird in dem Thread gezeigt.


Den Thread finde ich ziemlich technisch bzw. übersteigt er meine Linux-Kenntnisse :-/

Ich werde es mal per Anacron probieren und in einem Skript abfragen, ob das Verzeichnis existiert.

Vielen Dank für deine Ratschläge! :slight_smile:


Ja, wenn es ganz trivial wäre hätte ich es auch gleich direkt hierhin übernommen.


Ich konnte den Prozess soweit mit anachron erfolgreich aufziehen. Eine regelmäßige Abfrage, ob die externe Festplatte angeschlossen ist, stellt zwar nicht die eleganteste Lösung dar aber sie funktioniert :smiley:


Falls es dich noch interessiert wie es mit systemd / udev gehen sollte, hoffentlich auch ohne Timeout am Anfang des Skripts:

Udev Regel (z.B. speichern unter /etc/udev/rules.d/10-backup-hdd.rules):

KERNEL=="sd?1", SUBSYSTEMS=="usb", ATTRS{serial}=="2017112315035", ATTRS{idProduct}=="0579", ATTRS{idVendor}=="152d", ACTION=="add", ENV{SYSTEMD_WANTS}+="backup-hdd.service"

Systemd unit (z.B. speichern unter /etc/systemd/system/backup-hdd.service):

[code][Unit]
Description=backup my files to my hdd
#Falls noch nicht anderweitig gemounted, passenden Eintrag in /etc/fstab erstellen und nächste Zeile auskommentieren
#Wants=media-philipp-BACKUP\x2dFESTPLATTE.mount
After=media-philipp-BACKUP\x2dFESTPLATTE.mount

[Service]
Type=oneshot
ExecStart=/home/philipp/Backup/udevTest.sh[/code]

1 „Gefällt mir“