

例えば運用中で負荷が一定以上あるサーバーにおいて、数ギガバイト程度大きさのファイルをコピーする場合に低負荷でファイルのコピーを行う方法はあるのでしょうか？

尚、I/OスケジューラーはCFQ以外とします。


CC BY-SA 3.0
2014-12-25T06:13:43.990
2549
2015-01-05T13:52:53.360
3023
question
linux
CFQを使わずにlinux上で低負荷でファイルのコピーを行う方法


@heliac2001
さんのリンク内にもありますが、`rsync`に帯域制限を設ける方法はどうでしょうか。IOスケジューラが`noop`でも効果を確認できました。

例えば500kbpsでコピーする場合

[code]

    rsync --bwlimit=500 fromfile tofile
    
[/code]

などと出来ます。

処理時間がかかるようにはなるものの、`iostat -x 1`で確認すると

  * %system
  * %iowait
  * %util

等が抑えられていることを確認できました。


CC BY-SA 3.0
2014-12-28T09:41:38.230
2739
2014-12-28T09:41:38.230
3313
2549
answer


すでに回答が出ていますが別の方法として、scp や pv にも帯域制限のオプションがあります。

[code]

    scp -l 500 fromfile tofile
    pv -L 500k fromfile > tofile
    
[/code]

また、より汎用的な方法として、コピープロセスを SIGSTOPとSIGCONTで制御すれば低負荷のコピーが可能です。

[code]

    cp hoge foo &
    PID=$!
    while kill -0 $PID ; do
      kill -s 19 $PID
      sleep 5
      kill -s 18 $PID
      sleep 10
    done
    
[/code]


CC BY-SA 3.0
2015-01-05T13:52:53.360
3138
2015-01-05T13:52:53.360
5008
2549
answer