您的问题可能不在于计算机本身,这可能很好。但是那个USB闪存过渡层具有自己的处理器,该处理器必须映射所有写操作,以补偿多达90%的故障闪存芯片的故障,谁知道呢?先泛洪它,然后泛滥缓冲区,然后泛洪整个总线,然后陷入困境,伙计-毕竟,这就是所有东西的所在。听起来可能违反直觉,但您真正需要的是阻止I / O-您需要让FTL设定速度,然后再跟上。
(关于黑客攻击FTL微控制器:http : //www.bunniestudios.com/blog/? p=3554 )
以上所有答案都应该起作用,所以这更像是“我也是”!最重要的是:我已经去过那里了,老兄。我用rsync的--bwlimit arg 解决了自己的问题(2.5mbs似乎是单次无错误运行的最佳途径-除此之外,我还会遇到写保护错误)。rsync特别适合我的目的,因为我正在使用整个文件系统-因此有很多文件-并且仅第二次运行rsync即可解决所有第一次运行的问题(当我感到不耐烦并尝试时,这是必需的超过2.5mbs)。
不过,我想对于单个文件而言,这还不太实际。在您的情况下,您可以通过管道将dd设置为raw-write-您可以用这种方式处理任何输入,但是一次只能处理一个目标文件(尽管单个文件可以是整个块设备)。
## OBTAIN OPTIMAL IO VALUE FOR TARGET HOST DEV ##
## IT'S IMPORTANT THAT YOUR "bs" VALUE IS A MULTIPLE ##
## OF YOUR TARGET DEV'S SECTOR SIZE (USUALLY 512b) ##
% bs=$(blockdev --getoptio /local/target/dev)
## START LISTENING; PIPE OUT ON INPUT ##
% nc -l -p $PORT | lz4 |\
## PIPE THROUGH DECOMPRESSOR TO DD ##
> dd bs=$bs of=/mnt/local/target.file \
## AND BE SURE DD'S FLAGS DECLARE RAW IO ##
> conv=fsync oflag=direct,sync,nocache
## OUR RECEIVER'S WAITING; DIAL REMOTE TO BEGIN ##
% ssh user@remote.host <<-REMOTECMD
## JUST REVERSED; NO RAW IO FLAGS NEEDED HERE, THOUGH ##
> dd if=/remote/source.file bs=$bs |\
> lz4 -9 | nc local.target.domain $PORT
> REMOTECMD
如果尝试一下,您可能会发现netcat的数据传输速度比ssh快。无论如何,其他想法已经被采纳了,那为什么不呢?
[编辑]:我注意到另一篇文章中提到了lftp,scp和ssh,并认为我们正在谈论远程副本。本地更容易:
% bs=$(blockdev --getoptio /local/target/dev)
% dd if=/src/fi.le bs=$bs iflag=fullblock of=/tgt/fi.le \
> conv=fsync oflag=direct,sync,nocache
[EDIT2]:归功于此:刚注意到ptman在评论中用了五个小时就击败了我。
绝对可以在这里用乘数来调整$ bs的性能-但是某些文件系统可能要求它是目标fs扇区大小的倍数,因此请记住这一点。
ionice
可用于确保磁盘到磁盘复制过程的计划I / O优先级低于常规过程。