如何将文件从一台服务器复制到另一台服务器而无需先下载?

如何将文件从一台服务器复制到另一台服务器而无需先下载?

是否可以将文件从一台服务器复制到另一台服务器而无需先下载?

我有一个 10gb 的备份文件,我想将其从生产服务器复制到暂存服务器。

目前我只是通过 Transmit 来进行此操作,但它会先下载文件,然后上传。

有没有办法将文件从生产服务器直接移动到暂存服务器? SCP 会这样做吗?还是先下载? rsync 怎么样?

编辑

两者都是运行 Ubuntu 14.04 LTS 的 Linux 服务器。

答案1

我假设这些都是 Linux 服务器,正如您提到的 scp(是的,我知道 Windows 上有 scp)。

只需 ssh 连接到其中一台服务器,然后将文件直接 scp 到另一台服务器。

scp file user@server:/location/

事实上,如果你的 scp 版本支持它(我没有用过不支持的版本,但是在线手册页似乎没有记录这个功能),你可以使用-3它将通过本地主机在两个主机之间移动文件。

scp -3 file user@server:/location/

将要使用本地系统带宽,但不会在本地“保存”文件的副本。

您也可以使用 rsync 来实现相同的功能,但是命令略有不同,而且我对此还不够熟悉。

答案2

嗯......听起来,也许其中一个系统在某种程度上受到限制,或者时间是一个因素。简而言之:SCP 非常适合一次性复制,但有一些注意事项。我假设这里涉及 3 台服务器:服务器 A 是目的地,服务器 B 是具有文件的远程位置,服务器 C 是要运行复制操作的机器(C 代表复制)。我会在服务器 B 上对文件进行校验,然后 scp 将复制该文件,如果您使用 -3,它将是一个快速的、无需检查的复制。然后,我会在复制后循环计算服务器 A 上的文件的校验和,并将其与服务器 B 的校验和进行比较。如果它们匹配,则大功告成,关闭循环;如果不匹配,则再次运行复制和校验。如果您只是使用带有默认选项的 SCP,则文件将缓存在服务器 C 上,然后复制到服务器 A。这可以防止传输中出现问题,并允许其他网络流量。如果您想要模仿这一点,但可能想要更快一点,您可以使用 -3 标志更改第一个示例,而是将文件复制到服务器 C,然后将文件复制到服务器 A,使用校验和比较检查服务器 A 上的文件与服务器 B 上的文件(如有必要,可以重复复制)。这是一个类似的操作,但允许您最后从服务器 C 中删除文件,这样就没有等待释放的缓存开销。我不喜欢释放缓存资源,尤其是在活跃的生产环境中。一个错误会造成很大的混乱。我喜欢一个更简单的选项,其中可以直接访问文件,这样我就可以从自己的脚本中删除它。我对一些更高级的控件也不太熟悉。我希望这会有所帮助。

相关内容