rsync在转移期间突然无限期地挂起

时间:2013-12-25 13:07:08

标签: macos rsync nas

在过去几年中,我一直使用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

我尝试过启用-vvv--progress,但是没有模式可以分辨出什么不挂起,什么不挂起。哎呀,如果我重试,同一个文件可能会在转移过程中挂在不同的位置,或者根本不挂起。干运行(-n)并不总是成功。我唯一的“成功”就是实现超时(--timeout=10)并一遍又一遍地重新运行命令。最终,我一路走来,但不能保证成功,并且步伐不可接受。我已经达到了一个我无法通过的文件。

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

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

13 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:11)

当远程设备空间不足时,我发生了这种情况。使用--verbose选项时,错误不会显示;关闭它会产生一些STDERR输出,说明远程设备空间不足。当我释放一些空间时,我能够使用--verbose再次运行rsync,一切都很顺利。

答案 2 :(得分:9)

我遇到了同样的问题。删除-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 "

答案 3 :(得分:4)

尝试使用-整个文件/ -W 。 此命令禁用rsync增量传输算法。 那就是我们的工作(从WSL到OSX)

我们的完整同步标志为 -avWPle

(e是因为我们正在使用ssh,并且必须是最后一个标志)

答案 4 :(得分:3)

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

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

使用“iotop”我会看到确认rsync进程不再有重要的磁盘IO。

使用--bwlimit删除-v选项和限制带宽都没有解决问题。

答案 5 :(得分:2)

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

发现问题是在硬盘上使用硬链接并在USB驱动器上安装FAT32文件系统,这不支持硬链接。

Formatting the USB drive with ext4为我解决了这个问题。

答案 6 :(得分:1)

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

答案 7 :(得分:1)

在我的情况下,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

答案 8 :(得分:1)

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

Debian bug 820916中有一个很好的分析:当其内部套接字被错误塞满时,rsync可能会陷入僵局。

这可能是几天前(2020年6月)在3.2 release中解决的:

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

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

答案 9 :(得分:0)

很可能不是&#34;你的&#34;问题,但是当我研究类似的行为时,我偶然发现了这个问题:

我正在观察&#34;悬挂&#34;当目标站点有太多的负载。例如。在我的一个小型企业服务器上,有人正在重新启动他的IMAP帐户并下载大批数据并运行一个写入数据的备份作业。

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

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

答案 10 :(得分:0)

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

sudo chmod -R o+w /path/to/target-folder

答案 11 :(得分:0)

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

答案 12 :(得分:0)

Holger Ohmacht aka 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选项而停顿(通常是因为磁盘性能更好并且可以恢复连续的块),只要磁盘和文件系统驱动程序仅在此解决方案上不能正常工作