mount von SD Karte feststellen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Lead
User
Beiträge: 3
Registriert: Dienstag 26. März 2013, 16:10

Hallo zusammen,

dies ist mein erster Beitrag. Ich bin in der Python welt noch ziemlich neu, habe aber schon das ein oder andere Skript geschrieben. Unter Linux habe ich ein gefährliches Halbwissen.

Meine Idee für das aktuelle Projekt ist folgende:
Ich werde demnächst heiraten und viele viele Gäste werden mit Digitalkameras rumrennen. Die Bilder hinterher alle zu bekommen ist harte Arbeit, gerade weil viele Gäste von weit her kommen. deshalb möchte ich meinen Raspi mit einer aktuellen Raspbian Distri aufstellen. Da kommt dann ein USB Hub dran, eine Festplatte (USB Hub ist hauptsächlich für die Stromversorgung der Platte da!) und ein Card Reader.
Der Card Reader soll das einzige sein, was auf dem Tisch zu sehen ist. Jeder Gast soll nun, bevor er die Feier verlässt, kurz seine SD Karte (vielleicht auch CF, oder was auch immer) in den Reader stecken. Ein Skript soll das erkennen, ein Verzeichnis mit Datum und Uhrzeit auf der Festplatte erstellen und sämtliche Daten kopieren. Wenn es noch irgendeine Art von Signal gäbe, dass zeigt, dass das Kopieren fertig ist, wäre das perfekt (habe den cardreader noch nicht da).

Ich denke das schwierigste wird für mich die Mount - Erkennung sein. Wo kann ich da ansetzen? Ich habe bereits os.path.ismount() gefunden, dafür brauche ich aber einen pfad, der aber durch das automount verschieden ausfallen kann, oder?

Ich möchte nicht, dass ihr mir das Skript schreibt, das mache ich schon schön selber (macht ja auch spaß), ich brauche nur jemanden, der mich anschiebt und mir sagt, wo ich nachschlagen muss. :)

Danke schonmal an alle potentiellen Helfer!
Blackskyliner
User
Beiträge: 2
Registriert: Dienstag 26. März 2013, 18:58

Nimm udev zum erkennen der SD Karte + Automatisches Mounten.

Siehe: https://wiki.archlinux.de/title/Udev#SD ... _einbinden

Ich weiß keine Debian Dokumentation, outlined aber das wesentliche.

Das direkte erkennen könntest du ggf. über die udev log machen oder über polling...
Besser/Robuster wäre die ganze Lösung indem du einfach das mount Verzeichniss mit inotify (schaun ob das auch mit im Kernel ist) überwachst :-) Da kannst du die python-inotify nutzen um auf entsprechende Events zu lauschen. (oder wenns schneller gehen soll mit ggf. mit inotifytools arbeiten)

Hoffe geholfen zu haben, habe mich extra deswegen hier angemeldet, weil ich den drang hatte zu helfen im Sinne von 'Ich weiß es, ich weiß es!' ;)

Grüße,
Blackskyliner
BlackJack

@Lead: Dafür kann man sich mit dem `udevd` beschäftigen und eine Regel für den Cardreader schreiben. Das hat dann nicht unbedingt etwas mit Python zu tun. Oder man schaut mal wie man auf dem DBus auf solche Ereignisse lauscht. Für DBus gibt es eine Python-Anbindung.
lunar

@Blackskyliner Es gibt kein „udev log“. Man nutzt die Udev-API, um mit Udev zu arbeiten.

@Lead Am einfachsten ist es, wenn Du einfach eine Fotoverwaltung wie gphoto oder digikam verwendest. Diese Programme haben in der Regel eine Funktion zum automatischen Import von Fotos, sprich, Fotos werden automatisch in die Fotosammlung kopiert, sobald ein USB-Medium oder eine Speicherkarte eingesteckt wird. Anschließend kannst Du die Fotos aus dem Programm exportieren (oder einfach aus deren Bilder-Verzeichnis), und das Programm wieder deinstallieren.

Falls Du dennoch selbst Hand anlegen willst, dann nutze den Dienst UDisks, um per DBus auf neue Speichermedien zu lauschen, und deren Mountpoint herauszufinden. So gehen die oben erwähnten Programme vor.
Blackskyliner
User
Beiträge: 2
Registriert: Dienstag 26. März 2013, 18:58

@lunar
Ich frage mich jedes mal aufs neue, gibt es auch Bindings für Python die es nicht gibt? Bin da noch rel. neu als Pytharianer.

Mit udev log meinte ich eher /var/log/messages wenn log_priority=info - Dann bekommt man dann meines Wissens nach 2-3 Nachrichten wenn ein Gerät erkannt wird.
lunar

Diese Nachrichten kommen nicht von udev, sondern direkt vom Kernel, siehe auch "dmesg". Wenn sie überhaupt geloggt werden, geben sie in der Regel keinerlei Auskunft über die spezifischen Eigenschaften des Geräts, geschweige denn über dessen Mountpoint. Darüber hinaus hängt das Format der Log-Einträge von der Konfiguration des Syslog-Dienstes, und wahrscheinlich auch vom spezifischen Kerneltreiber ab. Auch der Name der Log-Datei variiert, oft findet sich beispielsweise "/var/log/syslog" statt "/var/log/messages". Die Log-Datei kann auch gar nicht vorhanden sein, wenn der Syslog-Dienst beispielsweise in eine Datenbank schreibt, oder überhaupt nicht aktiviert ist. Letzteres ist bei modernen systemd-Systemen gar nicht ungewöhnlich, da systemd selbst eine primitive Syslog-Schnittstelle anbietet, die aber iirc irgendwo unter "/var/run/xxx" loggt.

TLDR: Log-Dateien parsen ist ziemlich unzuverlässig :)
Benutzeravatar
Dobi
User
Beiträge: 31
Registriert: Mittwoch 28. September 2011, 17:04

Vor Kurzem habe ich etwas ähnliches (mit USB-Platten statt SD-Karten) für meinen Raspi geschrieben. Die Antwort von Jaime Soriano hier hat mir dabei sehr geholfen: http://stackoverflow.com/questions/4692 ... -in-python
Unmounten wenn du fertig bist kannst du ja über os.system ( http://docs.python.org/2/library/os.html#os.system ).
Als Fertig-Signal kannst du ja beliebig LEDs ansteuern. (Mein Script schreibt mir ne Email.)
Achja, nur so am Rande: Auch wenn es schön ist, wenn nur der card-reader aufm Tisch sichtbar ist, empfehle ich irgendeine Möglichkeit zu haben, mit der du im Fehlerfall dann doch mit Tastatur und Maus dran kannst. VNC geht ja aber auch gut.
Lead
User
Beiträge: 3
Registriert: Dienstag 26. März 2013, 16:10

WOA!

Ich weiß, das klingt jetzt schmalzig, aber ich bin überwältigt von den ganzen Antworten!
Vielen vielen Dank! Ich hab jetzt am WE viel Zeit mir das entsprechende Wissen anzulesen und so werde ich das dann auch mal in Angriff nehmen!
Wenn dadurch weitere Fragen aufkommen, werde ich mich vertrauensvoll an euch wenden!

Danke auch für die nützlichen Links! Jetzt weiß ich endlich wo ich gucken muss :o
Lead
User
Beiträge: 3
Registriert: Dienstag 26. März 2013, 16:10

Hallo!

Danke nochmals für die Hilfe...
Durch die richtigen Suchbegriffe bin ich auf ein wirklich schönes Shellscript gestoßen, dass schon fast das tut, was ich will..ich habs noch etwas angepasst und bin nun absolut glücklich damit!
Falls es jemanden interessiert, auch wenn es nicht Python ist, hier de Link:

http://larsmichelsen.com/open-source/ph ... m-sd-card/
Antworten