4

以下のシェルスクリプトと並行してGNUを使用して、scpを使用してファイルを並行してコピーしていますが、正常に動作しています。

以下のシェルスクリプトrsyncの代わりにどのように使用できるかわかりません。転送速度の点で比較してパフォーマンスが向上scpするかどうかを確認しようとしています。rsyncscp

以下は私の問題の説明です -

で以下のシェルスクリプトを実行しているため、ファイルmachineBをコピーしています。machineCmachineAmachineA

ファイルがそこにない場合は、確かmachineBにそこにあるはずなので、最初からファイルをコピーしようとします。そこにない場合は、から同じファイルをコピーしようとします。machineCmachineBmachineBmachineC

GNU Parallel ライブラリを使用してファイルを並行してコピーしていますが、正常に動作しています。現在、プライマリとセカンダリの両方で 5 つのファイルを並行してコピーしています。

以下は私が持っている私のシェルスクリプトです -

#!/bin/bash

export PRIMARY=/test01/primary
export SECONDARY=/test02/secondary
readonly FILERS_LOCATION=(machineB machineC)
export FILERS_LOCATION_1=${FILERS_LOCATION[0]}
export FILERS_LOCATION_2=${FILERS_LOCATION[1]}
PRIMARY_PARTITION=(550 274 2 546 278) # this will have more file numbers
SECONDARY_PARTITION=(1643 1103 1372 1096 1369 1568) # this will have more file numbers

export dir3=/testing/snapshot/20140103

do_Copy() {
  el=$1
  PRIMSEC=$2
  scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/.
}
export -f do_Copy

parallel --retries 10 -j 5 do_Copy {} $PRIMARY ::: "${PRIMARY_PARTITION[@]}" &
parallel --retries 10 -j 5 do_Copy {} $SECONDARY ::: "${SECONDARY_PARTITION[@]}" &
wait

echo "All files copied."

scp上記のコマンドを次のように置き換える方法はありますが、同時にrsync5 つのファイルを並行してコピーしたいですか?PRIMARYSECONDARY

4

4 に答える 4

6

rsyncは、フォルダとファイルの2 つの階層を効率的に同期するように設計されています。

個々のファイルを転送するために使用できますが、両端にファイルのバージョンがあり、それらの間にわずかな違いがある場合を除き、そのように使用することはあまり役に立ちません。階層内の個々のファイルに対して の複数のインスタンスをrsync並行して実行すると、ツールの目的が無効になります。

タスクが CPU バウンドではなく I/O バウンドであるというトリプルは正しいため、rsyncまたはを使用しているかどうかにかかわらず、タスクの並列化は通常のケースでは役に立ちませんscpが、ネットワーク転送の並列化が役立つ状況が 1 つあります。 : 送信者がリクエストを調整している場合。その場合、多数の異なるフォルダーごとに のインスタンスを実行する価値があるかもしれませんが、コードが複雑になり、実際に利益を得ているかどうかを確認するために両方のソリューションをプロファイリングする必要がありますrsync

要するに、rsync;の単一のインスタンスを実行するだけです。別のアプローチから得られるパフォーマンスの向上は、それに見合うものではありません。

于 2014-05-24T20:05:00.683 に答える
0

rsyncと同じように、単一のファイルをダウンロードできますscprsync://デーモンを呼び出すまたはhostname::path形式を使用しないように注意してください。

少なくとも、2 つのリモート ホストを同時に動作させることができます。さらに、ファイルが異なる物理ディスク上にある場合、またはたまたまキャッシュにある場合は、単一のホスト上でもそれらを並列化すると役立ちます。そのため、単一のインスタンスが必然的に進むべき道であるという他の人に同意しません。

于 2014-05-31T13:03:00.543 に答える
0

交換するだけでいいと思います

scp david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/. || scp david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/.

rsync david@$FILERS_LOCATION_1:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/new_weekly_2014_"$el"_200003_5.data || rsync david@$FILERS_LOCATION_2:$dir3/new_weekly_2014_"$el"_200003_5.data $PRIMSEC/new_weekly_2014_"$el"_200003_5.data

(変更はコマンドだけではないことに注意してください)

やみくもにコピーする scp と比較して、rsync は delta=transfer アルゴリズムを使用するため、おそらく追加の速度を得ることができます。

于 2014-05-31T13:16:10.633 に答える