通过 SSH 进行 rsync 有时非常慢 - 有时会耗尽带宽

通过 SSH 进行 rsync 有时非常慢 - 有时会耗尽带宽

我在计算机 A (Mac OS X) 上设置了一个 bash 脚本,设置为通过 cronjob 每五分钟运行一次。该脚本检查远程计算机 B (Gentoo Linux) 上的新文件,然后将所有新文件同步到计算机 A。有时,此同步(下载)会以 3 MB/s 的速度使我的连接达到最大,但有时,可能有 10% 的时间,它将以 10-50 KB/s 的极低速率下载。我 100% 确定这不是因为我的互联网连接正在消失/下降,那么可能是什么原因造成的呢?

奇怪的是,运行缓慢的 rsync 作业始终运行缓慢。也就是说,如果它正在同步 1 GB 文件,它将在作业的整个生命周期中以极慢的速度(10-50 KB/s)同步/下载,直到完全下载 1 GB。这让我相信它与 CPU 负载或网络无关,而是与脚本或其他东西有关。

我的脚本如下。

# !/bin/sh

# Check if rsync has been timestampped and exit if it has
echo "Checking for local timestamp..." >> /Users/localuser/log/rsync.log
if [ -e /Users/localuser/scripts/.timestamp ]
then
        echo "Local timestamp already exists, exiting..." >> /Users/localuser/log/rsync.log
        exit
fi

# Timestamp rsync
echo "Local timestamp not found, continuing..." >> /Users/localuser/log/rsync.log
touch /Users/localuser/scripts/.timestamp

# Timestamp remote computer B
echo "Timestampping remote computer B" >> /Users/localuser/log/rsync.log
ssh remoteuser@remotecomputerb touch /home/remoteuser/finished/.timestamp

# Run rsync
echo "Starting rsync at $(date)" >> /Users/localuser/log/rsync.log
rsync -avzPL -e ssh remoteuser@remotecomputerb:/home/remoteuser/finished /share --log-file /Users/localuser/log/rsync.log

# Change permissions
echo "Changing permissions" >> /Users/localuser/log/rsync.log
chmod -Rf 775 /share
/usr/sbin/chown -Rf localuser:staff /share

# Delete sym links that are older than the remote computer B timestamp
echo "Deleting sym links on remote computer B" >> /Users/localuser/log/rsync.log
ssh remoteuser@remotecomputerb find /home/remoteuser/finished \! -newer /home/remoteuser/finished/.timestamp -type -l -delete

# Delete the rsync script timestamp
echo "rsync finished at $(date)" >> /Users/localuser/log/rsync.log
rm /Users/localuser/scripts/.timestamp

exit 0

答案1

这基本上可能是任何事情,从链路拥塞到远程计算机上的高 CPU 使用率。在此期间,所有网络设备也可能出现故障。特别是当你轰炸 ssh 端口时。但网络设备中的缓冲问题也可能是罪魁祸首。

但有一件事:下次,请仔细检查 rsync 是否运行两次。是的,您在脚本中创建了解决方法来避免这种情况,但人们永远不知道...也许该文件夹是只读的,也许文件系统表现得很奇怪...

所以,你明白,我们没有足够的信息来正确回答。

然而,我建议您停止使用rsync此用例。这是低效且容易出错的。由于您想要的是文件夹持续同步,请看看同步事物。它应该工作得更好,没有延迟,并且具有相同的开放性和安全性。 (rsync 非常适合一次性和定期备份,但不适合持续同步文件夹)

相关内容