In den kommenden Monaten muss ich viele Festplatten auf Null setzen. Nachdem ich jedes Laufwerk gelöscht habe, muss ich schnell sicherstellen, dass das Laufwerk vollständig mit Nullen gefüllt ist.
Ich könnte jedes einzelne in einem Hex-Editor öffnen, aber dadurch kann ich nur sehen, dass bestimmte Teile davon auf Null gesetzt wurden, was umso sinnloser wird, je größer ein Laufwerk wird, da dadurch nicht sicher überprüft wird, dass darauf keine Zeichen ungleich Null vorhanden sind.
Ich beschloss, einige Benchmarks auszuführen, um einige Tools zu testen, die ich gefunden hatte. Ich habe jedes Tool in einer Reihe von 3 separaten Durchläufen zeitlich festgelegt und dabei das Löschen derselben 1-TB-Festplatte überprüft, wobei jeder Lauf über Nacht bei derselben Systemlast ausgeführt wurde. Um das Caching zu berücksichtigen, wurden die Tools bei jedem Lauf an zufälligen Positionen ausgeführt, mit einer Pause von mindestens 500 Sekunden zwischen den einzelnen Läufen.
Unten sehen Sie den Durchschnittswert der einzelnen Tools in den drei Tests, sortiert vom langsamsten bis zum schnellsten.
Von mir selbst:
time hexdump /dev/sda
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
e8e0db6000
real 284m35.474s
user 223m4.261s
sys 2m49.729s
AusGordon Davisson:
time od /dev/sda
0000000 000000 000000 000000 000000 000000 000000 000000 000000
*
16434066660000
real 148m34.707s
user 77m10.749s
sys 2m54.611s
AusNeal:
time cmp /dev/zero /dev/sda
cmp: EOF on /dev/sda
real 137m55.505s
user 8m9.031s
sys 3m53.127s
AusBärtig:
time badblocks -sv -t 0x00 /dev/sda
Checking blocks 0 to 976762583
Checking for bad blocks in read-only mode
Testing with pattern 0x00: done
Pass completed, 0 bad blocks found. (0/0/0 errors)
real 137m50.213s
user 5m19.287s
sys 4m49.803s
AusHennes:
time dd if=/dev/sda status=progress bs=4M | tr --squeeze-repeats "\000" "D"
1000156954624 bytes (1.0 TB, 931 GiB) copied, 8269.01 s, 121 MB/s
238467+1 records in
238467+1 records out
1000204886016 bytes (1.0 TB, 932 GiB) copied, 8269.65 s, 121 MB/s
D
real 137m49.868s
user 27m5.841s
sys 28m3.609s
AusBob1 :
time iszero < /dev/sda
1000204886016 bytes processed
0 nonzero characters encountered.
real 137m49.400s
user 15m9.189s
sys 3m28.042s
Sogar das schnellste der getesteten Tools scheint nach 137 Minuten, also 2 Stunden und 16 Minuten, seine Kapazitätsgrenze zu erreichen, während das vollständige Löschen der Festplatte im Durchschnitt nur 2 Stunden und 30 Minuten dauert.
Dies hat mich dazu veranlasst, diese Frage zu stellen - es scheint, als ob es möglich sein sollte, ein solches Werkzeugmindestens die Hälftedie zum Löschen eines Laufwerks erforderliche Geschwindigkeit, vorausgesetzt, dass von der Festplatte nur gelesen und nicht darauf geschrieben werden muss.
Gibt es eine alternative, schnellere Lösung für das oben genannte?
In einer idealen Welt würde die Lösung, nach der ich suche, die gesamte Festplatte lesen und alle gefundenen Zeichen ungleich Null drucken, genau wie Bobs C++-Programm. Dadurch könnte ich zurückgehen und selektiv alle Bytes ungleich Null löschen, anstatt die gesamte Festplatte. Dies wäre jedoch keine zwingende Anforderung, wenn das Tool die Festplatte sehr schnell lesen könnte.
1. Dies ist ein von Bob geschriebenes C++-Programm, bei dem die Puffergröße auf 4194304 (4 MiB) erhöht und das mit folgendem kompiliert wurde:
g++ -Wl,--stack,16777216 -O3 -march=native -o iszero iszero.cpp
Antwort1
Die Lese- und Schreibgeschwindigkeiten magnetischer Festplatten sind ungefähr gleich. Dasselbe gilt für Bandlaufwerke, RAM, CD-/DVD-/BD-R und sogar Disketten. Bei rotierenden Medien hängt die Geschwindigkeit hauptsächlich davon ab, wie schnell sich die Daten unter den Köpfen (oder Laserbaugruppen bei optischen Laufwerken) bewegen. Wenn Lesen und Schreiben nicht mit der gleichen Geschwindigkeit erfolgen würden, müssten Sie das Medium schneller (oder langsamer) drehen, um von Lesen auf Schreiben und umgekehrt umzuschalten.
Deutlich schnelleres Lesen als Schreiben ist eine Sache des Flash-Speichers.