我怎样才能减慢 rsync 的速度?

Mar*_*ark 38 rsync

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

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

apr*_*boy 47

与 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
Run Code Online (Sandbox Code Playgroud)

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

否则,或许还有沿双的线-execfind。我相信rsync -R应该创建和复制的父文件夹,但如果没有,那么cp --parents应该。

$ find /failing/usb -exec rsync -R {} /somewhere/safe/ \; -exec sleep 1 \;
Run Code Online (Sandbox Code Playgroud)

注意:也请查看ddrescue,它可能是您正在寻找的内容:)

  • 好吧,再看一遍,它实际上计算写入的字节数并在计算出的时间内休眠。`io.c`,第 832-3 行:`if (bwlimit_writemax) sleep_for_bwlimit(n);` 无论如何,这可能会按预期工作,在短时间内读取并在中间休眠。我建议从一个低值开始并小心地增加,或者只是让缓慢的传输在一夜之间运行。 (2认同)

Ton*_*nny 27

有点像 MacGyver 解决方案,但我过去用它取得了很好的成功:
在棒和计算机之间放置一个旧的 USB 1 集线器。无论如何,它不会以这种方式快速复制:-)

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

  • 我确信应该有一种方法可以通过软件解决方案使端口作为 USB 1.1 工作,可能是通过为 USB 内核模块提供选项。 (2认同)

Dop*_*oti 15

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

  • `离子` ? https://linux.die.net/man/1/ionice (7认同)
  • ionice 只是给予优先权,如果有两件事正在阅读,那么默认情况下他们会得到 50/50。ionice 可以调整它,但如果只有一件事读取,那么它将获得 100% 。 (3认同)
  • 幸运的是,您的答案是错误的:`--bwlimit` 设置 I/O 限制,不一定是 *network* 限制。在各种场景中多次测试:此选项使 rsync 将自身限制在 *read* 上,无论目的地如何。(在类似的场景中发现了这一点,其中快速写入慢速本地设备使它们失败) (3认同)

jmi*_*rez 12

除了rsync --bwlimit=100100KiB/s之外的更多解决方案。

  1. ddrescue--max-read-rate完整磁盘复制选项一起使用。这也将允许您在出错后从停止的地方重新启动完整的磁盘副本。

    ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
    
    Run Code Online (Sandbox Code Playgroud)

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

  1. pv("pipe viewer") 与--rate-limit选项或throttle工具一起使用来限制管道的速率。pv还可以显示进度。您可以对任何使用管道或可以使用管道的工具进行此操作:

    tar -cf - /failing/usb | throttle -K 100 | tar -C /your/outputfolder/ -xvf -
    
    Run Code Online (Sandbox Code Playgroud)

    或者

    tar -cf - /failing/usb | pv --rate-limit 100k | tar -C /your/outputfolder/  -xvf -
    
    Run Code Online (Sandbox Code Playgroud)

    查看pv 联机帮助页了解更多设置和示例。对于throttle,您可能还想尝试-w确定如何计算速度的选项,请参阅油门联机帮助页