我正在尝试复制出现故障的 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
功能)不同,那些时间不是我编辑的)
否则,或许还有沿双的线-exec
在find
。我相信这rsync -R
应该创建和复制的父文件夹,但如果没有,那么cp --parents
应该。
$ find /failing/usb -exec rsync -R {} /somewhere/safe/ \; -exec sleep 1 \;
Run Code Online (Sandbox Code Playgroud)
注意:也请查看ddrescue,它可能是您正在寻找的内容:)
Ton*_*nny 27
有点像 MacGyver 解决方案,但我过去用它取得了很好的成功:
在棒和计算机之间放置一个旧的 USB 1 集线器。无论如何,它不会以这种方式快速复制:-)
其他可能性:如果您有另一根可用的棒,请将其放在连接到同一根集线器的另一个 USB 端口上(因此它与您的问题棒共享带宽)。
现在开始对额外的棒进行大写操作,这样两根棒都在争夺带宽。为了进一步控制,您可以使用ionice进一步降低问题棒的优先级。
Dop*_*oti 15
您可以使用rsync --bwlimit=RATE
来限制文件传输速度,根据下面的评论,实际上似乎通过限制数据的读取速度来工作,这正是您正在寻找的。
jmi*_*rez 12
除了rsync --bwlimit=100
100KiB/s之外的更多解决方案。
ddrescue
与--max-read-rate
完整磁盘复制选项一起使用。这也将允许您在出错后从停止的地方重新启动完整的磁盘副本。
ddrescue --max-read-rate=100K /failing/usb output.img output.logfile
Run Code Online (Sandbox Code Playgroud)ddrescue
还有许多与数据恢复相关的其他选项,请参阅此处的手册。
将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
确定如何计算速度的选项,请参阅油门联机帮助页。