rsync
私はあるホストのデータを別のホストのデータと同期させるためにスクリプトを使用してきました。データには、合計1.2TBに達する多数の小さなファイルが含まれています。
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
ソースディレクトリに移動した後)次のコマンドを試してみました。実行時間は12分37秒でした。
parallel --will-cite -j 5 rsync -avzm --stats --human-readable {} REMOTEHOST:/data/ ::: .
これは時間を5倍短縮するはずですが、そうではありません。私はどこか間違っていると思いました。
rsync
実行時間を短縮するために複数のプロセスを実行する方法は?
ベストアンサー1
私は誰にも許可された答えを使用しないことを強くお勧めします。より良い解決策は、トップレベルのディレクトリをつかみ、特定の数のrsync操作を開始することです。
私は大きなzfsボリュームを持っていて、私のソースはcifsマウントです。どちらも10Gに接続されており、一部のベンチマークではリンクが飽和する可能性があります。パフォーマンスを評価するために使用しますzpool iostat 1
。
ソースドライブは次のように取り付けられます。
mount -t cifs -o username=,password= //static_ip/70tb /mnt/Datahoarder_Mount/ -o vers=3.0
単一のrsync
プロセスを使用します。
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/ /StoragePod
ioメーターを読む:
StoragePod 30.0T 144T 0 1.61K 0 130M
StoragePod 30.0T 144T 0 1.61K 0 130M
StoragePod 30.0T 144T 0 1.62K 0 130M
合成ベンチマーク(Crystal Disk)では、シーケンシャル書き込みパフォーマンスは900 MB / sに近く、リンクが飽和していることを意味します。 130MB/s は大きくありません。週末を待つことと2週間を待つことの違いです。
そのため、ファイルリストを作成して同期を再実行してみました(64コアマシンがあります)。
cat /home/misha/Desktop/rsync_logs_syncs/Datahoarder_Mount.log | parallel --will-cite -j 16 rsync -avzm --relative --stats --safe-links --size-only --human-readable {} /StoragePod/ > /home/misha/Desktop/rsync_logs_syncs/Datahoarder_Mount_result.log
そして同じパフォーマンスで!
StoragePod 29.9T 144T 0 1.63K 0 130M
StoragePod 29.9T 144T 0 1.62K 0 130M
StoragePod 29.9T 144T 0 1.56K 0 129M
あるいは、ルートフォルダからrsyncを実行します。
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/Marcello_zinc_bone /StoragePod/Marcello_zinc_bone
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/fibroblast_growth /StoragePod/fibroblast_growth
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/QDIC /StoragePod/QDIC
rsync -h -v -r -P -t /mnt/Datahoarder_Mount/Mikhail/sexy_dps_cell /StoragePod/sexy_dps_cell
これは実際にパフォーマンスを向上させます。
StoragePod 30.1T 144T 13 3.66K 112K 343M
StoragePod 30.1T 144T 24 5.11K 184K 469M
StoragePod 30.1T 144T 25 4.30K 196K 373M
とにかく@Sandip Bhattacharyaが提案したように、ディレクトリをインポートして並列化する小さなスクリプトを作成します。または、ファイルのリストをrsyncに渡します。ただし、各ファイルに対して新しいインスタンスを作成しないでください。