You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsync传输出现Broken pipe(32)连接中断问题求助

解决rsync跨局域网传输随机中断问题

问题背景

尝试将约70GB图片/视频从Proxmox Debian VM传输到Raspberry Pi 4B,rsync连接随机中断,报错:

2023/06/21 03:05:28 [902423] rsync: [sender] write error: Broken pipe (32)
2023/06/21 03:05:28 [902423] sent 8888398299 bytes received 24769 bytes total size 43016448521
2023/06/21 03:05:28 [902423] rsync error: unexplained error (code 255) at io.c(823) [sender=3.2.3]

已尝试发送端SSH配置ServerAliveInterval/ServerAliveCountMax、排除内存不足,希望保留rsync特性,不愿改用scp。

环境配置:

  • 发送端:Proxmox VM(Debian),4核i5-8259U,6GB内存+4GB交换空间
  • 接收端:Raspberry Pi 4B(Raspbian),4GB内存
  • 两端rsync版本均为3.2.3

可行解决办法

1. 强制在rsync命令中指定SSH双向保活参数

仅修改发送端~/.ssh/config可能未生效,直接在rsync命令中通过-e参数传递SSH选项,确保双向连接检测:

rsync -caPv -e "ssh -o ServerAliveInterval=20 -o ServerAliveCountMax=5 -o ClientAliveInterval=20 -o ClientAliveCountMax=5" --log-file='/home/user/backuplog/library-transfer.log' '/srv/docker/data-dir/' backupHost:'/mnt/hdd/docker/data/library-`date +"%d%m%Y"`/'
  • ServerAliveInterval:发送端每20秒向接收端发送SSH存活检测包
  • ServerAliveCountMax:连续5次未收到回应则触发重连(rsync支持断点续传)
  • ClientAliveInterval/ClientAliveCountMax:接收端向发送端发送检测包,避免单向断连未被察觉

2. 调整rsync传输缓冲与限速

大文件传输时,默认缓冲可能导致IO阻塞或网络丢包,手动设置缓冲大小并限速:

rsync -caPv --buffer-size=64M --bwlimit=1000 -e "ssh -o ServerAliveInterval=20 -o ServerAliveCountMax=5" --log-file='/home/user/backuplog/library-transfer.log' '/srv/docker/data-dir/' backupHost:'/mnt/hdd/docker/data/library-`date +"%d%m%Y"`/'
  • --buffer-size=64M:增大传输缓冲,减少磁盘IO频繁切换
  • --bwlimit=1000:限制传输速度为1000KB/s(可根据局域网带宽调整,避免占满带宽导致丢包)

3. 拆分传输任务

将大目录拆分为多个子任务单独传输,避免单次任务过长导致中断:

#!/bin/bash
if [[ "$EUID" -ne '0' ]]; then
  echo "Missing root privileges"
  exit
fi

TARGET_DIR="/mnt/hdd/docker/data/library-`date +"%d%m%Y"`/"
# 提前在接收端创建目标目录
ssh backupHost "mkdir -p $TARGET_DIR"

# 遍历源目录下的子目录/文件,逐个传输
for item in /srv/docker/data-dir/*; do
  item_name=$(basename "$item")
  echo "Transferring $item_name..."
  rsync -caPv -e "ssh -o ServerAliveInterval=20 -o ServerAliveCountMax=5" --log-file="/home/user/backuplog/library-transfer-$item_name.log" "$item" backupHost:"$TARGET_DIR"
done

即使某一个子任务中断,只需重新执行该子任务即可,无需从头开始。

4. 检查接收端磁盘挂载与IO状态

Raspberry Pi的USB硬盘可能存在IO瓶颈或挂载不稳定:

  • 查看磁盘错误日志(在RPi上执行):
dmesg | grep -i error
  • 监控实时IO状态(在RPi上执行):
iostat -x 5

如果发现磁盘IO使用率持续100%,暂停其他占用IO的任务,或更换更快的USB硬盘/接口。

5. 禁用rsync的高级特性(可选)

两端rsync的特性差异(如64位时间戳)可能导致兼容问题,尝试禁用部分非必要特性:

rsync -caPv --no-times --no-acls --no-xattrs -e "ssh -o ServerAliveInterval=20 -o ServerAliveCountMax=5" --log-file='/home/user/backuplog/library-transfer.log' '/srv/docker/data-dir/' backupHost:'/mnt/hdd/docker/data/library-`date +"%d%m%Y"`/'
  • --no-times:不保留文件时间戳,避免32/64位时间戳兼容问题
  • --no-acls/--no-xattrs:不传输ACL和扩展属性,减少传输数据量

内容的提问来源于stack exchange,提问作者786yt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:17:39