Was ist der Unterschied zwischen diesen beiden Befehlen?

23

Was ist der Unterschied zwischen zwei ddBefehlen mit unterschiedlichen bsund countWerten, solange sie sich mit denselben multiplizieren? Beispielsweise:

  1. dd if=/dev/random of=aa bs=1G count=2
  2. dd if=/dev/random of=aa bs=2G count=1
Felsig
quelle
4
Beide Befehle werden ewig dauern. Verwenden Sie urandom, wenn Sie Zufallszahlen benötigen. Verwenden Sie Null, wenn Sie nur eine schnelle Eingabe benötigen.
Nils
4
Verwenden Sie /dev/urandomnicht /dev/random. Siehe security.stackexchange.com/questions/3936/... , security.stackexchange.com/questions/3259/... , ...
Gilles 'SO- Anschlag, die bösen'

Antworten:

26

Was das Endergebnis betrifft, werden sie dasselbe tun. Der Unterschied besteht darin, wie ddDaten verarbeitet werden. Und tatsächlich sind Ihre beiden Beispiele in dieser Hinsicht ziemlich extrem: Der bsParameter gibt an, ddwie viele Daten in den Speicher gepuffert werden sollen, bevor sie ausgegeben werden.

Im Wesentlichen würde der erste Befehl versuchen , 2 GB in zwei Blöcken von 1 GB zu lesen, und der letztere würde versuchen , ganze 2 GB auf einmal zu lesen und sie dann in die aaDatei auszugeben .

rozcietrzewiacz
quelle
17

Das Ergebnis ist das gleiche, aber im ersten Fall ddwerden zwei 1-GB-Blöcke geschrieben, während im zweiten 2-GB-Block geschrieben wird. Der Unterschied besteht darin, dass ddder kopierte Block im Speicher bleibt. Sie benötigen 1 GB RAM im ersten Fall und 2 GB im zweiten.

Meiner Meinung nach besteht keine Notwendigkeit, so große Blöcke zu verwenden. Sie können einige Tests durchführen, aber in meinem Fall erziele ich eine höhere Geschwindigkeit mit viel kleineren Blöcken (<1 MB).

Matteo
quelle
9

Der erste belegt 1 GB Speicher, füllt ihn mit Daten aus der Eingabedatei und gibt ihn zweimal aus.

Der zweite nimmt 2 GB Speicher ein, füllt ihn mit Daten aus der Eingabedatei und gibt sie aus.

Golimar
quelle
2

Die verwendete Blockgröße sollte mit den besten Geschwindigkeitseinstellungen für Quell- und Zielgerät übereinstimmen.

Sie können den Unterschied am besten erkennen, wenn Sie versuchen, ein LV-Gerät zu kopieren. Die Verwendung einer sehr kleinen BS-Größe unterbricht den Lesevorgang unnötig. Die Verwendung einer sehr großen BS-Größe führt zu langen Wartezeiten beim Schreiben.

Da Standard-LVs normalerweise aus 4-MB-Chunks bestehen, die auch eine gute Größe für den physischen Festplattenzugriff haben, verwende ich für diese bs = 4M.

Versuchen Sie, mit 16K oder 256M zu experimentieren - Sie werden den Unterschied bemerken - und beobachten Sie die Festplattenanzeige beim Kopieren ...

Nils
quelle
Die Strafen für kleine oder große Blöcke werden durch das Caching des Kernels etwas ausgeglichen. Sehen Sie hier für ein Mini-Benchmark.
Gilles 'SO- hör auf böse zu sein'
@ Gilles Ich erinnere mich nicht an die Zahlen in meinen Tests, aber sie waren weitaus dramatischer als deine. Welches physikalische Festplatten-Setup haben Sie in Ihrem Test verwendet? Meins befand sich auf einem Hardware-RAID 5, das über 5 Festplatten (SAS 15k) mit 128 KB verteilt war. Streifengröße.
Nils
SATA-Festplatten, kein RAID, sonst inaktive Maschine. Ich erinnere mich nicht an die genauen Spezifikationen.
Gilles 'SO - hör auf böse zu sein'