rsyncを完了するのに必要な時間や労力を推定しますか?

rsyncを完了するのに必要な時間や労力を推定しますか?

多数のファイルと複数レベルのディレクトリを含むディレクトリで実行したときに実行rsyncされた作業量または時間を推定できますか?

  • 進行状況オプションは、ソースディレクトリの下のすべてのファイルとディレクトリではなく、単一のファイル転送の進行状況のみを表示します。

  • 私が推測する1つの方法は、これまでに送信したディレクトリを見て、ソースと比較することです。

    rsyncファイルとディレクトリを転送する順序を知っておくと、多くの役に立ちます。

    私の考えでは、これはおそらく関係があると思います。そのrsyncマルチスレッド各スレッドは何をしますか?

    どの順番を選ぶのかよく分からないし、パン優先順位についての以前の推測が間違っているようで、並んだ。

答え1

rsync -arv /source desc --info=progress2

rsyncが操作を完了するまでの予想時間を提供します。

2,863,290,944 64%  5.71MB/s  0:04:12

0:04:12 残り時間です

CentOS 7/8でテスト済み

答え2

rsyncファイルごとに1行を印刷-iしてから、行数pv -l(実際にはファイル数)に基づいて進行状況を報告するために使用できます。

以下が必要ですpv(パイプラインビューア):http://www.ivarch.com/programs/pv.shtml

rsync -ai sourcedir/ targetdir/ | pv -l -s filecount > logfile

ファイル数を取得するには、次のコマンドを使用します。

find sourcedir | wc -l

注:このコマンドは、コピーされたファイルの数に応じて進行状況情報を表示します。この方法は、小さなファイルが多い場合に最も効果的です。非常に大きなファイルがいくつかあれば、それほど面白くないでしょう。


既存のレプリカを更新(または比較)しながら進行状況を表示するには、次の手順を実行します。

(追加情報:ディレクトリを比較しますが、ファイルの内容は比較しません)

rsync -aii --delete sourcedir/ targetdir/ | pv -l -s filecount > logfile

2つ目は、-irsyncがファイルが同じであっても、ファイルごとに1行を印刷するようにします。

比較に追加します-n(実際には何もコピーまたは削除しません)。

--delete必要に応じて省略してください。

このコマンドはリアルタイムでさまざまなファイルを画面に印刷します。

rsync -aii --delete sourcedir/ targetdir/ | pv -l -s filecount | 
    tee logfile | grep -v "^\."

上記のコマンドは、小さなファイルが多い場合に最適です。大容量ファイルがほとんどない場合、回避策は次のとおりです。

Rsyncには進捗レポートが組み込まれています。またはrsyncの-Pマニュアルページを参照してください--progress--info=progress2私はまだこれをテストしていません。また、これらのオプションは...とうまく機能しないか、pv少なくともその方法を見つけることができませんでした。

サイズに応じて進行状況を確認するもう1つのおおよその解決策は次のとおりです。

  • レプリケーションを使用する前に、ターゲットパーティションの空き容量をメモしてくださいdf -h
  • 使用元のディレクトリのサイズを確認してくださいdu -sh
  • ターゲットに使用しwatch df -hてサイズが大きくなるのを見てください。

明らかに、これは更新や比較ではなくコピーする場合にのみ機能します。

答え3

だから私はこれが古いことを知っていますが、私が使用する方法はファイル数を監視するよりもはるかに優れています。以下は、ファイルサイズに基づいて監視するスクリプトです。

ターゲットサーバーでは、次のように実行できます。

# rsync-monitor.sh <folder> <expected final size of folder> <seconds between measuring start/stop size>
rsync-monitor /folder 516835 300

これは/folder516835MBに達すると予想され、300秒ごとに次のように印刷されます。

[Sun 21 Mar 2021 03:53:25 PM UTC] Starting              | Sleeping 300s...
[Sun 21 Mar 2021 03:58:25 PM UTC] 11900MB of 516835MB   | ~13MB/s       | 10h 15m 0s remaining  | Sleeping 300s...
[Sun 21 Mar 2021 04:03:27 PM UTC] 16497MB of 516835MB   | ~15MB/s       | 9h 0m 0s remaining    | Sleeping 300s...
[Sun 21 Mar 2021 04:08:29 PM UTC] 20974MB of 516835MB   | ~14MB/s       | 9h 10m 0s remaining   | Sleeping 300s...
[Sun 21 Mar 2021 04:13:31 PM UTC] 25600MB of 516835MB   | ~15MB/s       | 8h 50m 0s remaining   | Sleeping 300s...

スクリプトは次のとおりです。

#!/usr/bin/env bash

# The folder
FOLDER=$1

# The expected size of folder
MEGS=$2

# How many seconds to refresh
SLEEP=$3

SECONDSLEFT=1
START=$(du -sm $FOLDER |awk '{print $1}')
echo -e "[$(date)] Starting\t\t| Sleeping ${SLEEP}s..."
while (( $SECONDSLEFT > 0 )); do
        sleep $SLEEP
        END=$(du -sm $FOLDER |awk '{print $1}')
        DOWNLOADED=$(( $END-$START ))
        MEGSPERSECOND=$(( $DOWNLOADED/$SLEEP ))
        SECONDSLEFT=$(( ($MEGS-$END)/$DOWNLOADED*$SLEEP ))
        HOURS=$(( $SECONDSLEFT/60/60 ))
        MINUTES=$(( ($SECONDSLEFT-$HOURS*60*60)/60 ))
        SECONDS=$(( $SECONDSLEFT-$HOURS*60*60-$MINUTES*60 ))
        echo -e "[$(date)] ${END}MB of ${MEGS}MB\t| ~${MEGSPERSECOND}MB/s\t| ${HOURS}h ${MINUTES}m ${SECONDS}s remaining\t| Sleeping ${SLEEP}s..."
        START=$END
done
echo -e "[$(date)] Finished"

答え4

予想される時間を知りたい場合は、$ time rsync * / tempを使用してください。 rsyncの前にファイルの合計サイズを確認する必要があります。ネットワーク経由でrsyncする場合、rsyncの速度はネットワークによって異なります。 $ ls -ltrを使用して、バックアップされたディレクトリを確認できます。

関連情報