Fortsetzen eines DD einer gesamten Festplatte

Fortsetzen eines DD einer gesamten Festplatte

Ich überschreibe meine Festplatte mit zufälligen Daten und verwende dazu die gute alte Methode dd:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512

Es ist ein 2TB-Array und mein MacBook (mit Linux, ok?) kann Daten nur mit etwa 3,7 MB/s schreiben, was ziemlich erbärmlich ist, da mein Desktop zu Hause 20 MB/s schafft. Wenn ich heute Abend nach Hause gehe, würde ich den ddLauf hier gerne beenden, ihn mit nach Hause nehmen und sehen, welche Fortschritte man über Nacht mit einem leistungsstärkeren Rechner machen kann.

Ich habe den Fortschritt mithilfe einer einfachen Schleife überwacht:

while true; do kill -USR1 $PID ; sleep 10 ; done

Die Ausgabe sieht folgendermaßen aus:

464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s

Wenn ich den Pass zu Hause fortsetzen würde dd, wie würde ich ihn neu starten? Ich kenne den seekParameter, aber worauf zeige ich ihn, auf die Datensatznummer oder die Byteanzahl?

Antwort1

Wie @don_crissti bereits kommentiert hat, verwenden Sie einfach seek=zum Fortsetzen.

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971

GNU ddunterstützt auch die Suche in Bytes, sodass Sie unabhängig von der Blockgröße exakt fortfahren können:

dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \
   seek=238048755782 oflag=seek_bytes

Eine größere Blockgröße sollte selbst bei einem langsamen Gerät wie die Geschwindigkeit verbessern /dev/urandom.

Wenn Sie nach schnelleren Alternativen suchen, könnten Sie cryptsetup plainOpeneinen zufälligen Schlüssel verwenden und diesen auf Null setzen. Er sollte /dev/urandomum eine Größenordnung schneller sein (ohne AES-NI) oder sogar mit voller Geschwindigkeit laufen (mit AES-NI).

Sie können es auch verwenden shred -n 1, wenn pseudozufällige Daten für Ihren Anwendungsfall gut genug sind. shredDie volle Festplattengeschwindigkeit sollte auch auf einem sehr langsamen Computer genutzt werden können.

Antwort2

Nur eine Erinnerung für Leute, die lieber kopieren als nur die Datenträger zufällig zu sortieren möchten (was nichtDascommon): Sie können verwenden, skip=BLOCKSum zu startenLektürean der richtigen Stelle und seek=BLOCKSum zu beginnenSchreibenan der richtigen Stelle. Beide Optionen verwenden Blöcke, keine Bytes. Beim Abbrechen/Neustarten ist es ratsam, vorsichtshalber ein paar Blöcke zu entfernen. Normalerweise lohnt es sich, den bsWert über 512 zu erhöhen, da Sie eine bessere Leistung erzielen, wenn Sie viele Daten hintereinander lesen.

In Ihrem Fall ist es tatsächlich ein Blockwert, den Sie übergeben müssen seek. Vielleicht sollten Sie versuchen, ihn anzupassen, bsum zu sehen, ob Sie die Geschwindigkeit verbessern können, da /dev/randomer schnell sein sollte (pseudozufällig und nicht blockierend, wenn keine Entropie verfügbar ist).

Antwort3

Eine Festplatte klonen:

Erweiterung aufDasAntwort aus diesem Thread. So können Sie eine ganze Festplatte klonen und fortfahren:

Dieses Beispiel ist für das Kopieren von einem rotierenden Laufwerk mit 5.400 U/min auf eine SSD auf einem bestimmten System optimiert. gddstellt dar GNU dd:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s

Ich kann dies auf zwei Arten fortsetzen:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress

Oder:

> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress

Der Grund, warum wir im ersten Beispiel 59011und nicht verwenden 59012, besteht darin 59011, dass so viele Datensätze in Blockgröße vollständig kopiert wurden, bevor sie unterbrochen wurden. (Datensätze heraus).

Antwort4

Wenn möglich, verwenden Sie

#ddrescue from to logfile
ddrescue /dev/sda /dev/sdb logfile

Halten Sie die Protokolldatei entweder vom Absender oder vom Empfänger fern. Wenn Sie Strg+C oder etwas anderes drücken müssen, liest ddrescue seine eigene Protokolldatei und setzt automatisch fort. Außerdem kopiert es zuerst alles ganz einfach, und da es aus der Protokolldatei fortfahren kann, können Sie ihm sagen, dass es für die anderen „zurückgehen und es noch einmal versuchen“ soll.

verwandte Informationen