Wann ist dd zum Kopieren von Daten geeignet? (oder, wenn read () und write () partiell sind) weist auf eine wichtige Einschränkung bei der Verwendung hin count
: dd
Kann partielle Blöcke kopieren, so dass count
sie nach der angegebenen Anzahl von Blöcken anhalten, selbst wenn einige der Blöcke unvollständig waren. Es kann daher vorkommen, dass weniger als bs * count
Bytes kopiert werden, es sei denn, Sie geben dies an iflag=fullblock
.
Die Standardblockgröße für dd beträgt 512 Byte. count
ist eine Grenze; Wie Ihre Frage andeutet, ist es nicht erforderlich, wenn Sie ein Gerät mit endlicher Größe kopieren, sondern nur zum Kopieren eines Teils eines Geräts.
Ich denke, hier sind zwei Aspekte zu berücksichtigen: Leistung und Datenwiederherstellung.
Was die Leistung anbelangt, möchten Sie im Idealfall, dass die Blockgröße mindestens der zugrunde liegenden physischen Blockgröße entspricht und ein Vielfaches davon beträgt (daher 2048 Byte beim Lesen einer CD-ROM). Tatsächlich können Sie heutzutage auch größere Blöcke angeben, um den zugrunde liegenden Cachesystemen die Möglichkeit zu geben, Dinge für Sie zu puffern. Das Erhöhen der Blockgröße bedeutet dd
jedoch, dass so viel mehr Speicher benötigt wird, und es kann kontraproduktiv sein, wenn Sie aufgrund einer Paketfragmentierung über ein Netzwerk kopieren.
Bei der Datenwiederherstellung können Sie möglicherweise mehr Daten von einer fehlerhaften Festplatte abrufen, wenn Sie kleinere Blockgrößen verwenden. Programme wie dd-rescue
tun dies automatisch: Sie lesen zunächst große Blöcke, aber wenn ein Block ausfällt, lesen sie ihn mit kleineren Blockgrößen erneut. dd
wird dies nicht tun, es wird nur den ganzen Block versagen.
dd bs=4m iflag=fullblock
vs auf eine SD-Karte,dd bs=1111
und achten Sie auf die wesentlich höheren Datenraten, die Sie durch die erstere erhalten. Dies liegt daran, dass ersteres mit den natürlichen Blockgrößen auf der SD-Karte übereinstimmt, während letzteres erfordert, dass der SD-Controller viel liest, kopiert und neu blitzt, um teilweise physikalische Blöcke zu schreiben. Die Bedeutung vonfullblock
ist übrigens nicht zu unterschätzen, da es sich ohne esbs
nur um ein Maximum handelt und partielle Lesevorgänge zu anhaltenden nachträglichen Fehlausrichtungen führen könnten.