合理的な速度でバイナリファイルの任意の部分をどのようにコピーできますか?

合理的な速度でバイナリファイルの任意の部分をどのようにコピーできますか?

合理的な速度でバイナリファイルの任意の部分をどのようにコピーできますか?

明らかにddwithはbs=1非常に遅く、bs他の値に設定すると任意の部分をコピーすることは不可能です。

これは間違っていますか?それを使用できますかdd?そうでなければ、ツールは何ですか?

たとえば、このコマンドは

dd if="$img" of=tail.bin bs=2147483648 skip=1 status=progress

間違った尾をコピーしてください。

このコマンド

dd if="$img" of=tail.bin bs=1 skip=2147483648 status=progress

非常に遅い。

ベストアンサー1

GNU dd はcount_bytes、、seek_bytesフラグskip_bytesをサポートします。これにより、任意のオフセットとサイズで高性能ブロックサイズ選択を使用することができます。

バイト単位を指定すると、GNU ddはバージョン9.1からデフォルトでこれを行います。

から引用コアユーティリティ/ニュース:

ブロック数が「B」で終わる場合、ddはブロックの代わりにバイトを計算します。たとえば、「dd count = 100KiB」は102,400ブロックの代わりに100KiBのデータをコピーします。したがって、count_bytes、Skip_bytes、およびeek_bytesフラグはまだ有効ですが、廃止され、文書化されなくなりました。

別のオプションは、必要なオフセットとサイズ制約を使用してループデバイスを作成することです。これは、デフォルトでランダムなオフセットをサポートしないdd(または他のプログラム)に適用されます。

あるいは、bs = 1の最初の/最後のチャンクの一部だけをコピーし、希望のチャンクサイズが大きい中間セグメントをコピーすることも検討できます。

おすすめ記事