为什么 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,file-rss:4kB – Sparhawk

解决方案:

  • 将 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

相关内容