Ich muss eine Festplatte auf eine andere kopieren. Ich habe es mit dem folgenden Befehl versucht und es dauert fast einen Tag, um 1 TB Festplatte zu kopieren.
dd if=/dev/sda of=/dev/sdb
Ich habe das gleiche auf einem Unix-System mit dem folgenden Befehl versucht und es ist innerhalb weniger Stunden abgeschlossen
dd if=/dev/sda of=/dev/rdsk
Was ist die Alternative, die ich verwenden könnte, um schneller von Festplatte zu Festplatte zu kopieren?
cp /dev/sda /dev/sdb
oder (pv /dev/sda > /dev/sdb
um einen Fortschrittsbalken zu erhalten) wäre viel schneller. Warum würden Siedd
hier verwenden?dd
wäre nur nützlichconv=sync,noerror
, wenn es darum geht, fehlerhafte Datenträger zu behandeln, aber selbst dann wäre es sinnvoller,ddrescue
stattdessen Dinge wie zu verwenden (siehe auchpv
die-E
Option).cat
vielleicht noch schneller, aber der Unterschied ist nicht so dramatisch (vielleicht größer für Gerät zu Gerät als Datei zu Datei wie in meinem Experiment).dd
Fallstrick # 1Antworten:
dd
hat viele (komische) Möglichkeiten, siehe dd (1) .Sie sollten die Puffergröße explizit angeben, versuchen Sie es also
IIRC ist die Standardpuffergröße nur 512 Byte. Mit dem obigen Befehl werden 16 Megabyte festgelegt. Sie könnten etwas Kleineres ausprobieren (z. B.
bs=1M
), sollten jedoch mehr als das Standardformat verwenden (insbesondere auf neuerer Festplattenhardware mit Sektoren von 4 KB, dh Advanced Format ). Ich empfehle naiv eine Zweierpotenz, die mindestens ein Megabyte beträgt.Mit dem Standard 512 Byte Puffergröße, ich denke (aber ich konnte sehr falsch sein) , dass die Hardware den Kernel für jeden 512 Bytes Block zu übertragen 4K erfordert.
In Bezug auf
rdsk
die sd (4) -Manpages heißt es:Wenn Sie die Puffergröße von dd erhöhen, erhalten Sie mehr Leistung für Lese- und Schreibvorgänge. Jetzt haben alle Festplatten einen Hardware-Lese- / Schreibpuffer. Wenn Sie jedoch die Puffergröße von dd mehr erhöhen als den Hardware-Puffer, verringert sich die Leistung, da dd von der ersten Festplatte in den Puffer liest, wenn die zweite Festplatte alle Daten aus dem eigenen Hardware-Puffer geschrieben hat. Sie müssen die
bs
Option dd command jedes Mal einstellen, wenn sich der Wert für verschiedene Geräte ändert.quelle
cat
dies genauso gut war (für die Übertragung von Dateisystem zu Dateisystem kann die direkte Block-zu-Block-Übertragung unterschiedliche Leistungsmerkmale aufweisen). Der Unterschied war jedoch in keinem Fall dramatisch./dev/rdiskX
als Ziel für die Ausführung zu verwendendd
.status=progress
dass der gesamte Operationsfortschritt gedruckt wird.Vor Jahren in Unix-Land
dd
war der erforderliche Weg, um ein Block-Gerät zu kopieren. Das hat sich als Cargo-Kult-Wissen weiterentwickelt, obwohl (zumindest auf Linux-basierten Systemen)cat
fast immer schneller ist alsdd
.Selbst in der Vergangenheit hat eine anständige Blockgröße dazu beigetragen, die Anzahl der (langsamen) Systemaufrufe zu verringern, da bei jedem Systemaufruf eine E / A-Operation ausgelöst wurde. Die Standardblockgröße beträgt 512 Byte (ein Plattensektor). Das Sammeln mehrerer Plattenblöcke zu einem einzigen Lesevorgang war - und ist - ebenfalls akzeptabel. In diesem Beispiel wird eine Blockgröße von 32 MB verwendet:
Auf aktuellen Linux-basierten Systemen können Festplatten jedoch am effizientesten mit einem einfachen Kopiervorgang kopiert werden
cat
(Wie in den Kommentaren zu Ihrer Frage angegeben,
pv
kann dies ersetzt werdencat
und gibt Ihnen einen Hinweis auf Fortschritt und Durchsatz.)quelle
Generell
dd
kann zugunsten einiger Alternativen verzichtet werden. Es gibt mehrere gute Gründe, GNUddrescue
stattdessen zu verwenden. In Ubuntu können Sie es installieren mit:und einfach
ddrescue
zu bedienen. Beachten Sie, dass die ausführbare Datei anders als der Paketname nicht die Initiale hatg
.Die Benutzung ist so einfach wie:
In der Protokolldatei (mit einem beliebigen Namen) können Sie anhalten / anhalten und neu starten, ohne die vorherige Arbeit wiederholen zu müssen. Dies ist hilfreich, wenn Sie große Klone ausführen oder Datenträger wiederherstellen möchten. Standardmäßig werden der Fortschritt, die aktuelle Kopiergeschwindigkeit, die durchschnittliche Kopiergeschwindigkeit und die Anzahl der gefundenen fehlerhaften Blöcke angezeigt.
Es werden sinnvolle Standardeinstellungen für die Blockgröße verwendet, so dass die Kopiergeschwindigkeit immer so hoch ist, wie es das Gerät kann, zumindest nach meiner Erfahrung (ich habe viele Hunderte Laufwerke damit geklont, alle Größen und Typen).
Laufwerke, deren Ausfall beginnt, weisen häufig Geschwindigkeitsprobleme auf, z. B. gelegentlich langsame Bewegungen, niedrige Durchschnittsgeschwindigkeit, plötzliche lange Pausen (fehlerhafte Sektoren) oder vollständige Zurücksetzungen (schwerwiegende Oberflächenfehler).
ddrescue
kann Ihnen helfen, alle oben genannten Probleme zu identifizieren und Ihren Klon neu zu starten (vorausgesetzt, Sie haben eine Protokolldatei angegeben), auch wenn sich Ihr Laufwerk selbst zurücksetzt.quelle
Sehr nette Frage. Die Raw-Schnittstelle ist auf einigen Unix-Systemen (tru64, hpux, solaris) implementiert, jedoch nicht unter Linux. Die Raw-Schnittstelle beschleunigt die Übertragung, da Unix-E / A übersprungen wird. Die Blockschnittstelle (
/dev/dsk
oder/dev/disk
) ist langsamer, weil sie das Unix-E / A-System verwendet. Zum Beschleunigendd
( gnu dd kann)bs=30M
oderbs=20M
je nach hw verwenden. Die kurze Antwort lautet: NEIN, sie ist meines Wissens nicht implementiert. Ich benutze Linux seit den alten Zeiten der Kernel-Version 2.2 und habe es noch nierdsk
unter Unix gesehen.quelle