Warum wird GNU schneller als dd geschreddert, wenn ein Laufwerk mit zufälligen Daten gefüllt wird?

8

Während ich eine Festplatte vor der Außerbetriebnahme sicher löschte, bemerkte ich, dass dies dd if=/dev/urandom of=/dev/sdafast einen ganzen Tag shred -vf -n 1 /dev/sdadauert , während es mit demselben Computer und derselben Festplatte nur ein paar Stunden dauert.

Wie ist das möglich? Ich denke, dass der Engpass die begrenzte Leistung von ist /dev/urandom. Verwendet Shred einen Pseudozufallsgenerator, der weniger zufällig ist und nur für seinen einzigen Zweck ausreicht (dh effizienter ist) als urandom?


quelle
Beachten Sie, dass der beste Befehl zum Löschen von Laufwerken, insbesondere von SSD-Laufwerken, der Befehl zum sicheren Löschen von SATA ist. Jede andere Option - mit Ausnahme der Zerstörung - schlägt fehl. Es ist auch viel schneller und kann auf einer SSD nur Sekunden dauern.
Maarten Bodewes

Antworten:

11

Shred verwendet einen internen Pseudozufallsgenerator

Standardmäßig verwenden diese Befehle einen internen Pseudozufallsgenerator, der durch eine geringe Entropie initialisiert wurde, können jedoch angewiesen werden, eine externe Quelle mit der Option --random-source = file zu verwenden. Ein Fehler wird gemeldet, wenn die Datei nicht genügend Bytes enthält.

Beispielsweise könnte die Gerätedatei / dev / urandom als Quelle für zufällige Daten verwendet werden. In der Regel sammelt dieses Gerät Umgebungsgeräusche von Gerätetreibern und anderen Quellen in einem Entropiepool und generiert aus dem Pool zufällige Bits. Wenn der Pool nicht genügend Daten enthält, verwendet das Gerät den internen Pool erneut, um mithilfe eines kryptografisch sicheren Pseudozufallszahlengenerators mehr Bits zu erzeugen. Beachten Sie jedoch, dass dieses Gerät nicht für die Erzeugung zufälliger Massendaten ausgelegt ist und relativ langsam ist .

Ich bin nicht davon überzeugt, dass zufällige Daten effektiver sind als ein einzelner Durchgang von Nullen (oder ein anderer Bytewert), um frühere Inhalte zu verschleiern.

Um einen Antrieb sicher außer Betrieb zu setzen, benutze ich einen großen Magneten und einen großen Hammer.

RedGrittyBrick
quelle
2

Ich denke, es würde eher durch die ddVerwendung kleinerer Blöcke zum Schreiben der Daten verursacht. Versuchen Sie dd if=... of=... bs=(1<<20)zu sehen, ob es besser funktioniert.

jpalecek
quelle
Ich werde das bei der nächsten Gelegenheit versuchen und die Ergebnisse veröffentlichen.
+1 Die Standardblockgröße ddist 512. Sie wurde auf meinem Computer weit unterhalb der Festplattengrenzen ausgeführt.
Piotr Findeisen
/ dev / urandom ist wahrscheinlich sehr schnell - die dd-Blockgröße ist fast sicher das Problem.
Dan Pritts
2
Sobald Sie die Blockgröße erhöhen, scheint es, dass /dev/urandomdies zu einem Engpass werden kann - ich teste einige SSD-Laufwerke über USB 3.0 und mit dem gleichen ddBefehl erhalte ich 326 MB / s für, if=/dev/zeroaber nur 12,8 MB / s fürif=/dev/urandom
Austinmarton