Fortsetzen einer DD einer gesamten Festplatte

10

Ich überschreibe meine Festplatte mit zufälligen Daten unter Verwendung der guten alten dd:

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

Es ist ein 2-TB-Array und mein MacBook (unter Linux, ok?) Kann nur Daten mit etwa 3,7 MB / s schreiben, was ziemlich erbärmlich ist, da ich gesehen habe, wie mein Desktop zu Hause 20 MB / s erreicht. Wenn ich heute Abend nach Hause gehe, möchte ich den ddLauf hier stoppen , mit nach Hause nehmen und sehen, welche Fortschritte mit einer leistungsstärkeren Maschine über Nacht erzielt werden können.

Ich habe den Fortschritt mit 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 ddPass zu Hause wieder aufnehmen würde, wie würde ich ihn neu starten? Ich kenne den seekParameter, aber worauf zeige ich ihn, die Datensatznummer oder die Anzahl der Bytes?

Naftuli Kay
quelle
1
Benutze ich die Datensatznummer? Entspricht das der Anzahl der geschriebenen Blöcke?
Naftuli Kay
2
Die Anzahl der Blöcke = Gesamtbytes / Blockgröße, theoretisch sollte es 238048755782/512 = 464938976 sein, aber Sie haben einige Teildatensätze dort, so dass ich ein paar Blöcke von der Anzahl subtrahieren würde, nur um sicher zu gehen, zBseek=464938960
don_crissti

Antworten:

8

Wie @don_crissti bereits kommentiert hat, verwenden Sie einfach seek=, um fortzufahren .

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

GNU dd Unterstützt auch die Suche in Bytes, sodass Sie unabhängig von der Blockgröße genau 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 bei Geschwindigkeiten auch für langsame Geräte wie helfen /dev/urandom.

Wenn Sie nach schnelleren Alternativen suchen, können Sie cryptsetup plainOpenmit einem zufälligen Schlüssel und einer Null, die /dev/urandomum eine Größenordnung (ohne AES-NI) schlagen oder sogar mit voller Geschwindigkeit (mit AES-NI) laufen sollte.

Sie können auch verwenden, shred -n 1wenn Pseudozufallsdaten für Ihren Anwendungsfall ausreichend sind. shredsollte in der Lage sein, die volle Festplattengeschwindigkeit auch auf einem sehr langsamen Computer zu nutzen.

Frostschutz
quelle
Ich wusste es plainOpenbis jetzt nicht. Groß! Ich habe mein Scrambling eines 2-TB-Laufwerks in ungefähr 4 Stunden beendet, im Gegensatz zu 256 GB in über 12 Stunden /dev/urandom.
Naftuli Kay
3

Nur eine Erinnerung für Leute, die lieber kopieren als nur Datenträger zufällig auswählen möchten (was nicht so häufig vorkommt): Sie können skip=BLOCKSdamit beginnen , an der richtigen Position zu lesen und an der richtigen Position seek=BLOCKSzu schreiben . Beide Optionen verwenden Blöcke, keine Bytes. Beim Unterbrechen / Neustarten ist es ratsam, für alle Fälle eine Reihe von Blöcken zu entfernen. In der Regel lohnt es sich, den bsWert über 512 zu erhöhen , da Sie eine bessere Leistung erzielen können, wenn Sie viele Daten hintereinander lesen.

In Ihrem Fall handelt es sich tatsächlich um einen Blockwert, an den Sie übergeben müssen seek. Vielleicht sollten Sie versuchen, sich anzupassen, um bszu sehen, ob Sie die Geschwindigkeit verbessern können, da dies /dev/randomschnell gehen sollte (pseudozufällig und nicht blockierend, wenn keine Entropie verfügbar ist).

Uriel
quelle
0

ddBei einer winzigen Blockgröße von 512 Byte ist dies wahrscheinlich viel langsamer als der maximale Durchsatz Ihrer Festplatte. Verwenden Sie eine höhere Blockgröße (ich würde sagen, ein paar MB) für eine gute Leistung. Oder verwenden cat- unter Linux war ich catgenauso schnell wie ddmit der optimalen Blockgröße, wenn eine einzelne Festplatte beteiligt war (ich weiß nicht, ob dies auch für OSX gilt).

Um herauszufinden, wie weit es gekommen catist, führen Sie aus, lsof -p1234wobei 1234 die Prozess-ID des catProzesses ist.

Verwenden Sie, um von einer Position fortzufahren

{ dd bs=1 seek=123456; cat /dev/urandom; } >/dev/disk/…

Dabei ist 123456 der Offset in Bytes.

Gilles 'SO - hör auf böse zu sein'
quelle
0

Klonen einer Festplatte:

Wenn Sie diese Antwort aus diesem Thread erweitern, können Sie auf folgende Weise eine ganze Festplatte klonen und fortfahren:

Dieses Beispiel ist für das Kopieren von einem Drehantrieb mit 5400 U / min auf eine SSD auf einem bestimmten System optimiert. gddrepräsentiert 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 wieder aufnehmen:

> 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

Im ersten Beispiel verwenden wir 59011und nicht 59012, weil 59011so viele blockgroße Datensätze vollständig kopiert wurden, bevor sie unterbrochen wurden. (Aufzeichnungen aus).

hmedia1
quelle