Von Python aus Daten auf einen USB-Stick schreiben (Linux Raspberry Pi)

Gast #4797461
Hallo,

ich habe ein Messgerät gebaut, dass für die GUI und Messdatenauswertung 
einen Raspberry Pi mit Touchscreen verwendet. Nun würde ich gerne die 
Messergebnisse auf einen USB Stick speichern können. Das ganze soll von 
der GUI aus passieren können.

Ich habe mittlerweile gelesen, dass es usbmount gibt und dies 
automatisch einen Stick mounten kann, sobald er eingesteckt wird. Aber 
was passiert dann, nachdem ich die Datei geschrieben habe? Muss ich den 
Stick unmounten, damit die Daten auch sicher auf dem Stick sind oder 
gibt es irgendwelche Konfigurationen, die jegliches Caches für den Stick 
abschalten?
#4797490
Sven schrieb:
> Braucht umount nicht root rechte?

Ja, arbeitest du nicht als root auf dem Pi?

Als mountoptionen bieten sich "sync" bzw. "flush" an, die dafür sorgen 
dass Daten sofort geschrieben werden. Aber woher weißt du, dass nicht 
gerade geschrieben wird wenn der Stick herausgezogen wird?

Ich würde ein kleines Script schreiben welches den Stick mountet, die 
Daten schreibt, den Stick unmountet und anschließend anzeigt dass dieser 
entfernt werden kann.
Gast #4797515
Schreiben kann ja nur ich gerade mit meiner Software auf den Stick. 
Jemand anders ist da ja nicht. Darum hätte ich halt in der Software 
gemeldet, wenn die fertig ist mit dem Schreiben.

Aber wirklich unmounten ist wohl die sauberste Lösung.

PS: Nein, die Python Software läuft nicht als root
#4798460
Sven schrieb:
> Ich habe mittlerweile gelesen, dass es usbmount gibt und dies
> automatisch einen Stick mounten kann, sobald er eingesteckt wird. Aber
> was passiert dann, nachdem ich die Datei geschrieben habe? Muss ich den
> Stick unmounten, damit die Daten auch sicher auf dem Stick sind oder
> gibt es irgendwelche Konfigurationen, die jegliches Caches für den Stick
> abschalten?

Wenn Du den Stick abziehen möchtest, dann solltest Du ihn unmounten. 
Wenn der Stick eingesteckt bleiben soll, reicht es, den Systembefehl 
fsync(2) für Deine Datei aufzurufen. Unter Python wird der Befehl in 
os.fsync angeboten, auf ein Python-file() f wird das dann mit 
os.fsync(f.fileno()) aufgerufen.

Das Mounten und Unmounten kann übrigens auch ein leider in Vergessenheit 
geratenes Programm namens automounter bzw. autofs durchführen. Das 
mountet den USB-Stick beim Zugriff auf den konfigurierten Mountpoint und 
unmountet ihn wieder, wenn für eine bestimmte Zeit kein Zugriff mehr 
stattgefunden hat.
#4798461
Sven schrieb:
> Braucht umount nicht root rechte?

Das hängt von den Mountoptionen des betreffenden Dateisystems ab. Und 
wer ein Programm als User mit root-Rechten ausführen möchte, dann das 
explizit mit der NOPASSWD-Option für sudo freischalten. Achtung: die 
/etc/sudoers immer mit "visudo" bearbyten, dann wird eine Fehlerprüfung 
gemacht bevor die Datei geschrieben wird; den gewünschten Editor kann 
man dabei über die Umgebungsvariable EDITOR einstellen:
1
sudo EDITOR='emacs -nw' visudo

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.