Verwenden von DD zum Kopieren nur der Hälfte (eines Teils) eines Wechseldatenträgers

Verwenden von DD zum Kopieren nur der Hälfte (eines Teils) eines Wechseldatenträgers

Ich hatte ein32 GB SD-Kartemit dieser Struktur (oder sehr ähnlich):

luis@Fresoncio:~$ sudo fdisk -l
Disk /dev/mmcblk0: 29.2 GiB, 31393316864 bytes, 61315072 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xec4e4f57

Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1             1   125000   125000   61M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        125001 33292287 33167287 15.8G 83 Linux
/dev/mmcblk0p3      33292288 61315071 28022784 13.4G 83 Linux

Und ichübertragen(von einem anderen Computer, also die Geräte wo sdaund sdb) es zu einem (ich wähle das falsche)64 GB SD-Karteüber dd( dcfldd, tatsächlich):

# dcfldd if=/dev/sda of=/dev/sdb bs=1M

Meine neue 64 GB SD-Karte ist jetzt:

luis@Fresoncio:~$ sudo fdisk -l
Disk /dev/mmcblk0: 59.5 GiB, 63864569856 bytes, 124735488 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xec4e4f57

Device         Boot    Start      End  Sectors  Size Id Type
/dev/mmcblk0p1             1   125000   125000   61M  c W95 FAT32 (LBA)
/dev/mmcblk0p2        125001 33292287 33167287 15.8G 83 Linux
/dev/mmcblk0p3      33292288 61315071 28022784 13.4G 83 Linux

Nun, im Moment kein Problem, aber jetzt habe ich die 32 GB SD-Karte nicht mehr, nur die 64 GB SD-Karte ist noch übrig, und ich möchte sie wieder auf eine leere 32 GB SD-Karte übertragen.
In diesem Fall gehe ich davon aus, dass ich nicht verwenden kann ddoderdcfldd

Was kann ich tun? Kann ich ddoder verwenden dcfldd? Was kann passieren, wenn die Überweisung beim32 GB Grenzeauf der Ziel-SD-Karte (Probleme mit der Datenintegrität)?

Weitere Hinweise:

  • Beliebigandere Methodedie SD-Karten zu klonen wäre OK, aber ich habe ein Problem: in diesem Fall handelt es sich um ein SD-Karten-Boot-Laufwerk für eineHimbeer-Pi 2, und das Klonen über partimageoder gpartedhat nicht funktioniert (der Raspberry bootet nicht). Nur dddas Klonen scheint ohne Fehler zu funktionieren.

  • ÄhnlichFrage, aber ich denke, nicht dasselbe.

  • Das dcflddTool hat die gleiche Syntax und das gleiche Verhalten wie dd. Es gibt nur mehr Informationen (Fortschritt usw.). Hier ist diemanpage.

Antwort1

Angenommen, sda ist Ihre 64 GB große Quell-SD-Karte und sdb ist Ihre 32 GB große Ziel-SD-Karte. Sie können dd so einschränken, dass nur die Anzahl der erforderlichen Sektoren kopiert wird, und zwar mit:

dd if=/dev/sda of=/dev/sdb bs=512 count=61315072

Antwort2

Ich habe das schon oft mit Festplatten gemacht: Man ddsteckt einfach die große auf die kleine. Bei 32 GB bricht es dann ab, aber das ist ok.

Wenn Sie immer noch Zweifel haben, schlage ich vor, dass Sie es auf dem alten USB-Stick/der alten Festplatte versuchen, die Sie noch herumliegen haben.

Antwort3

Sie können zum Erstellen der Kopie jedes beliebige Werkzeug verwenden, beispielsweise cat(ddhat gegenüber keine Vorteile cat, nur Nachteile). Es wird gestoppt, wenn es das Ende der Zielfestplatte erreicht. Der Nachteil dieses einfachen Ansatzes besteht darin, dass es schwer zu sagen ist, ob die Kopie des Teils, an dem Sie interessiert sind, erfolgreich war.

Um sicherzustellen, dass der Kopierbefehl einen Erfolgsstatus zurückgibt, wenn er erfolgreich das kopiert hat, was Sie kopieren wollten, und andernfalls einen Fehler ausgibt, verwenden Sie einen Befehl, der die richtige Datenmenge kopiert. Um die ersten N Bytes einer Datei zu kopieren, verwenden Sie head -c. Die Anzahl der zu kopierenden Bytes ist die Anzahl der Sektoren multipliziert mit der Sektorgröße (512 Bytes in Ihrer fdiskAuflistung). Vergessen Sie nicht, dass Sektoren bei 0 beginnen (Sektor 0 enthält die Partitionstabelle), also ist die Gesamtzahl der zu kopierenden Sektoren der größte „End“-Wert plus eins.

head -c $((61315071*512+512)) /dev/sdSOURCE >/dev/sdDESTINTATION

Ersetzen Sie sdSOURCEund sdDESTINATIONdurch die entsprechenden Gerätenamen. Führen Sie fdisk -l /dev/sdDESTINATIONund grep sdDESTINATION /proc/partitionsund file -s /dev/sdDESTINATIONund alle anderen Befehle aus, die Sie für nützlich erachten, um sicherzustellen, dass das Gerät, das Sie überschreiben, tatsächlich das Gerät ist, das Sie überschreiben wollten.

verwandte Informationen