使用 rsync 从存储空间有限的服务器测试网络传输速度

使用 rsync 从存储空间有限的服务器测试网络传输速度

我想测试从服务器 A 到服务器 B 的传输速度,但服务器 A 的磁盘空间有限(<50GB),而且由于同一数据中心内的网络速度很快,因此传输 50 GB 可能太快而不能用作基准。服务器 B 的磁盘空间基本上是无限的。

有没有办法从服务器 A 传输“文件”(例如,作为服务器 A 无法容纳的大型数据流,例如 1 TB)以便我可以反复测试到服务器 B 的网络传输速度?


一种选择是从服务器 B 传输到服务器 A,并将文件直接放入/dev/null,虽然我还没有测试过这个,而且我更喜欢服务器 A 而不是 B,因为服务器 A 只有 ssh 密钥而服务器 B 允许通过密码进行 ssh。

答案1

要测试原始网络带宽,可以使用iperf(或iperf3)。您可以使用以下简单的方法:

  • 在服务器上:iperf -s
  • 在客户端中:iperf -c <server_ip>
  • 然后,反转服务器和客户端角色

为了测试rsync传输速率,它通常受 SSH 加密/解密速度的限制,您可以创建一个稀疏源文件并将其同步到远程端。稀疏文件是指名义大小比实际分配大小更大的文件。您可以通过命令创建它truncate

例如,truncate --size=1T src.img将创建一个 1 TB 大的文件,它实际上分配 0 字节(或最多一个 512/4K 块,取决于文件系统) - 即:

root@localhost:~# du -hs --apparent-size src.img
1.0T    src.img

root@localhost:~# du -hs src.img
0       src.img

root@localhost:~# stat src.img
  File: src.img
  Size: 1099511627776   Blocks: 0          IO Block: 4096   regular file

读取和传输此类文件时,除非使用支持稀疏文件复制的实用程序和/或压缩程序(如gzip)进行处理,否则文件将扩展为真实的标称大小。使用()和( )选项rsync时可以“重新压缩”此类文件,但如果您省略它们,它将很乐意传输和写入整个 1 TB 的数据。-S--sparse-z--compress

笔记: -z将在传输过程中取消零,同时-S在目标文件中将它们写入为空洞。

答案2

我会改用网络带宽监控工具,例如 iperf3。您可以在任何主机上运行它的服务器实例,然后从客户端决定要测量哪个方向的带宽。

在其中一台主机上将其用作服务器运行:

iperf3 --server

它将默认监听端口 5201/tcp,因此需要从其他主机允许。

在另一台机器上以最简单的形式测试 TCP 上的上行带宽:

iperf3 --client serveraddr

其中 serveraddr 是运行 iperf3 服务器的机器的 ip 地址(或主机名或 fqdn)。

要测试客户端的下行带宽,请执行以下操作:

iperf3 --client serveraddr --reverse

两个方向:

iperf3 --client serveraddr --bidir

iperf3 有大量选项可以调整应传输多少数据、使用哪种协议和端口等,并且您可以在服务器端对其进行“守护进程化”,以使其始终在后台监听客户端连接...man iperf3是您的朋友:-)

iperf3 是开源的,它在大多数发行版中都可用,并且还有可供下载的二进制文件,例如 Windows 和 MacOS

我发现它非常可靠(至少在 Linux 上),并且我一直使用它,不仅可以测量吞吐量,还可以查看哪里有数据包丢失等等。

这是主页: https://software.es.net/iperf/

相关内容