ddはデータのコピーに適していますか?(またはwhen are read()およびwrite()partial)は、count
:dd
を使用するときに重要な注意事項を指摘します。したがって、部分ブロックをコピーできるためcount
、ブロックの一部が不完全であっても、指定された数のブロックの後に停止します。したがってbs * count
、を指定しない限り、コピーされるバイト数が少なくなる可能性がありますiflag=fullblock
。
ddのデフォルトのブロックサイズは512バイトです。count
制限です。あなたの質問が示唆するように、有限サイズのデバイスをコピーする場合、それは必須ではなく、実際にはデバイスの一部のみをコピーすることを意図しています。
ここで考慮すべき2つの側面があると思います:パフォーマンスとデータ回復。
パフォーマンスに関する限り、理想的には、ブロックサイズを、基礎となる物理ブロックサイズ(CD-ROMを読み取る場合は2048バイト)と少なくとも等しいか、その倍数にする必要があります。実際、最近では、より大きなブロックサイズを指定して、基礎となるキャッシングシステムにバッファリングする機会を与えることができます。ただし、ブロックサイズdd
を大きくすると、それだけ多くのメモリを使用する必要があり、パケットの断片化のためにネットワーク経由でコピーする場合は逆効果になる可能性があります。
データリカバリに関する限り、より小さいブロックサイズを使用すると、故障したハードディスクからより多くのデータを取得できます。これは、プログラムなどdd-rescue
が自動的に行うことです。最初は大きなブロックを読み取りますが、ブロックが失敗すると、より小さいブロックサイズで再読み取りします。dd
これを行わず、ブロック全体が失敗するだけです。
dd bs=4m iflag=fullblock
vsdd bs=1111
を使用してSDカードにパーティションイメージを書き込み、前者が提供する大幅に高いデータレートに注意してください。これは、前者がSDカードの自然なブロックサイズと一致するのに対し、後者はSDコントローラーが部分的な物理ブロックを書き込むために多くの読み取り、コピー、再フラッシュを行う必要があるためです。fullblock
ちなみに、その重要性は過小評価すべきではありません。それbs
がなければ、それは最大値に過ぎず、部分的な読み取りはその後の不整合を持続させる可能性があるからです。