あなたの問題はおそらくあなたのコンピューターにあるのではなく、おそらくそれで問題ないでしょう。しかし、そのUSBフラッシュ遷移層には、書き込みのすべてをマッピングして、90%の欠陥のあるフラッシュチップを補うための独自のプロセッサがあります。あなたはそれをあふれさせ、それからあなたのバッファをあふれさせ、そしてあなたはバス全体をあふれさせ、そしてあなたは立ち往生します、男-結局のところ、それはすべてのものがどこにあるかです。直感に反するように聞こえるかもしれませんが、本当に必要なのはI / Oをブロックすることです。FTLにペースを設定させてから、遅れないようにする必要があります。
(FTLマイクロコントローラーのハッキングについて:http ://www.bunniestudios.com/blog/ ? p=3554)
上記の答えはすべて機能するはずなので、これは「私もです!」他の何よりも:私は完全にそこにいました、男。rsyncの--bwlimitで問題を解決しました argを使用(2.5 MBは、エラーのない単一の実行のスイートスポットであるように思われました-それ以上の場合、書き込み禁止エラーが発生します)。私はファイルシステム全体で作業していたので、rsyncは私の目的に特に適していました-そのため、多くのファイルがありました-単にrsyncを2回実行すると、最初の実行の問題がすべて修正されます2.5MBを超えてランプアップする)。
それでも、私はそれが単一のファイルに対してそれほど実用的ではないと思います。あなたの場合、生の書き込みに設定されたddにパイプするだけです-あなたはそのように入力を処理できますが、一度に1つのターゲットファイルしか処理できません(もちろん、その単一のファイルはブロックデバイス全体になる可能性があります)。
## 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
[編集2]:当然のことながらクレジット:ptmanがコメントの5時間ほどで私にこれを打ち負かしたことに気付いた。
確かに、ここで乗数を使用してパフォーマンスのために$ bsを調整できますが、一部のファイルシステムでは、ターゲットfsのセクターサイズの倍数である必要があるため、そのことに留意してください。
ionice
は、ディスクからディスクへのコピープロセスが通常のプロセスよりも低い優先度でスケジュールされたI / Oであることを確認するために使用できます。