Mounten und Auswerfen von USB-Datenträgern via CLI

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
stillebucht
Beiträge: 31
Registriert: 30.10.2013 11:13:19

Mounten und Auswerfen von USB-Datenträgern via CLI

Beitrag von stillebucht » 27.04.2016 12:45:53

Hallo zusammen,

ich habe einen kleinen Server, auf dem Debian 8 läuft. An diesen möchte ich sporadisch eine externe Festplatte anschließen, um Daten zu sichern. Offen ist für mich noch, wie das Mounten und Auswerfen des Datenträgers am Besten gehandhabt wird. Im Wiki habe ich einen Artikel zu AutoFS gefunden - mit dem Hinweis, dass die Methode veraltet und usbmount wahrscheinlich besser sei. Im Eintrag zu usbmount steht jedoch, dass das Paket aktuell nicht mehr gepflegt wird... Ich hatte schon damit experimentiert die Festplatte in die fstab einzutragen mit den Optionen noauto und users. Trotzdem konnte ich die Platte nicht als user mounten. Des Weiteren ist auch das manuelle Auswerfen des Datenträgers mittels

Code: Alles auswählen

echo 1 > /sys/bus/usb/devices/$USBNODE/remove
etwas ungeschickt, da sich die Nummer des USB Nodes ja ändern kann

Was ist also der aktuell empfohlene Weg zur Handhabung von USB-Datenträgern, wenn man keine grafische Oberfläche nutzt?

Meine Anforderungen bzw. Wünsche:
  1. Die Festplatte soll im laufenden Betrieb gemountet und später sicher entfernt werden - also nicht nur mittels umount, sondern auch Beenden der Stromversorgung des Geräts.
  • Es handelt sich immer um die gleiche Festplatte, sprich Modell und UUID der Partition sind bekannt.
  • Die Methode sollte andere Laufwerke (teils auch USB), die permanent angeschlossen sind und in /etc/fstab eingetragen bzw. konfiguriert sind, nicht beeinträchtigen.
  • Schön wäre es, wenn ich das Mounten und Auswerfen als normaler User und nicht nur als Root machen kann.
  • Ganz toll, aber wirklich kein Muss, wäre es, wenn sich eine Aktion ausführen lässt, wenn der Datenträger angeschlossen wird (ein bestimmtes Skript ausführen). Dann könnte das Backup vollautomatisiert laufen. Aber wenn das nicht geht, kann ich den Befehl auch via SSH absetzen.
Kennt jemand eine Lösung für meine Anforderungen?

Danke,

Timo

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: Mounten und Auswerfen von USB-Datenträgern via CLI

Beitrag von NAB » 27.04.2016 12:53:30

Das hatten wir gerade hier:
viewtopic.php?f=34&t=160495
zwar etwas langatmig, aber dafür von allen Seiten beleuchtet.
(achtung, das eigentliche Backupscript ist viel zu umständlich)

Und egal was du dir zusammenbastelst, du wirst es nie erreichen, dass der Server den USB-Stecker auswirft. Bestenfalls reagiert die Platte auf "hdparm".
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

stillebucht
Beiträge: 31
Registriert: 30.10.2013 11:13:19

Re: Mounten und Auswerfen von USB-Datenträgern via CLI

Beitrag von stillebucht » 27.04.2016 22:58:56

NAB hat geschrieben:Das hatten wir gerade hier:
viewtopic.php?f=34&t=160495
Danke. Die bevorzugte Lösung scheint also udev zu sein. Dann werde ich mich mal damit auseinandersetzten und das für meinen Anwendungsfall konfigurieren.
NAB hat geschrieben:Und egal was du dir zusammenbastelst, du wirst es nie erreichen, dass der Server den USB-Stecker auswirft. Bestenfalls reagiert die Platte auf "hdparm".
Was meinst du damit genau? Dass der Stecker physisch nicht gezogen wird, ist mir klar - das muss ich natürlich am Ende selbst machen. Aber dass der Server die Stromversorgung des Geräts abschaltet, so wie es beim "Sicheren Entfernen" von einem grafischen Desktop aus der Fall wäre, sollte doch möglich sein. Die Frage ist für mich eher, schaffe ich das als normaler Bentuzer oder muss es root sein, und gibt es einen komfortableren Befehl dafür. Letztlich schaffe ich dass als root ja auch durch Setzen des entsprechenden Parameters im sysfs (danach wird das Gerät - anders als mit hdparm - auch tatsächlich nicht mehr aufgelistet oder gefunden). Wenn es da tatsächlich keinen einfacheren Weg gibt, müsste ich mir halt ein kleines Skript schreiben, dass die einzelnen Knoten durchgeht und schaut, welcher davon meine USB-Festplatte ist.

NAB
Beiträge: 5501
Registriert: 06.03.2011 16:02:23
Lizenz eigener Beiträge: MIT Lizenz

Re: Mounten und Auswerfen von USB-Datenträgern via CLI

Beitrag von NAB » 27.04.2016 23:34:48

Richtig. Der richtige Platz, um auf das Einstecken eines Gerätes zu reagieren, ist udev. Da es bei dir eine konstante UUID ist, könnte die Regel recht übersichtlich ausfallen. Die udev-Regel sollte einen Symlink unter /dev/ anlegen. Der enthält die Information, die du brauchst, nämlich unter welchem Namen das Gerät eingeblendet wurde.

Dann kannst du direkt aus der Regel eine Systemd-Unit starten lassen, die mount, backup, umount ausführt. Oder permanent ein Shellscript im Hintergrund laufen lassen, das umständlich per "inotify" auf dieses Device wartet. Die Systemd-Lösung sieht einfacher aus.

Da udev & systemd eh als root laufen, kriegst du das Problem fehlender Berechtigungen erst gar nicht.

Mit "hdparm -y" kannt du die Platte (hoffentlich) problemlos schlafen legen. Ein weiterer Sinn des Abmeldens vom USB-Bus erschließt sich mir nicht ... dazu müsstest du wohl umständlich per "udevadm" herausfinden, an welchem $USBNODE die Platte hängt.
Never change a broken system. It could be worse afterwards.

"No computer system can be absolutely secure." Intel Document Number: 336983-001

DeletedUserReAsG

Re: Mounten und Auswerfen von USB-Datenträgern via CLI

Beitrag von DeletedUserReAsG » 28.04.2016 09:51:33

Zum „Auswerfen“: dafür kann man eject nehmen, wenn ein normales Aushängen nicht ausreichend sein sollte.

stillebucht
Beiträge: 31
Registriert: 30.10.2013 11:13:19

Re: Mounten und Auswerfen von USB-Datenträgern via CLI

Beitrag von stillebucht » 29.04.2016 23:33:01

So, ich habe das Ganze inzwischen mal ausprobiert und konfiguriert. Ein Backupskript hatte ich schon - das habe ich nun noch um das Mounten und Aushängen erweitert. Daneben genügt mir folgende udev-Regel zum Ausführen des Backupskripts:

Code: Alles auswählen

KERNEL=="sd?1", ACTION=="add", SUBSYSTEMS=="usb", ATTRS{manufacturer}=="Toshiba", ATTRS{serial}=="20141105221265B", RUN+="/bin/sh -c 'echo /usr/local/bin/usb_backup.sh | at now +1 minute > /dev/null 2>&1'"
Ich habe mich im Moment für die minimalistische Variante mit RUN (der Umweg über at umgeht das Zeitlimit für die Ausführung des Befehls) anstelle einer Systemd-Unit entschieden. Schlicht, weil ich noch nicht viel Erfahrung mit Systemd habe und ich für das einfache Ausführen eines Skripts (noch) keinen besonderen Vorteil darin sehe. Evtl. ändere ich das später noch. Aber so funktioniert es erst mal sehr gut.

Um das Ganze noch etwas komfortabler zu gestalten, habe dem Backupskript am Ende noch ein "beep" hinzugefügt, sodass ich weiß, wann ich die Festplatte wieder ausstecken kann.

Zu den weiteren Kommentaren:
NAB hat geschrieben:Die udev-Regel sollte einen Symlink unter /dev/ anlegen. Der enthält die Information, die du brauchst, nämlich unter welchem Namen das Gerät eingeblendet wurde.
Da das Mounten über die UUID läuft, benötige ich nicht zwingend einen extra Symlink. Und standardmäßig gibt es ja bereits die Symlinks für UUID, Label, usw. unter /dev/disk/.
niemand hat geschrieben:Zum „Auswerfen“: dafür kann man eject nehmen, wenn ein normales Aushängen nicht ausreichend sein sollte.
Das habe ich getestet. Eject bewirkt bei mir nichts. Die Festplatte dreht munter weiter.
NAB hat geschrieben:Mit "hdparm -y" kannt du die Platte (hoffentlich) problemlos schlafen legen. Ein weiterer Sinn des Abmeldens vom USB-Bus erschließt sich mir nicht ...
Ich habe es jetzt in der Tat mit hdparm umgesetzt. Allerdings mit der Option -Y, denn die sorgt laut man page dafür, dass sich die Festplatte in den tiefsten Sleep-Mode versetzt und praktisch ausschaltet. Danach ist sie auch tatsächlich nicht mehr ansprechbar.

Vielen Dank für die Anregungen!

Timo

Antworten