wie mache ich das: dd if=coolstuff.iso of=(ssh kev@mypi )

wie mache ich das: dd if=coolstuff.iso of=(ssh kev@mypi )

der Kartenleser meines Laptops funktioniert nicht. Kann ich dd (oder ein anderes Tool) verwenden, um ein Image auf eine Netzwerkfestplatte zu schreiben?

Ich versuche, eine Raspberry-Pi-Distribution durch eine andere zu ersetzen. Die SD-Karte hat 6 GB frei und nutzt nur 2 GB.

von der SD-Karte

$ sudo parted -l
Model: SD SU08G (sd/mmc)
Disk /dev/mmcblk0: 7948MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 

Number  Start   End     Size    Type      File system  Flags
 1      1049kB  95.4MB  94.4MB  primary   fat16        lba
 2      95.4MB  1878MB  1783MB  extended
 5      96.5MB  1878MB  1782MB  logical   ext4
 3      1878MB  7948MB  6070MB  primary   ext4

UndBitte, bevor Sie kritisieren, warum ich das tun möchte, beantworten Sie die Frage … und sagen Sie mir dann, wie dumm ich bin.

Antwort1

Sie können über SSH weiterleiten:

dd if=something | ssh host dd of=something

Sie sollten jedoch einen besseren Grund für die Verwendung haben ddals einen einfachen Dateikopiervorgang, bei dem Sie mit scp, rsync, und dergleichen besser dran sind.

Antwort2

Angenommen, Sie haben einen SSH-Server auf Ihrem Raspberry und die SD-Karte auf dem Raspberry wird unter angezeigt /dev/sda, würden Sie etwa Folgendes tun:

dd if=SDcardimage.img | ssh -o MACs=hmac-ripemd160 -l raspberry-pi-user <your Raspberry's IP address> 'dd of=/dev/sda'

Ich erkläre:

  1. ddgibt an die Standardausgabe aus, wenn keine ofAusgabedatei angegeben ist, und liest von der Standardeingabe, wenn keine Eingabedatei angegeben ist if.
  2. Wenn Sie einen Befehl direkt an SSH übergeben, leitet Ihr Client seine Standardeingabe an den Server weiter und der Server übergibt diese Daten dann an die Standardeingabe des Prozesses, der im an den Server gesendeten Befehl angegeben ist.
  3. Da die Standardeingabe des SSH-Clients in diesem Fall von kommt ddund die Standardeingabe des Remote-Prozesses ddvom SSH-Server, führt dies dazu, dass das SSH-Client-Server-Paar als verschlüsselter Datentransport fungiert und die Standardausgabe Ihres lokalen Computers ddmit der Standardeingabe Ihres Remote-Prozesses verbindet dd. (Dies ist tatsächlich die Art und Weise, wie SSH die Remote-Anmeldung durchführt, wobei die Standardeingabe von Ihrer Tastatur kommt und der Remote-Prozess, der die Standardeingabe empfängt, eine UNIX-Shell ist.)
  4. Die MACsOption, die ich an SSH weitergebe, zwingt die Verbindung, den Algorithmus RIPEMD160 als Message Integrity Digest zu verwenden. Dadurch werden die übertragenen Daten geschützt, sodass Übertragungsfehler oder vorsätzliche Manipulationen erkannt werden. Dies ist hier wichtig, wenn man bedenkt, dass Sie ein Disk-Image über Funkwellen übertragen. Sie möchten möglicherweise eine Verschlüsselung hinzufügen o Ciphers=aes256-cbcoder o Ciphers=aes256-ctrerzwingen, falls der Raspberry standardmäßig eine schwächere Verschlüsselung verwendet.
  5. -lgibt den Benutzer an, den Sie zum Anmelden verwenden, einfach weil ich dazu neige, diese Syntax zu verwenden.

Antwort3

Das Aktualisieren des laufenden Systems, sodass das neue Root-Image beim nächsten Neustart verwendet wird, ist etwas komplizierter als einfach eine Kopie über das Netzwerk zu erstellen. Vorausgesetzt, dass das Root-Image aktiviert ist /dev/mmcblk0p5(wie durch die Ausgabe von parted -lund die Kommentare oben angezeigt), sollte der OP die Root-Partition problemlos vom Image nach kopieren können /dev/mmcblk0p3(vorausgesetzt natürlich, dass Sie keine Daten haben, die Sie auf dieser Partition behalten möchten). Sie können den Anweisungen unten folgen.Stellen Sie jedoch sicher, dass Sie die vorgeschlagenen Prüfungen durchführen und die Befehle entsprechend ändern. Das blinde Kopieren der folgenden Befehle ist eine gute Möglichkeit, Ihr System zu zerstören.

  1. Ich gehe davon aus, dass die Root-Partition auf dem neuen Image Partition 5 ist, aber das muss nicht unbedingt so sein. Sie können die Partitionstabelle eines pi.imgmit aufgerufenen Images ausdrucken parted pi.image print. Wenn Sie sich nicht sicher sind, fügen Sie die Ausgabe bitte Ihrer Frage hinzu.

  2. Da wir nur das Image für die Root-Partition und nicht das gesamte Disk-Image (das auch seine eigene Partitionstabelle und Boot-Partition enthält) kopieren möchten, müssen Sie dies vom Rest des Images trennen. Eine Möglichkeit, dies (auf einem Linux-System) zu tun, ist die Verwendung von kpartx:

    sudo kpartx -av pi.img
    

    Wenn keine anderen Loop-Geräte verwendet werden, wird verwendet loop0. Überprüfen Sie jedoch die Ausgabe und ändern Sie weitere Befehle entsprechend.

  3. Stellen Sie sicher, dass die Zielpartition nicht auf dem Raspberry Pi gemountet ist, indem Sie Folgendes tun:

    sudo umount /dev/mmcblk0p3
    
  4. Für den nächsten Schritt müssen Sie in der Lage sein, Daten über SSH zu leitenUndRoot-Zugriff haben. Es gibt mehrere Möglichkeiten, dies zu tun, aber ich denke, die einfachste ist, einfach den Root-Login zu aktivieren. Normalerweise wird dies nicht empfohlen, aber da Sie ein neues Systemabbild hochladen möchten, denke ich nicht, dass dies ein Problem sein wird. Gehen Sie auf dem Raspberry Pi folgendermaßen vor:

    sudo passwd root
    
  5. Kopieren Sie anschließend das Image auf den Raspberry Pi (mitRAAKs Vorschlag zur Datenintegrität):

    sudo dd if=/dev/mapper/loop0p5 |
      ssh -o MACs=hmac-ripemd160 root@host dd of=/dev/mmcblk0p3
    

    host/etc/hostnamekann alles sein, was sich auf dem Raspberry Pi befindet (anscheinend mypifür den OP) oder die IP-Adresse des Raspberry Pi. Denken Sie auch daran, dies entsprechend zu ändern, wenn Sie nicht verwenden loop0.

  6. Als nächstes ändern Sie die Root-Partition für den Raspberry Pi. Soweit ich sehe (ich habe keinen Raspberry Pi zum Testen), müssen Sie ändern /boot/cmdline.txt. Sie würden den Teil ändern, der besagt : root=/dev/mmcblk0p5zu root=/dev/mmcblk0p3.

  7. Sie können die loopund mapper-Geräte auf dem System, von dem Sie kopiert haben, wie folgt löschen:

    sudo kpartx -d pi.img
    
  8. Starten Sie jetzt den Raspberry Pi neu und Sie sollten das neue Image verwenden!

Antwort4

Was wäre, wenn Sie Pi mit einem USB-ARM-Image booten, eine Verbindung zum Netz herstellen und der Speicher auf diese Weise ausreichend gezähmt wird? Ich bin kein Profi, ich gebe hier nur meine Meinung ab. Experten korrigieren mich bitte, wenn ich falsch liege.

verwandte Informationen