GNU/Linux >> Linux の 問題 >  >> Linux

GNU Parallel を使用して rsync を並列化する

次の手順でうまくいきました:

<オール>
  • rsync --dry-run を実行します まず、影響を受けるファイルのリストを取得します。
  • $ rsync -avzm --stats --safe-links --ignore-existing --dry-run \
        --human-readable /data/projects REMOTE-HOST:/data/ > /tmp/transfer.log
    
    1. cat transfer.log の出力をフィードしました parallel まで 5 rsync を実行するために 次のように並行して:
    $ cat /tmp/transfer.log | \
        parallel --will-cite -j 5 rsync -avzm --relative \
          --stats --safe-links --ignore-existing \
          --human-readable {} REMOTE-HOST:/data/ > result.log
    

    ここでは、--relative オプション (リンク) は、影響を受けるファイルのディレクトリ構造が、ソースと宛先で同じままであることを保証します (/data/ 内) ディレクトリ)、コマンドはソース フォルダー (例:/data/projects) で実行する必要があります。 ).


    私は個人的にこのシンプルなものを使用しています:

    \ls -1 | parallel rsync -a {} /destination/directory/
    

    これは、ほとんど空でないディレクトリがいくつかある場合にのみ役立ちます。そうしないと、ほとんどすべての rsync を持つことになります 終了し、最後の 1 人がすべての仕事を 1 人で行います。

    ls の前のバックスラッシュに注意してください これにより、エイリアスがスキップされます。したがって、出力が希望どおりであることを確認します。


    受け入れられた回答を使用しないことを強くお勧めします。より良い解決策は、最上位のディレクトリをクロールし、比例した数の rync 操作を開始することです。

    大きな 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
    

    これは合成ベンチマーク (水晶ディスク) で、順次書き込みのパフォーマンスが 900 MB/秒に近づき、リンクが飽和していることを意味します。 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 に渡します。ただし、ファイルごとに新しいインスタンスを作成しないでください。


    Linux
    1. Rsyncを使用してLinuxシステム全体をバックアップする方法

    2. Gnu Make Pattern Ruleでワイルドカードを使用しますか?

    3. Rsyncを使用してファイルを送信およびダウンロードする方法

    1. GNUScreenを使用するためのLinuxのヒント

    2. 一部のファイルのみを含めるために正規表現を使用して rsync

    3. 指定したディレクトリに抽出する cpio (gnu、rhel 4) を取得する方法は?

    1. ソースが安全に更新されている間にRsyncを使用していますか?

    2. Gnu Parallel Vs&(i Mean Background)Vs Xargs -p?

    3. Gnu Screenを使用すると、バックスラッシュで生のプロンプトが表示されますか?