Можливо, ваша проблема не з комп'ютером, сама по собі, це, мабуть, добре. Але у цього перехідного шару флеш-пам'яті USB є власний процесор, який повинен скласти карту всіх ваших записів, щоб компенсувати те, що могло б скластися, як 90% несправний флеш-чіп, хто знає? Ви заливаєте його потім, ви заливаєте свої буфери, потім ви заливаєте весь автобус, потім ви застрягли, людина - зрештою, тут усі ваші речі. Це може здатися протиінтуїтивно зрозумілим, але те, що вам насправді потрібно, - це блокування вводу-виводу - вам потрібно дозволити FTL задати темп, а потім просто йти в ногу.
(Про злом мікроконтролерів FTL: http://www.bunniestudios.com/blog/?p=3554 )
Усі вищезазначені відповіді повинні працювати, тому це більше "я теж!" ніж усе інше: я цілком там був, людина. Я вирішив власні проблеми з аргументом rsync --bwlimit arg (2,5 мбіт здавалося, що це приємне місце для єдиного запуску без помилок - нічого іншого, і я завершився б помилками захисту від запису). rsync особливо підходив моєму призначенню, тому що я працював з цілою файловою системою - тому було багато файлів - а просто запуск rsync вдруге вирішив би всі проблеми першого запуску (що було необхідно, коли я став би нетерплячим і спробував проїжджати через 2,5 Мбіт).
Але я думаю, що це не так вже й практично для одного файлу. У вашому випадку ви можете просто перейти до 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]: Кредит, де це належить: щойно помітив, що Птман побив мене до цього приблизно п’ять годин у коментарях.
Однозначно, ви можете налаштувати $ bs для продуктивності тут за допомогою мультиплікатора, але деякі файлові системи можуть вимагати, щоб він був кратним сектором цільових fs, тому майте це на увазі.
ionice
може бути використано для того, щоб процес копіювання з диска на диск був запланований вводу / виводу з нижчим пріоритетом, ніж звичайні процеси.