如何减慢 rsync 速度?

如何减慢 rsync 速度?

我正在尝试复制出现故障的 USB 拇指驱动器的内容。如果我读取数据的速度太快,驱动器的控制器芯片就会过热,驱动器就会从系统中消失。发生这种情况时,我需要拔下驱动器的插头,等待一分钟左右让它冷却,然后重新插入,然后重新启动复制。

我有驱动器内容的旧备份,因此获取其余数据的明显方法是使用rsync更新备份,但这会导致整个“读取太快,驱动器消失” ,我需要重新开始”问题。有没有办法告诉rsync每分钟只读取X兆字节的数据?或者,是否可以告诉它在驱动器消失时暂停操作,并在重新插入时恢复操作?

答案1

与 DopeGhoti 的经验不同,该--bwlimit标志确实限制了我的 rsync (v3.1.2) 的数据传输。

测试:

$ dd if=/dev/urandom bs=1M count=10 of=data
10+0 records in
10+0 records out
10485760 bytes (10 MB, 10 MiB) copied, 0.0871822 s, 120 MB/s

$ du -h data
10M     data

$ time rsync -q data fast
0.065 seconds

$ time rsync -q --bwlimit=1M data slow
10.004 seconds

(注意:我的time输出看起来与大多数time调用(zsh功能)不同,那些时间不是我编辑的)

否则,也许类似于-exec中的 double 的东西find。我相信应该rsync -R创建并复制父文件夹,但如果没有,那么cp --parents应该。

$ find /failing/usb -exec rsync -R {} /somewhere/safe/ \; -exec sleep 1 \;

笔记: 也看看解救,这可能就是您正在寻找的:)

答案2

有点像 MacGyver 解决方案,但我过去已经取得了很好的成功:
在棒和计算机之间放置一个旧的 USB 1 集线器。绝对不可能这样快速复制:-)

其他可能性:如果您有另一根可用的棒,请将其放在连接到同一根集线器的另一个 USB 端口上(这样它就与您的问题棒共享带宽)。
现在开始对额外的棒进行大量写入操作,以便两个棒都竞争带宽。为了进一步控制,您可以使用伊奥尼斯进一步降低问题的优先级。

答案3

您可以用来rsync --bwlimit=RATE限制文件传输速度,根据下面的评论,实际上似乎是通过限制数据的读取速度来工作的,这正是您正在寻找的。

答案4

rsync --bwlimit=100除了100KiB/s之外,还有更多解决方案。

  1. 与完整磁盘复制选项ddrescue一起使用。--max-read-rate这还允许您在发生错误后从中断处重新启动完整磁盘副本。

    ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
    

ddrescue还有许多与数据恢复相关的其他选项,请参阅此处的手册

  1. 使用pv(“管道查看器”)与--rate-limit选项或throttle工具来限制管道速率。pv也能显示出进步。您可以使此功能适用于任何使用管道或可以使用管道的工具:

    tar -cf - /failing/usb | throttle -K 100 | tar -C /your/outputfolder/ -xvf -
    

    或者

    tar -cf - /failing/usb | pv --rate-limit 100k | tar -C /your/outputfolder/  -xvf -
    

    看看光伏手册页了解更多设置和示例。对于throttle,您可能还想尝试-w选项,它决定如何计算速度,请参阅油门手册页

相关内容