Wie kann ich dasselbe Image auf viele SDs kopieren?

23

Also kann ich endlich die Sammelbestellung für Raspberry Pis aufgeben ! Ihre Konfiguration wird jedoch eine lästige Aufgabe sein. Was ich gerne machen würde ist:

  1. Laden Sie ein Archivbild herunter und basteln Sie daran auf einem einzelnen Pi
  2. Speichern / extrahieren / kopieren Sie dieses Bild auf alle anderen SD-Karten
  3. Habe die anderen Pi´s alle eingerichtet, ohne dass eine zusätzliche Konfiguration durchgeführt werden muss

Mein Computer verfügt nur über einen einzigen SD-Steckplatz. Gibt es also eine Möglichkeit, eine .imgDatei von meiner geänderten "Master" -Karte zu generieren ?

Tom Medley
quelle
4
Tom check out this post raspberrypi.stackexchange.com/questions/311/… Ich denke, es beantwortet Ihre Frage.
Steve Robillard
@SteveRobillard +1 Damit wird die Frage perfekt beantwortet.
Jivings
4
Eine Sache, die Sie beachten sollten, ist SSH. Wenn Sie SSH auf dem Master einrichten, erhalten Sie geklonte SSH-Zertifikate für alle Images. Dies ist nicht unbedingt das, was Sie möchten. OTOH, wenn Sie das Pis kopflos verwenden, möchten Sie wahrscheinlich, dass SSH installiert wird ...
Darren Wilkinson
@darrenjw Das ist ein extrem guter Punkt. Du hast mir ein bisschen Verlegenheit erspart und keinen Fehler gemacht. Vielen Dank.
Jivings
Je nachdem, wie Sie diese Menge an Pis verwenden möchten, möchten Sie vielleicht das Raspi-LTSP-Projekt von Andrew Mulholland ausprobieren . Es ist nicht nur für den Unterricht nützlich, sondern auch für Cluster.
Dave Jones

Antworten:

7

Es gibt ein paar einfache Vorbereitungsschritte, die Sie ausführen müssen, bevor Sie einen Klon-Master in Kopien schreiben, wodurch Sie viele Kopfschmerzen ersparen.

  1. Konfigurieren Sie den Klonmaster für DHCP
  2. Löschen Sie alles in /etc/ssh/ssh_host*(diese werden neu erstellt, wenn Sie SSHD ausführen)
  3. Wenn Sie eine /etc/udev/rules.d/70-network*Datei haben, müssen Sie den eth0Eintrag in etwas anderes ändern (das ich eth9für meine Klon-Master verwendet habe) - und daran denken, die zugehörige ifconfigDatei zu aktualisieren - in Centos /etc/sysconfig/network-scripts/ifcfg-eth0(make it 9) und in Debian (raspbian)/etc/network/interfaces
Nox
quelle
7

Ich hatte die gleichen Anforderungen wie 1und 2ein angepasstes Betriebssystem zu verteilen. Nachdem ich mich umgesehen hatte, fand ich viele Befehle, aber kein einziges Tool, um eine kompakte .zipDatei von einer SD-Karte zu erstellen. Also schrieb ich mkimg.sh, was so funktioniert:

sudo bash mkimg.sh /dev/sda sdcard.img.zip

Dies nimmt das nicht gemountete Gerät auf /dev/sda, verkleinert das Dateisystem und die Partition und schreibt eine komprimierte Zip-Datei aus. In meiner Verwendung schreibt dies ein ~ 1,5 GB Raspbian-System, um <500 MB zu erstellen .zip.

Zusammen mit den Überprüfungen und Größenberechnungen führt das Skript im Wesentlichen Folgendes aus:

e2fsck -f /dev/sda2
resize2fs -M /dev/sda2
parted --align optimal /dev/sda unit MB resizepart 2 1700 yes
dd bs=1M if=/dev/sda of=sdcard.img count=1900
zip sdcard.img.zip sdcard.img
parted /dev/sda resizepart 2 16.0GB
resize2fs /dev/sda2

Das Skript und die Dokumentation sind auf GitHub verfügbar .

berto
quelle
5

Sie können Raspberry Pis zusammen mit Multixterm auf Ihrem Hauptcomputer verwenden, um das Schreiben Ihrer SD-Karte zu beschleunigen . Sie sollten in der Lage sein, Multixterm in den Paketmanagern vieler Distributionen zu finden.

Schritt 1: Kaufen Sie ein paar USB-Stick-SD-Kartenadapter.

Schritt 2: Verwenden Sie die Standardmethoden, um 2 der SD-Kartenabbilder mit Ihrem Hauptcomputer zu schreiben.

Schritt 3: Legen Sie die 2 SD-Karten mit Bildern in 2 Raspberry Pis ein und verbinden Sie sie mit Ihrem Netzwerk und schalten Sie sie ein.

Schritt 4: Stecken Sie 2 leere SD-Karten in die USB-Stick-Adapter und stecken Sie sie in die 2 laufenden Rapsberry Pis.

Schritt 5: Hier wird es interessant: Verwenden Sie auf Ihrem Hauptcomputer multixterm wie auf der Befehlszeile multixterm -xc "ssh% n" host1 host2, wobei host1 und host2 die IP-Adressen des Raspberry Pis sind.

Schritt 6: Innerhalb des Stdin-Fensters von multixterm können Sie dd wie gewohnt verwenden, um Bilder auf die SD-Karten zu schreiben. Jetzt sendet multixterm den Befehl dd gleichzeitig an beide Raspberry Pis.

Schritt 7: Wiederholen Sie die Schritte 3 bis 6, bis Sie alle Ihre Karten geschrieben haben.

Je mehr SD-Karten Sie speichern, desto mehr Raspberry Pis können Sie zum Speichern neuer SD-Karten verwenden. Natürlich werden mit dieser Technik nicht alle Karten auf einmal geschrieben, aber es wird weniger Zeit benötigt, um alle Karten zu beschreiben. Diese Technik wäre weitgehend experimentell, sodass Ihre Laufleistung variieren würde, aber die Theorie klingt nach einem interessanten Experiment ...

Dan B
quelle
Sehr interessant - aber auch sehr teuer für die Massenproduktion =) hehe love it. Gibt es keine Möglichkeit, Hyper-Thread-Bilder in unterschiedlichen Konsolen auf unterschiedliche USB-SD-Adapter zu schreiben?
Piotr Kula
5

Was Sie suchen, ist ein Gruppenprogrammiergerät für SD-Karten oder ein SD-Karten-Duplikator.

Ja, diese Systeme existieren. Hier ist eine , die ich von Googling "SD-Karten-Gang-Programmierer" gefunden habe. Dieses spezielle Gerät verfügt über einen Master-Steckplatz, in den bis zu 7 Slave-SD-Karten gleichzeitig kopiert werden können. Andere Programmierer mit 3 oder 11 Slave-Slots sind ebenfalls erhältlich.

Es gibt auch verschiedene Arten von Programmierern. Einige können ein Image von Ihrer Festplatte flashen und werden von der auf einem PC installierten Software gesteuert. Andere Geräte, wie das oben verlinkte, müssen nicht an einen Server angeschlossen werden, da sie die Informationen eines Master-Chips spiegeln.

Erwähnenswert ist, dass diese Geräte nicht billig sind. Sie werden normalerweise in einer Massenproduktionsumgebung verwendet und sind nicht übermäßig gefragt. Seien Sie bereit, mindestens 1.000 US-Dollar für ein gutes Gerät mit dieser Funktionalität zu zahlen.

ProDuplicator.com bietet anscheinend auch einige weitere Optionen zum Kopieren von SD- Karten .

RLH
quelle
Ich frage mich, warum das so viel kostet, wenn man bedenkt, dass man dieses Ding immer noch aufpassen muss, um die SD-Karten manuell ein- und auszustecken.
Dmitry Grigoryev
@DmitryGrigoryev In den 5 Jahren seit meiner Antwort hat die Duplikatorseite jetzt eine für unter 600 USD, was meiner Meinung nach billig erscheint. Beachten Sie, dass die Menge den Preis bestimmt. Nicht viele Leute brauchen diese, deshalb sind sie teuer, weil sie die Entwicklungs- und Herstellungskosten decken müssen. Wenn es einen für jeweils 10 PCs oder Laptops gäbe, wäre es wahrscheinlich ein Gerät für 100-150 US-Dollar.
RLH
5

Wir hatten eine ähnliche Anforderung für ein Projekt, bei dem wir in der Lage sein mussten, täglich Bilder auf über 10 Raspberry Pi SD-Karten zu schreiben. Wir haben uns die verschiedenen Karten-Duplikatoren angeschaut, die es zu kaufen gibt, aber festgestellt, dass die meisten von ihnen keine bootfähige SD-Karte herstellen, da die meisten nur Dateien direkt kopieren und nicht die bootfähigen Informationen, sie sind auch lächerlich teuer!

Als Lösung haben wir unsere eigene einfache webbasierte Software geschrieben, die auf einem einzelnen Raspberry Pi ausgeführt werden kann, der an zwei Belkin-USB-Hubs mit sieben Anschlüssen angeschlossen ist (The Pi hat eine Beschränkung auf zwei Hubs und maximal 14 USB-Anschlüsse).

Wir haben dies jetzt als Open Source-Software veröffentlicht, um anderen mit denselben Anforderungen zu helfen. Derzeit ist nur der Quellcode verfügbar, aber wir werden auch eine Image-Datei hochladen, die auf Arch Linux ARM mit Nginx + php basiert

http://www.rockandscissor.com/projects/osid

user10282
quelle
2

Dies funktioniert unter Mac OS X.

Hängen Sie die Karte aus, an der Sie herumgebastelt haben, und versuchen Sie Folgendes:

sudo dd if=/dev/sdcardlocation of=backupimage.img.

Ersetzen Sie sdcardlocationdurch den Speicherort Ihrer SD-Karte.

Sie könnten .imgmit .dmgoder tauschen .iso.

Um die anderen Karten fertig zu machen, müssen Sie sie aushängen und den vorherigen Code mit den vertauschten Werten ausführen. Die Zeile wäre:

sudo dd if=backupimage.img of=/dev/sdcardlocation.

Stellen Sie sicher, dass Sie sie aushängen, bevor Sie sie aus dem Kartenleser nehmen.

Theoremiser
quelle
1

Obwohl Wie kann ich mein Raspberry Pi sichern? Bietet hervorragende Anleitungen zum Klonen einer einzelnen SD-Karte. Wenn Sie diese nacheinander ausführen, werden Dutzende von Karten mühsam.

Angesichts der Tatsache, dass anscheinend niemand einen SD-Kartenleser mit mehreren Karten (der mehrere SD-Karten gleichzeitig aufnehmen kann) hergestellt hat und dass Sie einen USB-Hub und eine Reihe von USB-Kartenlesern mit einer einzelnen SD-Karte sehr billig kaufen können, Eine Möglichkeit, den Vorgang zu beschleunigen, besteht darin, einen eigenen SD-Karten-Duplikator zu erstellen.

Sie können sogar ein Skript schreiben, um das ausgewählte Raspberry Pi-Image automatisch in einen beliebigen freien SD-Kartensteckplatz zu schreiben. Skripte könnten automatisch erkennen, dass eine Karte eingelegt wurde, und anzeigen, wann der Kopiervorgang abgeschlossen ist.

Wie in den Kommentaren erwähnt, sollten Sie die ssh-Zertifikate in jedem der geklonten Images beim ersten Start ersetzen. Stellen Sie daher sicher, dass dieser erste Start ausgeführt wird, während Sie mit einem privaten Netzwerksegment verbunden sind, bevor Sie eine Verbindung herstellen es an ein Internet-Netzwerk angeschlossen.

Mark Booth
quelle
Normalerweise hängt man keine Karte ein, um ein Bild darauf zu flashen.
Alex Chamberlain
Danke @AlexChamberlain, ich habe noch ein paar Wochen Zeit, bevor mein Pi eintreffen soll (Grrr, wenn ich gewusst hätte, dass ich für eine lange Vorlaufzeit auf einer RS-Warteliste stehe, hätte ich gerade bei Farnell mit einer langen Vorlaufzeit bestellt) Vorlaufzeit an erster Stelle), also habe ich das noch nicht wirklich ausprobiert.
Mark Booth
1

Es gibt normalerweise ein besseres Werkzeug, um dies zu tun, als viele RP-Bilder zu kopieren.

Aber es hängt davon ab, was Sie wirklich tun möchten.

Sie sollten sich cfengine3 [1], fai [2], chef [3], fabric [4] oder puppet [5] ansehen. Es handelt sich um automatische Konfigurationstools, die nützlich sind, wenn Sie Ihre Maschine zum ersten Mal (und später) starten.

[1] http://cfengine.com/ [2] http://fai-project.org/ [3] http://www.opscode.com/chef/ [4] http: //www.debian- administration.org/articles/671 [5] http://puppetlabs.com/puppet/puppet-enterprise/

Anders
quelle
1

PiBakery könnte eine praktikable Lösung für Sie sein. Mit PiBakery können Sie mithilfe von Blöcken ein benutzerdefiniertes Raspbian-Image erstellen, um verschiedene Dinge wie WLAN-Kennwörter, SSH-Schlüssel usw. anzupassen.

Ameer
quelle
0

Eine andere Alternative ist die Verwendung von Flash , einem Befehlszeilentool zum Flashen von SD-Karten mit bestimmten Anpassungen des Betriebssystems.

Ameer
quelle
0

Um zu vermeiden, dass nur ein einziger SD-Kartensteckplatz in Ihrem Computer vorhanden ist, ist die einfache Antwort für das effiziente Brennen mehrerer Bilder ein USB-Hub mit eigener Stromversorgung und eine Reihe kostengünstiger microSD-USB-Adapter. Ich habe es mit einem 13-Port-USB-3-Hub und billigen (<1 US-Dollar) microSD-USB-Adaptern getestet.

Wenn Sie viele Basis-Images gleichzeitig brennen möchten , lesen Sie dcfldd . Es ist in den raspbian jessie-Repositories verfügbar. Es ist eine erweiterte Version von GNU dd, mit der Möglichkeit, gleichzeitig auf mehrere Bilder zu schreiben. Ich habe einige gelegentliche Tests durchgeführt und konnte ein microSD-Karten-Image auf einem RPi 3B auf eine Mischung aus 7 Karten kopieren, die in 3 Adapterarten auf einem USB-Hub eingesteckt sind. Vorherige Tests an einem 3-Port-USB 2.0-Hub an einem A + haben ebenfalls funktioniert. Es ist so ziemlich ein Feuer-und-Vergessen, wenn Sie die Parameter richtig eingestellt haben. Ich war auf 7 Adapter beschränkt, aber es gibt keinen Grund zu der Annahme, dass es mit einer größeren Anzahl von Karten nicht funktioniert, obwohl die Geschwindigkeit auf die der langsamsten Zielkarte beschränkt ist.

Wenn Sie eine große Anzahl von RPis mit Konfigurationsänderungen auf dem neuesten Stand halten müssen, sobald sie ausgeführt werden und in Ihrem Netzwerk, würde ich die Verwendung von Ansible oder Fabric in Betracht ziehen , um Updates über ssh zuzulassen und zu vermeiden, dass die RPis erneut gebrannt werden müssen Karten, um sie aktuell zu halten.

Schließlich können Sie Ihren Master ändern, um den Hostnamen auf jedem RPi mit einer eindeutigen Kennung zu ändern (z. B. basierend auf der Netzwerk-MAC-Adresse), um eine einfache Lokalisierung zu ermöglichen, avahiohne dass Sie jedes RPi ändern müssen, um Konflikte zu vermeiden, nachdem es gestartet wurde, um Konflikte zu vermeiden.

Bobstro
quelle