数GBのバックアップファイルをネットワーク上のストレージへコピーする際にrsyncを使用しているのだが、あるタイミングから毎回IOエラーが発生するようになった。
rsync error: error in file IO (code 11) at receiver.c(389) [receiver=3.1.0]
code 11 は例えばコピー先の容量が一杯のときなどにでるようだが(参考)
転送先のストレージの空き容量などは特に問題なく、HDDもある程度新しいため壊れたとも考えにくい状態。
その後対応を調べたところ、転送速度をある程度絞るとエラーが発生しなくなった。
rsync --bwlimit
オプションを設定
rsyncの帯域制限をかけるには、以下のように設定する。単位は kB/sec。
# 転送速度を 1MB/sec に設定
rsync --bwlimit=1024 <送信元> <送信先>
今回はエラーの対処のために行ったが、主にサーバーの負荷を下げる用途に使用するらしい。
その他のコマンドでも帯域制限をかける
wget
# 単位は byte/sec, 例は 1MB/sec
wget --limit-rate=1024k http://XXXXXXXXXXXXXXXXXXXX
wget --limit-rate=1m http://XXXXXXXXXXXXXXXXXXXX
curl
# 1024k, 1m などで指定できるらしい、例は 1MB/sec
curl --limit-rate 1m http://XXXXXXXXXXXXXXXXXXXX
scp
# 単位は Kbit/sec
scp -l 8192 root@hoge.com:/foo/bar.txt .