我正在通过我的千兆 LAN 传输大约 9TB。为了尽快(我希望)这样做,我通过 NFS 在源上安装了目标,并在其上运行 rsync。
这是我的安装选项:
x.x.x.x:/mnt on /mnt type nfs (rw,noatime,nodiratime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=x.x.x.x,mountvers=3,mountport=56548,mountproto=udp,local_lock=none,addr=x.x.x.x)
这是我的 rsync 命令: rsync -avWH --progress ./ /mnt/
看看 nload,我所看到的,对于单个文件,速度会飙升至 900MBps,然后下降到 KBps 范围内的数字,然后再备份。这是来自 nload 的图形,您可以在其中看到传输似乎停止了,midfile。这些文件的大小通常为 5-6GB。MTU为9000;交换机是具有足够背板速度的 cisco 3750x。这些是的ESXi 6.7客人在2台不同的主机上。没有其他来宾争用网络资源。
此图像是正在发送的一个文件
基本上,我希望有一个我有错误的设置,或者我可以改变一些东西以保持传输速度有些一致。
源上的 CPU 利用率约为 10%,目标上的 CPU 利用率约为 10%。奇怪的是,在目的地,iotop 显示来自 nfsd 的 99% i/o(有时),源显示来自 rsync 的 60-80% IO。这些是 7200RPM WD 红色驱动器。瓦
不幸的是,您能做的最糟糕的事情就是rsync
跨 NFS使用。(或安装到本地系统的任何远程文件系统。)这会关闭几乎所有已知的效率增强rsync
。
对于这么多数据,在系统之间传输数据的最快方法之一可能是通过未加密的连接将其转储,而不考虑目标系统上已有的数据。
一旦您至少拥有部分副本,最好的选择是rsync
在两个主机之间使用。这允许rsync
在每台主机上运行一个进程来考虑和比较差异。(这rsync
将完全跳过具有相同大小和修改日期的文件。对于其他文件,客户端和服务器组件将执行滚动校验和以确定哪些块仍需要传输。)
快速转储。此示例根本不使用身份验证或加密。但是,它确实应用了压缩,您可以通过省略这两个-z
标志来删除它:
在目标机器上运行这个来启动一个监听服务器:
cd /path/to/destination && nc -l 50505 | pax -zrv -pe
Run Code Online (Sandbox Code Playgroud)
在源计算机上运行此命令以启动发送客户端:
cd /path/to/source && pax -wz . | nc destination_server 50505
Run Code Online (Sandbox Code Playgroud)
的某些版本nc -l
可能需要使用标志指定端口,即nc -l -p 50505
. Debian 上的 OpenBSD 版本(nc.openbsd
,通过 链接/etc/alternatives
到/bin/nc
)没有。
传输速度较慢。此示例使用rsync
over ssh
,它提供身份验证和加密。不要错过/
源路径上的尾部斜杠 ( )。-z
如果您不想压缩,请省略该标志:
rsync -avzP /path/to/source/ destination_server:/path/to/destination
Run Code Online (Sandbox Code Playgroud)您可能需要设置 SSH 证书以允许以 root 身份登录到 destination_server。-H
如果您需要处理硬链接,请添加该标志。
如果可能,最好在两台主机之间直接使用 rsync。请记住,rsync 旨在以增加磁盘 IO 为代价来优化网络 IO;在 NFS 文件系统上使用 rsync 时,磁盘 IO 会转换为网络 IO,因此这是一个非常次优的解决方案。此外,如果 rsync 认为源和目标都是本地的,它将关闭优化并每次传输完整文件,而不是使用仅发送差异的差分算法。
假设您有一个 5GB 的文件,在源和目标之间只有 1% 的数据不同。
如果您可以将 rsync 直接用于为 NFS 文件系统提供服务的主机,那么这样做,您将看到性能的巨大提升。