実行中にrsyncの最大ダウンロード速度を調整する

実行中にrsyncの最大ダウンロード速度を調整する

不安定な接続を介して 2 台の Linux マシン間でダウンロードする必要があります。Rsync が最適なツールのようですが、問題は、夜間にこのプロセスの帯域幅のレート制限を増やしたいことです。どうすればいいでしょうか?

これを実行する方法について何か良い提案はありますか? 私にとって最良のアイデアは、特定の時間に強制終了され、その後時間をチェックして速度制限を調整するスクリプトで再起動される bash スクリプトを用意することだと思います。

常に多数の rsync が実行されていると想定できるため、killall rsync は機能しません。

答え1

の最新バージョンにはオプションrsyncがあります--time-limit=MINS。接続が不安定なので、とにかくループする必要があるとのことです。私の提案は、 を使用して接続速度を管理し、状態に関係なくtrickleを 1 時間ごとに強制的に再起動することです。rsync

#!/bin/bash
#
while :
do
    # Evening? Or day?
    time=$(date +%H%M)
    if [[ ${hour#0} -gt 2200 || ${hour#0} -lt 700 ]]
    then
        # After 10pm and before 7am
        up=100 down=10    # 100 KB/s up and 10 KB/s down
    else
        up=10 down=1      # 10 KB/s up and 1 KB/s down
    fi

    trickle -s -u $up -d $down -t 10 rsync -avzP --time-limit=60 /path/to/source/ remote:/path/to/destination/ && break

    # Take a breather
    sleep 60
done

この例では、時刻が 06:59 に再確認された場合、時刻はまだ 6 時なので、rsyncフルスピードで 1 時間再起動されることを覚えておいてください。これにより、実質的に午前 8 時まで、つまり予想より 1 時間遅くまで、より大きな帯域幅を使用できるようになります。

希望する帯域幅制限に合わせてアップ/ダウン値を修正します。これらは KB (キロバイト)/秒単位なので、より一般的なインターネット接続速度 (Mb) から変換するには、適切な係数 10 で調整する必要があります。1 Mb/s = 1000 Kb/s = 100 KB/s であることに注意してください。

--time-limitにオプションがない場合はrsync、ユーティリティを使用してほぼ同じことを行うことができますtimeout

timeout 60m trickle ... rsync ...

関連情報