我正在尝试创建一个小脚本来将大量图像从 proxmox 虚拟机传输到同一 LAN 上的树莓派(大约 90 GB 的图像/视频)。
这并不总是按预期工作,因为我不断遇到 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]
我觉得我现在已经遍布互联网了。或者只是因为我没有搜索正确的关键字。
我尝试在发送主机上添加 和 ,但没有成功ServerAliverInterval
。 其他人则认为这可能与缺乏记忆有关。我不完全确定如何测试这一点,但我一直在关注发送主机以及接收端的内存使用情况,这似乎也不是问题。同样,我不知道如何确定这一点。ServerAliveCountMax
~/.ssh/config
有些人建议您使用 scp 而不是 rsync。我只是不喜欢改变的想法,因为我想使用 rsync 的一些功能(例如文件匹配)。
另外,我看不出改变的理由,因为这必须以某种方式起作用。
这是我的设置的一些信息:
- 发送者:Proxmox VM(docker 主机)
- 4 个 CPU 核心(Proxmox 主机在 i5-8259U 上运行)
- 6 GB RAM(通常 500 MB 可用 RAM + 4 GB 交换空间)
- 接收器:树莓派4B
- 4 GB 内存
VM 正在运行完全更新的 Debian,而 Raspberry Pi 正在运行 Raspbian 操作系统 - 也已完全更新。还应该注意的是,两台主机上的 rsync 版本是相同的。
当 rsync 运行时,我尝试进行连续 ping 操作。这并没有显示出任何网络问题的迹象。
我还尝试过从发送机器到接收者进行另一个 ssh 会话。当文件传输失败时,此连接不会断开。
有谁知道我可以尝试做什么来完成这项工作?
这是我的脚本:
#!/bin/bash
# Check if script has root privileges #
if [[ "$EUID" -ne '0' ]]
then echo "Missing root privileges"
exit
fi
if [[ "$EUID" -eq '0' ]]; then
echo "Root privileges - check"
if ! rsync -caPv --log-file="/home/user/backup-outputs/datalibrary-transfer-$(date +"%d%m%Y").log" '/srv/docker/datalibrary/' [email protected]:"/home/backup/backup-stuff/datalibrary-$(date +"%d%m%Y")/" ; then
mv "/home/user/backup-outputs/datalibrary-transfer-$(date +"%d%m%Y").log" "/home/user/backup-outputs/datalibrary-transfer-$(date +"%d%m%Y")-failed.log"
fi
else
echo "Unknown error" > /home/user/backup-outputs/error.log
fi
这是两台主机的 rsync 版本:
VM:
rsync version 3.2.3 protocol version 31
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
symtimes, prealloc, stop-at, no crtimes
Optimizations:
SIMD, asm, openssl-crypto
Checksum list:
xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
zstd lz4 zlibx zlib none
转速:
rsync version 3.2.3 protocol version 31
Capabilities:
64-bit files, 64-bit inums, 32-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
symtimes, prealloc, stop-at, no crtimes
Optimizations:
no SIMD, no asm, openssl-crypto
Checksum list:
xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
zstd lz4 zlibx zlib none