如何使用bwlimit选项从所有带宽中设置rsync速度限制

时间:2020-01-09 10:39:42  来源:igfitidea点击:

rsync命令从备份脚本中消耗了我所有的带宽,并产生了大量的I/O。
如何在Linux或类似Unix的系统上设置rsync命令的文件传输速度限制?
如何防止我的rsync脚本使用所有带宽?

rsync是一个免费的开源命令行实用程序,用于在计算机和硬盘驱动器之间高效地传输和同步文件。
它还和跨网络的机器。
您可以使用--bwlimit选项轻松限制I/O带宽。
在本教程中,您将学习如何在Linux,MacOS,FreeBSD和类似Unix的系统上使用rsync命令设置I/O限制。

在Linux和类似Unix的系统上设置rsync速度限制

  • 打开Linux,Unix或macOS终端
  • 您可以通过在NA命令中执行--bwlimit = RATE选项来指定通过套接字或网络发送的数据的最大传输速率。
  • 将rsync带宽限制设置为每秒5000 Kbytes:rsync --bwlimit = 5000 source dest

如何防止rsync命令使用我的所有带宽

语法为:

rsync --bwlimit=KBPS src dst
rsync --bwlimit=KBPS [options] src dst
rsync --bwlimit=KBPS [options] src user@dst
rsync --bwlimit=KBPS [options] user@src /path/to/dir
rsync --bwlimit=KBPS -a -P /path/to/dir/ [email protected]

例子

您将I/O限制设置为每秒1000 KB:

$ rsync --bwlimit=1000 /path/to/source /path/to/dest/
$ rsync --bwlimit=1000 /var/www/html/ \
[email protected]:~/mysite.backups/

在此示例中,从FreeNAS服务器中以当前目录5000KB/s的速度提取文件:

$ rsync --bwlimit=5000 --delete -P -az -H --numeric-ids \
[email protected]:linode-www .

rsync选项

在rsync手册页上:--bwlimit = KBPS选项允许您指定最大传输速率。

RATE值可以在字符串后缀以表示大小乘数,并且可以是小数值(例如bwlimit = 1.5m)。
如果未指定后缀,则假定该值以1024字节为单位。
出于向后兼容的原因,速率限制将四舍五入到最接近的KiB单位,因此速率不能小于每秒1024字节。

Rsync通过套接字以块为单位写入数据,此选项既限制了rsync写入的块的大小,又试图将平均传输速率保持在请求的限制。
在rsync写入数据块然后休眠以使平均速率达到合规性时,可能会看到一些突发性。

ionice

使用ionice命令设置或获取程序(例如rsync或您自己的备份脚本)的I/O调度类和优先级。
因此,您可以使用Linux上的ionice实用程序控制I/O带宽,如下所示:

/usr/bin/ionice -c2 -n7 /root/scripts/nas.backup.full

或者

/usr/bin/ionice -c2 -n7 rsync \
-bwlimit=1000 /path/to/source /path/to/dest/

其中:

  • -c或--class {class}:调度类的名称或编号,0:无,1:实时,2:尽力而为,3:空闲。
  • -n或--classdata {num}`:指定的调度类中的优先级(0..7),仅用于实时类和尽力而为类

如何通过trick流命令选项限制rsync速度

另一个选择是使用细流,它是一个用户空间带宽管理器。
语法为:

trickle -u uploadLimit program
trickle -d downloadLimit rsync
trickle -u {UPLOAD_LIMIT} -d {DOWNLOAD_LIMIT} program-binary

例如,

trickle -s -d 3000 -u 3000 rsync /path/to/source/ /dest/
trickle -s -d 3000 -u 3000 rsync -avr /var/www/html/ [email protected]/var/www/html/