Votre problème n'est probablement pas avec votre ordinateur, en soi, c'est probablement bien. Mais cette couche de transition flash USB possède son propre processeur qui doit cartographier toutes vos écritures pour compenser ce qui pourrait être autant qu'une puce flash défectueuse à 90%, qui sait? Vous l'inondez puis vous inonder vos tampons, puis vous inonder tout le bus, puis vous êtes coincé, l'homme - après tout, c'est là que se trouvent toutes vos affaires. Cela peut sembler contre-intuitif, mais ce dont vous avez vraiment besoin est de bloquer les E / S - vous devez laisser le FTL donner le rythme, puis suivre le rythme.
(Sur le piratage des microcontrôleurs FTL: http://www.bunniestudios.com/blog/?p=3554 )
Toutes les réponses ci-dessus devraient fonctionner, donc c'est plus un "moi aussi!" qu'autre chose: j'y suis totalement allé, mec. J'ai résolu mes propres problèmes avec l' argument --bwlimit de rsync (2,5 Mo semblaient être le point idéal pour une seule exécution sans erreur - rien de plus et je me retrouverais avec des erreurs de protection en écriture). rsync était particulièrement adapté à mon objectif car je travaillais avec des systèmes de fichiers entiers - donc il y avait beaucoup de fichiers - et simplement exécuter rsync une deuxième fois résoudrait tous les problèmes de la première exécution (ce qui était nécessaire lorsque je devenais impatient et essayais rampe au-delà de 2,5 Mo).
Pourtant, je suppose que ce n'est pas aussi pratique pour un seul fichier. Dans votre cas, vous pouvez simplement rediriger vers dd défini sur raw-write - vous pouvez gérer n'importe quelle entrée de cette façon, mais un seul fichier cible à la fois (bien que ce fichier unique puisse être un périphérique de bloc entier, bien sûr).
## 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
Vous pouvez trouver que netcat est un peu plus rapide que ssh pour le transport de données si vous lui donnez une chance. Quoi qu'il en soit, les autres idées ont déjà été prises, alors pourquoi pas?
[EDIT]: J'ai remarqué les mentions de lftp, scp et ssh dans l'autre post et j'ai pensé que nous parlions d'une copie à distance. Les locaux sont beaucoup plus faciles:
% 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]: Le crédit est dû: je viens de remarquer que ptman m'a battu pendant environ cinq heures dans les commentaires.
Vous pouvez certainement régler $ bs pour les performances ici avec un multiplicateur - mais certains systèmes de fichiers peuvent exiger qu'il soit un multiple de la taille de secteur du fs cible, alors gardez cela à l'esprit.
ionice
peut être utilisé pour garantir que votre processus de copie de disque à disque est une E / S planifiée avec une priorité inférieure à celle des processus ordinaires.