rsyncはデータ同期中の負荷を軽減するために、 bwlimitオプションを用いて帯域制限をかけることができます
rsync --bwlimit=1024 <送信元> <送信先>
のように指定することができます。bwlimitの単位はkB/sです。
以下のような内容のシェルスクリプト(rsync_test.sh)を作成して効果を確認してみます。
実行権限(chmod +x rsync_test.sh)が必要です。 このスクリプトではrsyncディレクトリを作って、テストして最後に削除します。 安全のため、最初のif文のところで、rsyncディレクトリが作成できなかったら停止するようにしてますが、 念のため、rsyncディレクトリを作っても問題ない場所で実行してください。
100MBのテストファイルを作成してrsyncでデータをコピーしてみます。 テストの中ではbwlimitオプションで1MB/s指定したものと、指定なしのものを交互に実行しています。
#!/bin/bash
mkdir rsync
if [ $? -eq 1 ]; then
echo "stop"
exit 1
fi
# test 1
# creating test file
echo -n "creating test file..."
dd if=/dev/urandom of=./rsync/test_data bs=1024 count=102400
echo "done"
echo "===================================="
echo "start rsync with band width limit"
time rsync --bwlimit=1024 ./rsync/test_data ./rsync/with_bwlimit
echo "===================================="
echo "start rsync without band width limit"
time rsync ./rsync/test_data ./rsync/without_bwlimit
# cleanup
rm -rf rsync
mkdir rsync
# test 2(reverse order)
echo -n "creating test file..."
dd if=/dev/urandom of=./rsync/test_data bs=1024 count=102400
echo "done"
echo "===================================="
echo "start rsync without band width limit"
time rsync ./rsync/test_data ./rsync/without_bwlimit
echo "===================================="
echo "start rsync with band width limit"
time rsync --bwlimit=1024 ./rsync/test_data ./rsync/with_bwlimit
このテスト実行結果は以下の通りでした。
$ ./rsync_test.sh
creating test file...102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 19.6149 s, 5.3 MB/s
done
====================================
start rsync with band width limit
real 1m40.726s
user 0m0.690s
sys 0m0.814s
====================================
start rsync without band width limit
real 0m1.523s
user 0m0.565s
sys 0m0.791s
creating test file...102400+0 records in
102400+0 records out
104857600 bytes (105 MB) copied, 20.7151 s, 5.1 MB/s
done
====================================
start rsync without band width limit
real 0m1.512s
user 0m0.524s
sys 0m0.809s
====================================
start rsync with band width limit
real 1m40.794s
user 0m0.676s
sys 0m0.814s
bwlimitをつけてないものでは約1.5秒でコピーが終わりましたが、 bwlimit=1024(単位はkB/s)をつけたものでは約100秒でした。 100MB / 100秒 = 1024 kB/sです。 かなり正確に帯域が制限されてそうです。