在两台服务器之间传输数千个文件的最佳 Linux 工具

在两台服务器之间传输数千个文件的最佳 Linux 工具

如果您认为它是重复的...好吧,我还没有找到令人满意的答案:/

我必须将文件夹从一台服务器迁移到另一台服务器。我个人会使用 rsync,但问题是...这个文件夹包含大文件(> 5gb)和许多小文件(超过 1k <30kb 的文件)。

我想避免因大量小文件传输而造成的瓶颈。

rsync 是执行此操作的正确工具吗?或者有更好的解决方案?

SCP 甚至更慢,以防有人建议它。

答案1

如果这是一次性传输,rsync 就不是适合该工作的工具。

我的做法是将文件打包成 tar 文件(并根据需要进行压缩,具体取决于服务器的特性和它们之间的连接),然后通过 SSH 将其传输到新服务器上并解压。这可以在 1 个命令中完成。您需要根据具体情况进行更改,但它看起来应该类似于:

tar -cz /startdir | pv | ssh user@ip "cd /destpath; tar -xf" 

这会将文件压缩为单个流,这样就无需为每个文件来回传输很多文件,从而为您提供最大的速度。它还会在一个步骤中完成压缩、传输和解压,因此可以最大限度地减少总时间。

详细解释一下它的工作原理:

tar 将文件压缩/解压为 stdout 上的流(因为未指定文件名)。-c 表示创建,z 表示压缩。如果不需要压缩,可以省略 z。

pv 位不是必需的,但它提供了数据正在传输的反馈,以及压缩数据的传输速率。ssh 命令当然会创建与远程端的连接,并将前面命令的输出提供给它。然后它跳转到相应的目录并对其进行解压缩。

答案2

find ... -size小于tar给定大小的文件合并为一个大文件,然后rsync .... --min-size仅用于传输大于给定大小的文件。

相关内容