rsync
スクリプトを使用して、あるホストのデータを別のホストのデータと同期させています。データには、ほぼ1.2 TBに寄与する多数の小さなサイズのファイルがあります。
これらのファイルを同期するためにrsync
、次のコマンドを使用しています。
rsync -avzm --stats --human-readable --include-from proj.lst /data/projects REMOTEHOST:/data/
proj.lstの内容は次のとおりです。
+ proj1
+ proj1/*
+ proj1/*/*
+ proj1/*/*/*.tar
+ proj1/*/*/*.pdf
+ proj2
+ proj2/*
+ proj2/*/*
+ proj2/*/*/*.tar
+ proj2/*/*/*.pdf
...
...
...
- *
テストとして、これらのプロジェクトのうち2つ(8.5GBのデータ)を選択し、上記のコマンドを実行しました。順次プロセスであるため、完了までに14分58秒かかります。したがって、1.2TBのデータの場合、数時間かかります。
複数のrsync
プロセスを並列に実行できる場合(&
、xargs
またはを使用parallel
)、時間を節約できます。
私はparallel
(cd
ソースディレクトリにingした後)で以下のコマンドで試しましたが、実行に12分37秒かかりました:
parallel --will-cite -j 5 rsync -avzm --stats --human-readable {} REMOTEHOST:/data/ ::: .
これは5分の1の時間しかかからなかったはずですが、そうではありませんでした。どこか間違っていると思う。
rsync
実行時間を短縮するために複数のプロセスを実行するにはどうすればよいですか?
rsync
のを並列化することが最優先事項です。
rsync
のsが並行して使用されるようになりました。