Ваша проблема, вероятно, не с вашим компьютером, по сути, это, вероятно, хорошо. Но этот переходный слой флэш-памяти USB имеет собственный процессор, который должен отображать все ваши записи, чтобы компенсировать то, что может быть на 90% неисправным флэш-чипом, кто знает? Вы затопляете это, тогда вы затопляете свои буферы, тогда вы затопляете весь автобус, тогда вы застряли, чувак - в конце концов, именно там все ваши вещи. Это может показаться нелогичным, но на самом деле вам нужно заблокировать ввод-вывод - вам нужно позволить FTL задать темп, а затем просто идти в ногу.
(О взломе микроконтроллеров FTL: http://www.bunniestudios.com/blog/?p=3554 )
Все вышеперечисленные ответы должны работать, так что это больше "я тоже!" больше всего на свете: я был там полностью, чувак. Я решил свои собственные проблемы с помощью rsync --bwlimit arg (2.5 Мбит / с, казалось, было подходящим местом для одного безошибочного запуска - чего угодно, и я столкнулся бы с ошибками защиты от записи). 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 для передачи данных, если вы попробуете. Во всяком случае, другие идеи уже были приняты, так почему бы и нет?
[EDIT]: я заметил упоминания о 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
может использоваться, чтобы гарантировать, что ваш процесс копирования с диска на диск имеет запланированный ввод-вывод с более низким приоритетом, чем обычные процессы.