USB Stick Kopierer

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hi,

    Vielleicht könnt ihr mir bei der Entwicklung einer Idee helfen, evtl. gibt es aber auch schon eine Lösung.

    Ich würde gerne mit Hilfe eines Raspberry einen USB Stick Kopierer bauen.

    D.h. ein Master Stick wird eingesteckt und auf Anzahl X kopiert wird.

    Usb Hubs gibt es ja wie Sand am Meer, das sollte nicht das Problem sein.

    Die Frage ist eher die Linux Ebene.

    Wie viele Sticks können gemountet werden?
    Ist ein gleichzeitges kopieren der Daten möglich?

    Evtl. auch nur ein eins zu eins klonen des Sticks.

    Gruß Jan

  • Ja, das sollte zeimlich einfach sein. Es können mindestens 210 USB-Geraete gleichzeitig verwendet werden.

    Skizze:

    1. Du vertraust auf das Automount-feature der Standardinstallation.

    2. EIn Cron-Job wird jede Minute aufgerufen und checkt, ob ein Master gemountet wurde und mindestens ein anderer Stick, dann kopiert er alles rueber. Danach wird der Master und die Sticks, die nun die Koopie enthalten automatisch ge-unmountet.

    3. Sticks abziehen, fertig.

    Wie erkennt man den Master? Entweder, ist dort eine Spezielle Datei drauf, die gefunden werden muss (und nicht mitkopiert wird), oder Du untersuchst andere Parameter des Sticks. Das mit der Datei haette noch den Vorteil, dass darin noch weitere Anweisungen stehen könnten, z.B. ob der Inhalt nach dem Kopieren geloscht werden soll, ob die Slave-Sticks vorher gelöscht werdne sollen, oder ob die Daten zu den bereits vorhanden hinzugefuegt werden sollen etc....

  • Hallo Jayjay92,

    einen USB-Kopierer habe ich 2013 mal entwickelt, nachdem kommerzielle Exemplare die beim Kunden durchzuführende Qualifizierung nicht bestanden hatten.

    Meine Entwicklung (Hardware, Schaltung, Software) wurde dann allerdings als Computersystem eingestuft und durfte das gängige Verfahren (Lastenheft, Pflichtenheft, GAMP5, Risikoanalyse, Technisches Design, CSV, Hardware, Software, ...) durchlaufen.

    Die bisherigen Vorschläge mögen naheliegend sein - stellen sich aber als unpraktikabel heraus. Ich habe es damals so gemacht, dass ein USB-Port als "Original" betrachtet wird. Ist dort ein USB-Medium vorhanden, dann wird der Inhalt auf die Medien kopiert, die danach in die anderen USB-Ports eingesteckt werden. Meine Lösung kopiert dann solange, wie neue USB-Medien bereitgestellt werden.

    Der aktuelle Status wird über LEDs angezeigt. Ich habe damals DUO-LEDs (rot, grün) verwendet. Als Mischfarbe dient dann orange.

    Die LEDs über über jedem Port leuchten / blinken rot / grün / orange und können auf diese Weise diverse Stati bezeichnen. Blinken bedeutete in meiner Lösung z.B. Aktion (erforderliche Aktion des Anwenders oder aktive Aktion der Software). Dauerhaftes Leuchten signalisiert einen Abschluss (erfolgreich / erfolgloser Abschluss, Stick kann wieder entnommen werden, ...)


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hi,

    Ich bin immer noch an diesem Thema dran.

    Manuelles mounten und kopieren auf alle Sticks habe ich hinbekommen. Nun versuche ich einen Port als Master Port zu definieren.

    Erst einmal sah folgender Befehl ganz vielversprechend aus um den Port zu identifizieren.

    Der Befehl gibt einen Pfad aus der auf einen speziellen Port verweist. Mit diesem Pfad konnte ich herausfinden welcher /dev/sd* gemountet werden muss.

    Code
    udevadm info -q path -n /dev/sdc

    Dann musste ich jedoch feststellen das sich im dem resultierenden Pfad Paramater ändern. Je nachdem wann in welcher Reihenfolge die Sticks eingesteckt werden.

    Hat jemand eine Hilfestellung wie ich dies realisieren kann ?

    Gruß Jan

    • Offizieller Beitrag

    keine systemd-Unit?

    Das würde zu sehr ins OT gleiten. (Aber dieser Müll hat auf einem Linuxoiden Betriebsystem nichts zu suchen und gehört an allen Fronten bekämpft ). Ich werde morgen meine Devuan Tests auf dem Pi starten und ggf. ein Tutorial schreiben.

    DStS56lV4AAJI6Y.jpg:large

  • Bis jetzt gibt es also drei Lösungsideen:

    aber eine Idee wäre auf dem Master-Stick eine Datei zu hinterlegen, welche nur dort ist und nicht mitkopiert wird. :denker:

    Hierbei stellt sich mir die Frage wie ich die Datei erkenne bevor gemountet wurde.

    Oder ne Udev Regel :denker:

    Könntest du mir eine Hilfestellung geben wie ich da vorgehe ?

    Und wenn du den USB Stick zum "Master" machst, welcher als erstes eingesteckt worden ist?

    So würde ich es dann machen. Ist sicher der einfachste weg.

    Vielleicht gibt es ja noch Ideen zur Lösung.

    • Offizieller Beitrag

    Hierbei stellt sich mir die Frage wie ich die Datei erkenne bevor gemountet wurde.

    Verstehe ich nicht... wieso bevor gemountet wurde? Wenn ein gemounteter Stick diese Datei enthält, dann ist das der Meister. Haben die anderen gemounteten Sticks die Datei nicht an Bord, dann können das ja nur Sklaven sein von denen nichts kopiert werden soll. ;) Ich habe den Thread mal von Anfang an gelesen, da hatte wend voriges Jahr schon diesen Vorschlag quasi 1:1 unterbreitet.

    BTW: Die anderen Vorschläge sind aber auch echt eine Überlegung wert!

  • So, ich habe mich nun mit den udev Regeln beschäftigt. Folgendes ist dabei herausgekommen:

    Code
    SUBSYSTEMS=="usb", ATTRS{devpath}=="1.1.2", SYMLINK+="master"
    
    SUBSYSTEMS=="usb", ATTRS{devpath}=="1.3.1", SYMLINK+="usb1"
    SUBSYSTEMS=="usb", ATTRS{devpath}=="1.3.2", SYMLINK+="usb2"
    SUBSYSTEMS=="usb", ATTRS{devpath}=="1.3.3", SYMLINK+="usb3"

    devpath verweist anscheinend auf den Port. Meine Test sehen bis jetzt ganz gut aus.

    Neben dem Master Stick habe ich auch Regeln für die 10 Ports des USB Hubs angelegt.

    Nun muss ich noch die Regeln für die sdX Pfade deaktivieren.

  • So, ich habe mich nun mit den udev Regeln beschäftigt. Folgendes ist dabei herausgekommen:

    Code
    SUBSYSTEMS=="usb", ATTRS{devpath}=="1.1.2", SYMLINK+="master"
    
    SUBSYSTEMS=="usb", ATTRS{devpath}=="1.3.1", SYMLINK+="usb1"
    SUBSYSTEMS=="usb", ATTRS{devpath}=="1.3.2", SYMLINK+="usb2"
    SUBSYSTEMS=="usb", ATTRS{devpath}=="1.3.3", SYMLINK+="usb3"

    devpath verweist anscheinend auf den Port. Meine Test sehen bis jetzt ganz gut aus.

    Neben dem Master Stick habe ich auch Regeln für die 10 Ports des USB Hubs angelegt.

    Nun muss ich noch die Regeln für die sdX Pfade deaktivieren.

    Hört sich nach einer guten Lösung an, oder was meinen die, die mehr Ahnung davon haben?

    Einen Port als `master` zu definieren, finde ich im Übrigen sicherer, als z.B. eine unkontrollierbare (Mount-) Zeit als Basis zu nehmen. Letztendlich geht es hier wieder um externe Hardware und die hat auch sonst mal gerne einen Disconnect und somit mutiert ein falsche Stick möglicherweise zum neuen Master.

    Ansonsten wäre natürlich eine Kennung auf dem Stick schön. Eine ganz saubere technische Lösung wäre natürlich eine (hardwarenahe) Markierung (keine Ahnung was man bspw. noch zusätzlich in die Firmware/Boot Sektoren schreiben kann) - ansonsten wäre eine pragmatische Lösung ansonsten auch einfach die Bezeichnung des Sticks ;)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!