dd、ナビゲーションに1つのブロックサイズを使用し、書き込みに別のブロックサイズを使用する

dd、ナビゲーションに1つのブロックサイズを使用し、書き込みに別のブロックサイズを使用する

背景情報:

  • 一部の.binファイルをSDカードにコピーします(埋め込みデバイスから読み取られ、ファイルシステムなし)
  • デバッグカードでは、特定のセグメントを削除(つまり0に設定)し、バイナリを別のセグメントにコピーする必要があります。
  • サブプロセスモジュールを使用してPythonスクリプトからddを呼び出す考えてください)

質問:

bs = 512の場合、SDカードに書き込むのは非常に遅くなります。大きな範囲では、bs = 8Mははるかに高速です。

何とか「bs=512eek={n_small_blocks}」に変更してから、実際の書き込みのために「bs=8M」に変更できますか(正しい場所を検索した後)。

次のリソースが見つかりました。 http://www.delorie.com/gnu/docs/textutils/coreutils_65.html

しかし、2つの呼び出しが必要な理由とガイドが主張する内容を達成するために、2つの呼び出しがどのように連携するのかは不明です。


修正する

ここで答えを見つけました。

https://superuser.com/questions/380717/how-to-output-file-from-the-specified-offset-but-not-dd-bs-1-skip-n

以下で私のソリューション全体をチェックしてください。

答え1

解決策:

dd if='input_file.bin'           \
   of='/dev/sd{X}'               \
   bs={desired write block size} \
   seek={start offset in bytes}  \
   count={write size in bytes}   \
   oflag=seek_bytes              \
   iflag=count_bytes

マニュアルページから:

count_bytes
    treat 'count=N' as a byte count (iflag only)

...

seek_bytes
    treat 'seek=N' as a byte count (oflag only)

これは転送速度が遅くなるように見えますが、少なくともkB / sではなくMB / s単位です。また、Webで利用可能なマニュアルページ(Google「man dd」など)にはこれらのオプションが含まれていないようです。システムのマニュアルページを確認してください。

関連情報