Hallo zusammen!
Auf meinem USB-Stick existiert ein Verzeichnis, welches ich bei jedem Einhängen mittels rdiff-backup lokal sichern möchte. Zu diesem Zweck gibt es eine udev-Regel:
/etc/udev/rules.d/50-usb-storage-custom.rules
BUS=="usb", ACTION=="add", KERNEL=="sd?1", SYSFS{serial}=="AA6271026J3000000078", SYMLINK+="WDATA", RUN="/bin/mount /dev/WDATA", RUN+="/usr/local/bin/wollewiki-backup.sh"Der Stick wird erkannt und gemountet, anschließend wird das Backup per Script durchgeführt. Das funktioniert normalerweise ganz gut, der Vollständigkeit halber füge ich noch den für den USB-Stick relevanten Teil der fstab an.
/etc/fstab
# USB-Stick gezielt einbinden oder auch nicht #UUID=4C92-54E2 /media/WDATA vfat rw,utf8,nosuid,nodev,noexec,noauto,users,noatime,sync,uid=0,gid=46,dmask=007,fmask=117,optional,nobootwait 0 0 /dev/WDATA /media/WDATA vfat rw,utf8,nosuid,nodev,noexec,noauto,users,noatime,sync,uid=0,gid=46,dmask=007,fmask=117,optional,nobootwait 0 0 UUID=4C93-6AA9 none vfat ro,utf8,nosuid,nodev,noexec,noauto,nouser,sync,noatime,optional,nobootwait,nofail 0 0 UUID=31fcc7da-4214-4ef7-b2e2-113749ca1d6a none ext2 ro,nosuid,nodev,noexec,noauto,nouser,sync,noatime,optional,nobootwait,nofail 0 0
Dazu sollte ich noch sagen, dass der Stick 3 Partitionen hat: Meine Datenpartition, eine Partition mit einem Live-System und dann noch eine Partition, um das Live-System auch persistent booten zu können. Da ich weiß, dass meine Datenpartition die erste ist, ist es kein Problem sie mit udev anzusprechen (siehe udev-Regel). Die anderen beiden Partitionen identifiziere ich per UUID und mounte sie einfach nicht. Mir ging das irgendwann auf die Nerven, so dass ich die fstab entsprechend angepasst habe. Wie man aus der auskommentierten Zeile sieht, wurde früher auch die Datenpartition nur via fstab und nicht mittels udev gemountet.
Ich hoffe, dass das bis hierher nicht arg falsch ist. Das Vorgehen habe ich aus dem Ubuntuusers-Wiki-Artikel zu udev übernommen.
Nun habe ich aber ein Problem: Ich stecke den USB-Stick rein, das Backup wird ausgeführt. Das geht sehr fix und ich kann mich auch beherrschen, sofort loszubasteln. Alles paletti. Dann umounte ich den Stick mittels Rechtsklick auf dem Desktop und dann "Aushängen". Dann ziehe ich den USB-Stick ab. Doch was passiert? Warum auch immer (eigentlich ne gute Frage), das Backup-Script wird erneut ausgelöst und rdiff-backup erstellt den neuen Mirror vom (nun leeren) leeren Mountpoint. Das dauert. Man kann es rückgängig machen, aber das löst nicht das Problem, sondern behebt nur die aktuellen Symptome. Und es ist manuelle Arbeit. Was es auf jeden Fall nicht ist: das erwünschte Verhalten.
Was ist hier passiert? Wenn das Backup erneut ausgelöst wurde, bedeutet das, dass das Script neu ausgelöst wurde (so sagt auch das Log, welches ich mit dem Script erzeuge). Also muss udev den Stick ja als "neu reingesteckt" erkennen... aber warum? Mache ich was falsch oder ist das ein Problem von USB, dass man vielleicht beim Abziehen mal kurz keinen Kontakt, dann wieder Kontakt und dann wieder keinen Kontakt haben kann, so dass ein add-Ereignis ausgelöst wird? Was kann man dagegen tun? Sowas wie eine Zwangspause zwischen remove- und add-Ereignis? Das wäre zwar auch nicht sonderlich elegant, aber vielleicht zweckmäßig. Nur... wie umsetzen? Ein remove-Ereignis mittels udev-Regel definieren ist ja kein Problem, nur was sollte ich da tun, um ein sofortiges add-Ereignis hinauszuzögern? Anschließend könnte man im Script ja abfragen, ob auch wirklich gemountet wurde und nur dann das Backup ausführen.
Ciao
Wolle
2004 – 2012 ubuntuusers.de • Einige Rechte vorbehalten