合理的な速度でバイナリファイルの任意の部分をどのようにコピーできますか?
明らかにdd
withは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の最初の/最後のチャンクの一部だけをコピーし、希望のチャンクサイズが大きい中間セグメントをコピーすることも検討できます。