ddを並列化する方法は?

ddを並列化する方法は?

dd現在、スパースファイルをinput(if)として使用し、ファイルをoutput()として使用ofして呼び出すのに問題がありますconv=sparseddCPUコア1個( Intel(R) Core(TM) i7-3632QM CPU @ 2.20GHz4コア+インテルハイパースレッディング4個)(1コア100%)のみ使用しているようで、並列化が可能かどうか疑問に思いますdd。私はそこに行きました。

  • 見てみると、corutilsバージョン8.23に組み込み機能があるようですinfo ddman dd
  • sgp_dd私はパッケージで確認しましたがsg3-utils(私の要件に合っているかどうかわかりません)、まれなファイルを処理していないようです。
  • dcfldd並列化機能がないようです。

AFAIK

  • マルチスレッドのプログラムの一部の内部処理よりも改善されたバージョン/分岐(コンテキスト変更によってI / Oパフォーマンスが低下するのを防ぐため)
  • GNUをローカルで実行するためのソリューションは、次の方がparallel優れています。
  • カスタム(テストされていない)コードスニペット

I/O 集中的な作業により、CPU がボトルネックを引き起こすのを防ぐ方法は? Linux 3.13がインストールされているUbuntu 14.04でこのコマンドを実行し、スパースファイルをサポートするすべてのファイルシステムのスパースファイルディスクイメージで使用したいと思います(少なくとも1つの特定のファイルシステムにソリューションを接続してはいけません)。

背景:zfs(zfsonlinux 0.6.4不安定なバージョン、バグがあり、CPUボトルネックが発生する可能性がある(最終的に遅いホール検索))で、11TBのスパースファイル(〜2TBのデータを含む)のコピーを作成しようとしています。これは、dd(非常に一般的な方法で)を並列化する方法に関する質問に何も変更しないでください。

ベストアンサー1

Bashでテスト:

INFILE=in
seq 0 1000 $((`stat --format %s $INFILE` /100000 )) |
  parallel -k dd if=$INFILE bs=100000 skip={} conv=sparse seek={} count=1000 of=out

1000を調整する必要があるかもしれません。

おすすめ記事