我在 Linux 服务器上有大量数据(300GB)。现在,我想通过 ssh 将其传输到另一台 Linux 服务器rsync
。当我传输数据时,它会在服务器中产生巨大的负载。我可以知道如何避免在通过 ssh 传输大量数据时服务器负载过大吗?
答案1
使用较弱的 ssh 密码(例如 arcfour),如下所示:
rsync -av source --rsh="ssh -c arcfour" foo@bar:/destination
可能还有更弱的密码,但我更喜欢 arcfour,因为它不是安全性和速度之间最好的平衡(就我而言,搜索密码基准,有很多)。
或者根本不使用 ssh,并在目标服务器上运行 rsync 守护程序。
答案2
我找到了解决方案,通过在 rsync 中包含 ionice 和 nice 命令来避免在远程和本地服务器之间传输文件时服务器中的负载
ionice - get/set program io scheduling class and priority
nice - run a program with modified scheduling priority
#rsync -r -az --rsync-path="ionice -c 3 nice rsync" -e "ssh -p 8363" username@ip-address:/source-file /destination
答案3
或者,如果你关心的是 CPU 负载,并且你拥有带有 AES 指令的现代 CPU(尽管从你的描述来看不太可能),那么你可以使用英特尔加速引擎。里面有README
关于如何设置的信息。可能还有一些与发行版相关的设置方法。
要查看您是否拥有“现代” CPU,请使用grep aes /proc/cpuinfo
。
答案4
你可以通过以下方式进行补充Rsync --whole-file
默认情况下,Rsync 在本地副本上只会复制整个文件,但为了减少网络流量,远程同步会有所不同,这大大增加了 CPU 负载。
rsync -av --whole-file -e ssh {source} {destination}