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

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

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 .


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).


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.


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 ...


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'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.