このエントリーをはてなブックマークに追加

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です。 かなり正確に帯域が制限されてそうです。




記事一覧へ