為什麼 rsync 失敗並出現管道損壞 (32)、io.c(820) 的套接字 IO 錯誤(代碼 10)?

為什麼 rsync 失敗並出現管道損壞 (32)、io.c(820) 的套接字 IO 錯誤(代碼 10)?

我為我的伺服器購買了一個新的硬碟,我正在嘗試重新組織我的檔案。對於第一次傳輸,rsync完美複製了約 3 GB。但是,使用等效rsync命令時,第二次傳輸會失敗。

$ 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]

第一次運行在 800 GB 中複製了大約 550 個,然後就被卡住了。最近的嘗試在失敗前僅成功複製了 1 GB。我不確定它是否相關,但來源是時光倒流增量備份驅動器,因此它包含大量的硬連結。如何修復此錯誤並完成命令?

我正在運行 rsync 版本 3.1.1 協定版本 31。

答案1

dmesg | grep rsync

[85852.560086]記憶不足:殺死進程4242(rsync)得分194或犧牲子進程[85852.562695]殺死進程4243(rsync)total-vm:121948kB,anon-rss:65752kB,-vm:121948kB,anon-rss:65752kB,-files

解決方案:

  • 將 rsync 速度變更為低於磁碟的速度。--bwlimit=6000.. USB 2 是 60MB/s /4(用於 2 個驅動器上的讀寫)或 /10(用於在非 SSD 上查找)...或取得具有 2GB RAM 和 USB3.0 的 XU4。
  • 更改核心記憶體參數echo 100 > /proc/sys/vm/watermark_scale_factor
  • 在操作期間強制清除內存echo 3 > /proc/sys/vm/drop_caches
  • 確保您使用的是 4.9.29 內核uname -r

相關內容