Masalah Anda mungkin tidak dengan komputer Anda, karena itu mungkin baik-baik saja. Tetapi lapisan transisi flash USB memiliki prosesor sendiri yang harus memetakan semua tulisan Anda untuk mengkompensasi apa yang bisa sebanyak 90% chip flash rusak, siapa tahu? Anda membanjiri lalu membanjiri buffer, lalu membanjiri seluruh bus, lalu terjebak, bung - setelah semua, di situlah semua barang Anda. Ini mungkin terdengar kontra-intuisi tetapi yang Anda butuhkan adalah memblokir I / O - Anda harus membiarkan FTL mengatur langkahnya dan terus mengikuti.
(Saat meretas mikrokontroler FTL: http://www.bunniestudios.com/blog/?p=3554 )
Semua jawaban di atas harus berfungsi sehingga ini lebih merupakan "saya juga!" lebih dari yang lain: Aku benar-benar pernah ke sana, kawan. Saya memecahkan masalah saya sendiri dengan rsync's --bwlimit arg (2.5mbs tampaknya menjadi sweet spot untuk menjalankan tunggal, bebas kesalahan - apa pun lebih dan saya akan berakhir dengan kesalahan tulis-lindungi). rsync sangat cocok untuk tujuan saya karena saya bekerja dengan seluruh filesystem - jadi ada banyak file - dan hanya menjalankan rsync untuk kedua kalinya akan memperbaiki semua masalah run pertama (yang diperlukan ketika saya menjadi tidak sabar dan mencoba untuk melewati 2.5mbs).
Namun, saya rasa itu tidak cukup praktis untuk satu file. Dalam kasus Anda, Anda bisa melakukan pipe ke dd set ke raw-write - Anda dapat menangani input apa pun dengan cara itu, tetapi hanya satu file target pada satu waktu (meskipun file tunggal itu bisa menjadi perangkat blok keseluruhan, tentu saja).
## 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
Anda mungkin menemukan netcat sedikit lebih cepat daripada ssh untuk transportasi data jika Anda mencobanya. Bagaimanapun, ide-ide lain sudah diambil, jadi mengapa tidak?
[EDIT]: Saya memperhatikan menyebutkan lftp, scp, dan ssh di pos lain dan berpikir kami sedang berbicara tentang salinan jarak jauh. Lokal jauh lebih mudah:
% 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]: Kredit yang jatuh tempo: baru sadar ptman mengalahkan saya dalam hal ini selama lima jam di komentar.
Tentunya Anda dapat menyetel $ bs untuk kinerja di sini dengan pengganda - tetapi beberapa sistem file mungkin mengharuskannya untuk menjadi kelipatan dari ukuran sektor fs jadi ingatlah itu.
ionice
dapat digunakan untuk memastikan bahwa proses penyalinan disk-ke-disk Anda dijadwalkan I / O pada prioritas yang lebih rendah daripada proses biasa.