如果您认为它是重复的...好吧,我还没有找到令人满意的答案:/
我必须将文件夹从一台服务器迁移到另一台服务器。我个人会使用 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
仅用于传输大于给定大小的文件。