rsync が io.c(820) で Broken pipe (32)、error in socket IO (code 10) で失敗するのはなぜですか?

rsync が io.c(820) で Broken pipe (32)、error in socket IO (code 10) で失敗するのはなぜですか?

サーバー用に新しいハード ドライブを購入し、ファイルを再編成しようとしています。最初の転送では、rsync約 3 GB を完璧にコピーしました。ただし、同等のrsyncコマンドを使用すると、2 回目の転送は失敗します。

$ sudo /usr/bin/nice -n 19 /usr/bin/ionice -c2 -n7 rsync -aEHAXPx /media/a/ /media/b --delete
...
rsync: [sender] write error: Broken pipe (32)
rsync error: error in socket IO (code 10) at io.c(820) [sender=3.1.1]

最初の実行では、800GBのうち550GBをコピーしたが、その後停止した。最近の試みでは、1GBしかコピーできず、その後停止した。関連があるかどうかはわからないが、ソースは過去に戻る増分バックアップ ドライブなので、大量のハード リンクが含まれています。このエラーを修正してコマンドを完了するにはどうすればよいですか?

rsync バージョン 3.1.1 プロトコル バージョン 31 を実行しています。

答え1

dmesg | grep rsync

[85852.560086] メモリ不足: プロセス 4242 (rsync) を強制終了してスコア 194 にするか、子プロセスを犠牲にします [85852.562695] プロセス 4243 (rsync) を強制終了しました total-vm:121948kB、anon-rss:65752kB、file-rss:4kB – Sparhawk

解決策:

  • rsync 速度をディスクの速度より低く変更します。USB --bwlimit=60002 は、2 つのドライブの rw の場合は 60MB/秒 /4、非 SSD のシークの場合は /10 です。または、2GB RAM と USB3 を搭載した XU4 を入手してください。
  • カーネルメモリパラメータを変更するecho 100 > /proc/sys/vm/watermark_scale_factor
  • 操作中にメモリを強制的に消去するecho 3 > /proc/sys/vm/drop_caches
  • カーネル4.9.29を使用していることを確認してくださいuname -r

関連情報