Hallo Leute,
momentan sitze ich an einem C-Code, der auf einem Raspberry Pi läuft,
welcher über verschiedene Schnittstellen Messdaten aufnimmt und diese in
ein .txt-File mit Zeitstempel abspeichert. Die Abspeicherung des Files
auf dem Pi funktioniert einwandfrei. Ich stelle mir jedoch vor, dass ich
nur einen USB-Stick an die Pi schließe und die Daten dann automatisch
auf dem USB-Stick gespeichert werden, unabhängig davon an welchen Port
ich diesen gehangen habe.
Gestern habe ich dazu folgenden Tutorial gefunden:
https://www.elektronik-kompendium.de/sites/raspberry-pi/1911271.htm
Da ich nicht so viel Ahnung von Linus-System habe dachte ich, dass das
soweit funktionieren sollte. Die Befehle ließen sich alle in der Console
ausführen, aber zu dem gewünschten Ergebnis haben sie nicht geführt.
Vllt habt ihr noch einige Hinweise?
Vielen Dank
PittyJ schrieb:> Ein Hinweis ist, sich die Probleme und Fehlermeldungen zu> notieren.> Dann kann man sie z.B. bei Post in Foren benutzen.
Das Tutorial beschreibt, dass Ordner im Wurzelverzeichnis mit dem Namen
usb0 bis usb7 erstellt werden. Ein Ordner usb verweist auf das
Verzeichnis usb0 und wenn man einen USB anhängt, dann wird der
automatisch gemountet. Weiterhin beschreibt das Tutorial, dass man in
den Ordner usb Daten schreiben und lesen kann.
Das funktioniert auch. Wenn ich jedoch einen USB-Stick anhänge und Daten
in den Ordner usb, wie beschrieben, beschreibe, landen die Daten nicht
auf dem physischen Stick. Zumindest sehe ich keine Daten an einem
Windowsrechner.
Periodendauer schrieb:> Das Tutorial beschreibt, dass Ordner im Wurzelverzeichnis mit dem Namen> usb0 bis usb7 erstellt werden.
Nö, die werden in das Verzeichnis /media eingehängt.
Lies das am besten nochmal komplett durch und führe Schritt für Schritt
aus. Dann meldest Du hier das Ergebnis für jeden Schritt.
Bei den dort beschriebenen Test ist von Windows nirgends die Rede.
Du solltest erstmal erzählen welches Linux bei dir auf dem Raspi läuft.
In dem Artikel gehts eigentlich um das Mounten/Einhängen von
USB-Speichern ins Linux. Beim Raspbian sollte das Mounten sowieso
automatisch funktionieren. Das, was du willst, ist, dass beim Einstecken
eines (bestimmten) USB-Sticks, Daten übertragen werden. Da musst du nach
"udev rules" googlen.
Andreas B. schrieb:> Periodendauer schrieb:>> Das Tutorial beschreibt, dass Ordner im Wurzelverzeichnis mit dem Namen>> usb0 bis usb7 erstellt werden.>> Nö, die werden in das Verzeichnis /media eingehängt.>> Lies das am besten nochmal komplett durch und führe Schritt für Schritt> aus. Dann meldest Du hier das Ergebnis für jeden Schritt.> Bei den dort beschriebenen Test ist von Windows nirgends die Rede.
Ich wollte jetzt nicht den ganzen Pfad angeben.
Fakt ist, dass das Tutorial so funktioniert, wie es beschrieben steht.
Ich kann einen USB-Stick einstecken, er wird anscheind gemountet und ich
kann Daten in den Ordner /media/usb schreiben und wieder lesen.
Meine Vermutung war jedoch, dass die Daten, die ich in /media/usb
schreibe, wenn ein USB-Stick angehangen ist, auch auf dem Stick
gespeichert werden, welche ich dann an einem anderen Rechner (vllt auch
Windows) wieder lesen kann.
Deswegen bitte ich ja bei euch um Hilfe, da es vllt der falsche Ansatz
war, um mein Problem (siehe ersten Post) zu lösen.
Vllt sollte Du bitte nochmal den ersten Post lesen.
andy schrieb:> Da musst du nach> "udev rules" googlen.
Das ist doch mal ein Ansatz.
Soweit ich weiß läuft ein Raspbian auf dem Raspi.
Ich versuche das Problem nochmal zu umreißen:
Ich führe auf dem Pi ein C-Code aus, der Daten in eine Datei schreibt.
Das Schreiben und Speichern funktioniert auf dem Flash des Pis
einwandfrei.
Nun möchte ich an irgendeinen Port des PIs irgendeinen USB-Stick hängen.
Nun möchte ich, dass der Pi schaut, wo dieser USB-Stick hängt und diese
Daten dort speichert. Im C-Code muss ich dann sicherlich eine allgemeine
Pfadangabe machen, nehme ich mal an.
Periodendauer schrieb:> aber zu dem gewünschten Ergebnis haben sie nicht geführt.
was ist das gewünschte Ergebnis?
Periodendauer schrieb:> Wenn ich jedoch einen USB-Stick anhänge und Daten> in den Ordner usb, wie beschrieben, beschreibe, landen die Daten nicht> auf dem physischen Stick. Zumindest sehe ich keine Daten an einem> Windowsrechner.
wie beschrieben? wie im Tutorial?
"
Zum Testen einen USB-Stick einstecken, folgende Datei erzeugen und
speichern.
1
nano /media/usb/test.txt
Anzeigen, ob die Datei wirklich existiert:
1
cd /media/usb
2
ls
Anschließend kann man die Datei löschen:
1
rm test.txt
"
Wenn Du die Datei löschst, dann ist auch nix mehr zu sehen in Windows.
;)
Teste doch mal folgendes:
1.) Datei in Windows auf dem Stick erzeugen (vorzugsweise eine
Textdatei)
2.) Stick aushängen und in den Raspi.
3.) Im Raspi schauen, ob die Datei da ist.
1
cat /media/usb/NAME_DER_DATEI
4.) Im Raspi eine Datei anlegen, z.B. mit
1
echo hallo > /media/usb/raspi_hallo.txt
5.) Stick in den Windows-Rechner und die Datei raspi_hallo.txt
anschauen.
Um einfacher Dateien zu bearbeiten empfehle ich den Midnight-Commander
(ähnliche Anmutung wie der Norton-Commander aus DOS-Zeiten, aber viel
mächtiger), der läuft in der Linux-Konsole, z.B. beim Zugriff per ssh.
Einfach als root installieren:
Wenn es noch um das beschreiben geht: Hast Du umountet, bevor Du den
Stick vom Raspi abgezogen hast?
Falls außer mount beim reinstecken des Sticks automatisch etwas
passieren soll, ist der von andy beschriebene Tip mit udev rules der
richtige Weg.
Periodendauer schrieb:> Ich versuche das Problem nochmal zu umreißen:
Dein Problem ist bereits angekommen. Den Lösungsansatzt hast du jetzt
auch, den Rest musst du dir selbst erarbeiten. Es wird dir keiner hier
eine massgeschneiderte Lösung fertig programmieren, dafür bist du im
falschen Forum. Da musst du z.B. ins Raspi-Forum.
Das was du willst, geht mit udev rules. Hier wäre ein guter erster
Schritt:
https://github.com/stonfute/BashUSBCopy
Ansonsten nach "udev rules copy data on usb storage" googln, verstehen
und zu einem Ganzen zusammensetzen.
Martin H. schrieb:> Periodendauer schrieb:>> aber zu dem gewünschten Ergebnis haben sie nicht geführt.>> Wenn Du die Datei löschst, dann ist auch nix mehr zu sehen in Windows.> ;)>> Teste doch mal folgendes:> 1.) Datei in Windows auf dem Stick erzeugen (vorzugsweise eine> Textdatei)> 2.) Stick aushängen und in den Raspi.> 3.) Im Raspi schauen, ob die Datei da ist.cat> /media/usb/NAME_DER_DATEI4.) Im Raspi eine Datei anlegen, z.B. mitecho> hallo > /media/usb/raspi_hallo.txt5.) Stick in den Windows-Rechner und> die Datei raspi_hallo.txt> anschauen.>> Um einfacher Dateien zu bearbeiten empfehle ich den Midnight-Commander> (ähnliche Anmutung wie der Norton-Commander aus DOS-Zeiten, aber viel> mächtiger), der läuft in der Linux-Konsole, z.B. beim Zugriff per ssh.> Einfach als root installieren:apt install mcund als mc aufrufen.>> Ciao, Martin
Vielen Dank für die Hinweise, gelöscht habe ich die erstellte Datei
nicht. Hätte ich dazusagen sollen ;)
Ich habe jetzt einen USB-Stick gemountet, wo bereits txt-Datein
gespeichert sind. In den Verzeichnissen /media/usb0 bis usb7 und
/media/usb kann ich keine Datein entdecken. Ich muss dazusagen, dass ich
das nicht mit der Konsole nachprüfe. Gibt es da unterschiede?
Jedoch habe ich folgenden Ordner in /media: /media/pi/8415-BCDF und dort
kann ich meine Datei finden und auch Datein hinzufügen. Diese Datein
sehe ich dann auch auf anderen Rechnern.
Wieso sind die Datein nicht in dem Ordner /media/usb?
Vielen Dank für eure Hilfe!
nach mount
/dev/mmcblk0p2 on / type ext4 (rw,noatime,data=ordered)
devtmpfs on /dev type devtmpfs
(rw,relatime,size=470180k,nr_inodes=117545,mode=755)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,relatime)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts
(rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755)
tmpfs on /run/lock type tmpfs
(rw,nosuid,nodev,noexec,relatime,size=5120k)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup
(rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/system
d-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup
(rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)
cgroup on /sys/fs/cgroup/cpuset type cgroup
(rw,nosuid,nodev,noexec,relatime,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup
(rw,nosuid,nodev,noexec,relatime,devices)
cgroup on /sys/fs/cgroup/net_cls type cgroup
(rw,nosuid,nodev,noexec,relatime,net_cls)
cgroup on /sys/fs/cgroup/freezer type cgroup
(rw,nosuid,nodev,noexec,relatime,freezer)
cgroup on /sys/fs/cgroup/blkio type cgroup
(rw,nosuid,nodev,noexec,relatime,blkio)
systemd-1 on /proc/sys/fs/binfmt_misc type autofs
(rw,relatime,fd=32,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
mqueue on /dev/mqueue type mqueue (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
sunrpc on /run/rpc_pipefs type rpc_pipefs (rw,relatime)
configfs on /sys/kernel/config type configfs (rw,relatime)
/dev/mmcblk0p1 on /boot type vfat
(rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortnam
e=mixed,errors=remount-ro)
tmpfs on /run/user/1000 type tmpfs
(rw,nosuid,nodev,relatime,size=94956k,mode=700,uid=1000,gid=1000)
gvfsd-fuse on /run/user/1000/gvfs type fuse.gvfsd-fuse
(rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)
xrdp-chansrv on /home/pi/thinclient_drives type fuse.xrdp-chansrv
(rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
/dev/sda on /media/pi/8415-BCDF type vfat
(rw,nosuid,nodev,relatime,sync,gid=100,fmask=0117,dmask=0007,allow_utime
=0020,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro,uhe
lper=udisks2)
ls /media -al
insgesamt 44
drwxr-xr-x 11 root root 4096 Okt 22 15:42 .
drwxr-xr-x 21 root root 4096 Mär 14 2018 ..
drwxr-x---+ 3 root root 4096 Okt 23 11:16 pi
lrwxrwxrwx 1 root root 4 Okt 22 15:42 usb -> usb0
drwxr-xr-x 2 root root 4096 Okt 23 11:11 usb0
drwxr-xr-x 2 root root 4096 Okt 22 15:42 usb1
drwxr-xr-x 2 root root 4096 Okt 22 15:42 usb2
drwxr-xr-x 2 root root 4096 Okt 22 15:42 usb3
drwxr-xr-x 2 root root 4096 Okt 22 15:42 usb4
drwxr-xr-x 2 root root 4096 Okt 22 15:42 usb5
drwxr-xr-x 2 root root 4096 Okt 22 15:42 usb6
drwxr-xr-x 2 root root 4096 Okt 22 15:42 usb7
So wie das aussieht, wird der Stick automatisch in /media/pi/8415-BCDF
gemounted.
Die Anleitung ist für die Uralt Version des Raspians (Wheezy) und kann
komplett rückgängig gemact werden. Du hast bereits eine neue Version,
die das Automount schon drin hat.
Lösch also den ganzen USB Kram in /mount und regle den Rest mit udev
rules.
Edit:
Hier ist eine ganz gute Anleitung dazu:
https://wiki.ubuntuusers.de/udev/
Andreas B. schrieb:> So wie das aussieht, wird der Stick automatisch in> /media/pi/8415-BCDF> gemounted.> Die Anleitung ist für die Uralt Version des Raspians (Wheezy) und kann> komplett rückgängig gemact werden. Du hast bereits eine neue Version,> die das Automount schon drin hat.> Lösch also den ganzen USB Kram in /mount und regle den Rest mit udev> rules.>> Edit:> Hier ist eine ganz gute Anleitung dazu:> https://wiki.ubuntuusers.de/udev/
Vielen Dank für deine Hilfe und für den Link!
Andreas B. schrieb:> Edit:> Hier ist eine ganz gute Anleitung dazu:> https://wiki.ubuntuusers.de/udev/
Ich habe nochmal eine Rückfrage. Das Einbinden eines USB-Sticks scheint
machbar mit den udev-Regeln zu sein, zumindest nachdem, was ich dort
gelesen habe.
In dem Beispiel wird sich aber auf ein bestimmtes USB-Gerät mit
Seriennummer und Vendor bezogen. Wenn ich die Sache aber allgemein
halten will, also einen beliebigen USB-Stick verwenden möchte, würde
dann die Zeile in etwa so aussehen?
KERNEL=="sd?1", SUBSYSTEMS=="usb", SYMLINK+="blablabla"
Brauch ich die Seriennummer oder Hersteller, wenn ich es allgemein
halten möchte?
Zum Einbinden des USB Sticks sind die Regeln schon drin, sonst würde er
bei Dir nicht automatisch mounten.
Der Eintrag SUBSYSTEM=="block" funktioniert für jedes Block device, also
auch USB sticks.
Also:
ACTION=="add", KERNEL=="sda", SUBSYSTEM=="block", ENV{ID_BUS}=="usb",
RUN+="MeinScript"
Periodendauer schrieb:> /dev/sda on /media/pi/8415-BCDF type vfat
Wobei hier der Mountpoint aus der Datenträgerbezeichnung (8415-BCDF)
gebildet wird, für dich daher vorhersagbar/beeinflussbar ist, Die
Datenträgerbezeichnung ist ja auch unter Windows änderbar.