「dd」に代わるものはありますか?

「dd」に代わるものはありますか?

dd切り取り、検索、スキップ機能を使用してファイルを読み書きする以外に、どのツールを使用する必要がありますか?コマンドラインオプションが不便で、見慣れない、遅いが正確なdd検索モード(bs=1)と高速で柔軟性のないモード(または他のモード)bs=4kの中から選択する必要がありません。

切り捨てられたかどうかにかかわらず、場所31337のファイル(またはパイプ、ソケット、または開発)から555バイトを読み取り、それを場所128205の他のファイル(ブロック512 + 43を使用)に書き込むためのより現代的なツールはありますか?

答え1

ツールがあります(注:ほぼ同じ機能を持つ他のプログラムもddrescueあります)。dd_rescue短いオプションには単一ダッシュ、長いオプションには二重ダッシュを含むより使いやすい構文を使用します。マニュアルページから:

   -i, --input-position=<bytes>
          starting position in input file [0]

   -K, --skip-size=<bytes>
          initial size to skip on read error [64 KiB]

   -M, --retrim
          mark all failed blocks as non-trimmed

   -o, --output-position=<bytes>
          starting position in output file [ipos]

答え2

dcflddもう一つのddの選択肢です。入力/出力の柔軟性を追求することに関するOPの質問は扱いませんが、インターネット検索を介してここに来る他の人には役に立つかもしれません。

これは、次の追加機能を備えたgnu ddに基づいています。

  • リアルタイムハッシュ - dcflddは、入力データの送信中にハッシュしてデータの整合性を保証します。
  • ステータス出力 - dcflddは、送信されたデータ量と操作にかかる時間に基づいて進捗状況をユーザーに更新できます。
  • フレキシブルディスクの削除 - dcflddを使用すると、ディスクをすばやく削除し、必要に応じて既知のパターンを使用できます。
  • 画像/削除の確認 - dcflddは、ターゲットドライブが指定された入力ファイルまたはパターンとビット単位で一致することを確認できます。
  • 複数出力 - dcflddは複数のファイルまたはディスクに同時に出力できます。
  • 出力分割 - dcflddは出力を複数のファイルに分割でき、分割コマンドよりも構成可能です。
  • パイプ型出力とログ - dcfldd は、すべてのログデータと出力をデフォルトのコマンドとファイルに送信できます。

答え3

良い選択肢は、pv最も効率的なチャンクサイズを自動的に計算し、基本的に速度を上げるだけでなく、進行なども提供します。使い方は簡単です:

pv < /dev/sda > sda.img

圧縮面でも良好な性能を発揮します。一度にディスクをバックアップして圧縮する簡単な方法は次のとおりです。

pv < /dev/sdb | pigz -9 > disk.img.gz

詳細をご覧ください。ここ

答え4

実際には、パフォーマンスを低下させることなく、切り捨てや丸めエラーなしで、バイトレベルの精度でddパイプを使用してこれを行うことができます。

dd iflag=skip_bytes,count_bytes skip=1234 count=42 | dd oflag=seek_bytes conv=notrunc seek=12340 of=test.bin

左側では、ddは最初の1234バイトをスキップし、正確に42バイトを読み取ります。これは、効率的なセクタのバッファリングとアライメントによって行われます。丸めエラーなしでオフセット1234から42バイトを読みます。右側のddは、出力で正確に12340バイトを見つけ、パイプから受信した42バイトのみを書き込みます。これは、効率的なセクタのバッファリングとアライメントによって行われます。パイプライン内では、2 つの dd インスタンスが正しく処理される最後の数バイトを除いて、優れたパフォーマンスを得るためにセクタサイズのチャンクにデータを送受信します。

count_bytesにはoflagがないので、このパイプが必要です!

以下は、パイプなしで2バイトのみを計算したい例です。追加データが入力で消費され、出力に書き込まれます。

$ printf aaa | dd oflag=seek_bytes conv=notrunc seek=0 count=2 | xxd
0+1 records in
0+1 records out
00000000: 6161 61                                  aaa
3 bytes copied, 0.000158916 s, 18.9 kB/s

関連情報