我正在尝试复制出现故障的 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之外,还有更多解决方案。
与完整磁盘复制选项
ddrescue
一起使用。--max-read-rate
这还允许您在发生错误后从中断处重新启动完整磁盘副本。ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
ddrescue
还有许多与数据恢复相关的其他选项,请参阅此处的手册。
使用
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 -