通过网络(scp)复制大文件的性能缓慢

Jef*_*lin 9 linux performance linux-networking

我有一个用作文件服务器的 Linux 机器。我有一个每月的 cron 作业,它对数据驱动器的内容进行压缩,然后通过 scp 将其复制到另一台机器以安全保存。生成的 tarball 大小约为 300GB,完成复制通常需要大约一天半的时间(通过 802.11g Wi-Fi 连接)。

今天我注意到我的备份工作还没有完成,它已经运行了 3 天。检查目标机器,我可以看到到目前为止只有大约三分之一的数据被复制,而且它似乎以 < 300KB/秒的速度增长。

iperf在两台机器之间使用,我可以看到我的网络吞吐量约为 20Mbits/sec,这与我对 802.11g 连接的期望值差不多。

dd if=srcfile of=/dev/null在源计算机上使用时,我可以从源驱动器(外部 USB 驱动器)读取大约 45MB/秒的数据。

使用dd if=/dev/zero of=/destdrive/tmp.dat在目标计算机上,我可以写30MB /秒到目标驱动器(内部SATA驱动器)。对于 SATA 驱动器来说,似乎有点慢,但也不算慢(当然也不是 300KB/秒慢)。

所以我似乎已经排除了网络吞吐量和两端的驱动吞吐量,那么我还能在哪里寻找瓶颈的来源?

小智 9

为什么您首先使用scp复制大文件?scp有自己的开销(加密、真实性检查等)。

您可以使用rsync(rsync 非常适合通过 ssh 传输大文件,因为它能够继续由于某种原因中断的传输。由于它使用哈希函数来检测相等的文件块,因此继续功能非常强大。)或一些其他工具。

请看这个帖子。通过网络复制大文件,速度更快

如果您无论如何要使用scp,那么你应该使用traceroutetcpdumpiftop看到来自源的信息包到目的地。也许你会发现一些不寻常的东西。