61

在过去的几年里,我一直在使用 rsync one-liner 将我的 Mac Mini 桌面(OSX 10.9、2.5 GHz i5、4 GB RAM)上的重要文件夹备份到 FreeNAS 盒子(0.7.2 Sabanda 修订版 5266,Pentium D 2.66 GHz,822MiB RAM [系统报告,我认为那里有 1 GB])。我在 FreeNAS 机器上运行一个 rsync 守护进程。最近,这些转会一直被无限期搁置。我已经完成了通常的 Google-fu 操作,但无法确定问题的根源或解决方案。

单线是:

rsync -rvOlt --exclude '.DS_Store'                                  \
      --exclude '.com.apple.timemachine.supported'                  \
      --delete /Volumes/Storage/Music/Albums/ 192.168.1.100::albums

我已经尝试启用-vvvand --progress,但是没有模式可以区分什么挂起和什么不挂起。哎呀,如果我重试,同一个文件可能会在传输过程中挂在不同的点,或者根本不挂。试运行 ( -n) 也不总是成功。我唯一的“成功”是实现超时(--timeout=10)并一遍又一遍地重新运行命令。最终,我慢慢前进,但无法保证成功,而且速度令人无法接受。我已经达到了一个我无法通过的文件的地步。

Mac Mini 通过 5 GHz 连接到我的路由器。FreeNAS 盒子通过 100 mbit 端口连接到同一个路由器。当传输实际进行时,rsync --progress报告 2.5-4 MB/s。根据--progress,挂起实际上就是——据我所知,没有发生数据传输。

我需要有关诊断和解决方案的帮助。

4

14 回答 14

32

我遇到了同样的问题。删除 -v 对我不起作用。我的用例略有不同,因为我从源 (EXT4) 转到 ExFAT。对我来说,问题是 rsync 试图保留 ExFAT 不支持的设备文件和权限。我用的是-hrltDvaP开关。-D-a开关似乎是我的问题。-a开关转换-rlptgoD (no -H,-A,-X)为。, -p,-g-o开关似乎是我的根本原因,因为 rsync 在运行时对其中一个或全部进行了吐槽。明确删除-a和指定-Prltvc开关对我有用。

bkupcmd="nice -n$nicelevel /usr/bin/rsync -Prltvc --exclude-from=/var/tmp/ignorelist "
于 2016-05-25T18:50:33.847 回答
21

我一次又一次地遇到同样的事情,如果你放弃 -v 选项似乎会有所帮助(如果你需要那个输出,这很烦人)。

于 2014-04-19T09:17:35.213 回答
16

尝试使用--whole-file/-W。此命令禁用 rsync 增量传输算法。这对我们有用(从 WSL 到 OSX)

我们的完全同步标志是-avWPle

(e 是因为我们使用的是 ssh,这必须是最后一个标志)

于 2020-01-08T22:37:52.400 回答
15

当远程设备空间不足时,这发生在我身上。使用选项时不会显示错误--verbose;关闭它会产生一些 STDERR 输出,说明远程设备空间不足。当我释放一些空间时,我能够再次运行 rsync--verbose并且一切正常。

于 2014-05-20T02:27:59.750 回答
6

我使用的是 openSUSE 13.2 Linux,rsync 版本 3.1.1-2.4.1.x86_64,我遇到了类似的问题,在我的笔记本电脑和外部硬盘之间进行 rsync,目标设备肯定有足够的可用空间。

我以为我得到了一个改进,省略了选项 -v,但 10 分钟后它又挂了:strace 说:select(5, [], [4], [], {60, 0}) = 0 (Timeout)

通过“iotop”,我可以看到确认 rsync 进程不再进行重要的磁盘 IO。

既没有删除 -v 选项,也没有使用 --bwlimit 限制带宽解决了这个问题。

于 2015-08-20T10:51:50.000 回答
5

刚刚从硬盘进行 rsync 到 FAT32 USB 驱动器时遇到了类似的问题。在我的情况下,rsync 在不到一秒的时间内就冻结了,之后根本没有反应……用 CTRL+C 离开它。

发现问题是硬盘上硬链接的使用和 USB 驱动器上有 FAT32 文件系统的组合,它不支持硬链接。

用 ext4 格式化 USB 驱动器为我解决了这个问题。

于 2017-11-18T21:33:17.470 回答
5

在我的情况下, rsync 实际上并没有失败。

我有定期的服务器备份,可以传输超过 500GB+ 的大文件,并且指定了--append-verify--checkusm超过了ssh参数。

我在分析后发现,一旦客户端完成文件检查,服务器端检查就会开始。这意味着当服务器正在检查客户端将出现挂起和冻结-htop在服务器上运行以 rsync 工作。

rsync如果在服务器上以守护程序模式运行并使用rsync协议而不是传输,这可能不是问题ssh

在相关说明中,这个非常长的等待会触发 SSH 超时和rsync: connection unexpectedly closed (254 bytes received so far) [sender]错误消息,解决方案是添加ClientAliveInterval 120ClientAliveCountMax 720/etc/ssh/sshd_config.

于 2019-05-02T20:58:16.900 回答
2

我经常在 3.0.9 的带有硬链接的目录上看到这种情况,但它也发生在 3.1.3 上。

Debian 错误 820916中有一个很好的分析:当它的内部套接字因错误而拥塞时,rsync可能会陷入死锁。

这可能已在几天前(2020 年 6 月)的3.2 版本中得到修复:

当过多的消息阻塞所有 I/O 缓冲区时,请避免挂起。

我能想到的唯一好的解决方法是,如果问题不是持久的,那么把timeout它放在前面:timeout rsync <args> <source> <destination>,然后重试。如果它对您来说是持久的,那么您就是可以调试它的幸运者:D

于 2020-06-25T17:34:41.673 回答
1

当目标计算机上的用户没有目标文件夹的写入权限时,也会发生这种情况。
您可以尝试向其他目标文件夹授予写入权限:

sudo chmod -R o+w /path/to/target-folder
于 2018-05-31T19:28:50.963 回答
0

在 Ubuntu 16 上出现 rsync 挂起问题。以上选项均无帮助。问题出在源驱动器(外部 SSD)中,它突然出现故障。我尝试了几次磁盘检查,但都卡住了。最终重新启动系统,磁盘突然又可以访问了。

于 2019-07-24T16:18:49.710 回答
0

在我的例子中,它是我们防火墙中的 IPC(入侵保护组件)。它将所有 TCP SYN 数据包视为洪水攻击并终止连接。我打开了一个通过 NFS 会话的 rsync 并关闭了服务器防火墙规则的 IPC,它立即重新开始工作。

rsync -ravh /source /destination

当它发生时,我无法终止 rsync 会话。它锁定了 NFS 挂载,我必须重新启动客户端计算机才能使其再次工作。奇怪的是它会复制一些文件然后突然停止。它似乎总是停在同一个文件上。所以我一直在寻找文件问题、权限问题、TCP 卸载问题,并尝试在 rsync 调用中删除 -v。如果您至少在我的情况下遇到此问题,它甚至发生在一个简单的情况下。

cp -rp /source /destination 

所以我知道要开始考虑其他因素。因此,如果您在服务器之间的防火墙或路由器上有任何类型的入侵保护,您可以尝试暂时关闭它,看看它是否也能解决您的问题。

于 2021-10-02T19:12:51.847 回答
0

很可能不是“你的”问题,但我在研究类似行为时偶然发现了这个问题:

当目标站点的 io 负载过多时,我正在观察“挂起”。eG 在我的一个小型企业服务器上,当有人重新同步他的 IMAP 帐户并下载大量数据并且运行写入他的数据的备份作业时。

在这种情况下,我注意到 rsync 的性能急剧下降。在目标机器上的高负载值中很明显top,即使 CPU 和 Mem 都很好。

等待该过程完成每次都会有所帮助,或者稍后再次中断并尝试 rsync。

于 2017-09-02T19:36:40.510 回答
0

Holger Ohmacht 又名 h8ohmh / 8ohmh:

据我所知,问题在于文件系统缓冲区/硬盘/硬件互通的使用。

本地驱动器的临时解决方案(例如 USB3<->HD):轮询不断变化的磁盘空间的脚本。如果没有更改可用磁盘空间,则 rsync 停止并必须重新启动

cmd="rsync -aW --progress --stats --preallocate --super \ <here your source dir> \ <here your dest dir>" eval "$cmd" &
rm ./ndf.txt rm ./odf.txt while [[ 0 == 0 ]]; do df > ./ndf.txt cmp ./odf.txt ./ndf.txt res="$?" echo "$res" if [[ $res == 0 ]]; then echo "###########################################" ls -al "./ndf.txt" ls -al "./odf.txt" killall rsync eval "$cmd" & else cp ./ndf.txt ./odf.txt fi sleep 60 done
将等更改<source dir>为您的路径!

在我的情况下,它总是通过使用 rsync 的--preallocate选项来停止(通常是因为更好的磁盘性能和拯救连续块),所以只要磁盘和文件系统驱动程序没有在那里重做这个解决方案

于 2020-01-03T23:02:02.927 回答
0

我遇到了同样的问题,这是因为我在 rsync 期间内存不足。创建了一个交换文件并解决了问题。

于 2018-04-05T20:03:16.627 回答