通过SSH复制包含许多文件的文件夹的最快方法


13

通过ssh在服务器上复制文件的最佳方法是什么?

就我而言:我在谈论复制magento商店。(15000个文件〜50MB)

cp -a source destination

需要几个小时...(在我的情况下,服务器为2.4 Xeon,2GB RAM)

Answers:


18

一个字:rsync

请注意,如果您使用的是慢速链接,或者服务器负载沉重,则用于复制的工具将不会成为瓶颈,并且任何复制方式都将变慢。

这将为您提供在本地计算机和远程服务器之间进行复制的基本用法:http : //oreilly.com/pub/h/38

要从本地计算机复制到远程服务器(当然,您需要替换路径,用户名和主机地址):

rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
  • -a 封存
  • -v 冗长的
  • -z 压缩
  • -e ssh “使用SSH隧道”

要向另一个方向复制,请切换路径(第一个是,第二个是):

rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer

但是rsync即使在同一服务器上复制内容也很有用:

rsync -av /path-to/copy/from /path_to/copy/to

2
请注意,@ Piskvor将该-z选项留给了本地复制,因为它增加了不必要的开销。恕我直言,仅-z在通过慢速网络链接使用rsync 时才应使用。如果在100Base-T上复制大量数据,则不带可能很好-z。借助快速的网络连接,使用压缩功能可能会导致CPU挂断,并使其他进程饿死。
tomlogic

@tomlogic:好点-换句话说,不要-z用于LAN复制或在一台机器内复制;测试是否-z可以在Internet上进行复制(一个或另一个可能更快,具体取决于许多因素)。
Piskvor在2012年

1
如果您知道文件已经被压缩,那么我也省去了压缩,例如,由于没有任何收获,因此同步充满JPEG的文件夹树。
换行

注意:-e ssh现在是远程主机的默认设置,因此无需显式传递该选项。
Piskvor

3

另一个词: scp

scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server

对于一次性交易,scp很方便。如果文件很多,那么rsync是个好主意。如果连接断开,rsync可以在中断的地方继续连接。

我知道rsync具有压缩(-z),并且刚刚了解到scp也具有压缩(-C)。


好吧,IIRC,它们都使用SSH的压缩算法,至少对于网络操作而言。
Piskvor于

0

在您的设置中,rsync可能就足够了...但是,例如,如果有很多小文件,先将文件tar压缩比通过rsync传输要快。这是因为如果文件很小,则传输所有者,时间戳,权限有时会比文件本身重。Tar会将所有这些信息合并到一个文件中,而rsync将复制更大的块。

甚至更好,如果不需要安全性,请使用tar和nc:

在目的地,准备接收守护程序,解压缩并解压缩:

nc -l -p 12345 | pigz -d | tar xvf - 

在源上,对所有内容进行tar处理,并行压缩并将其发送到目标:

tar cvf - ./ | pigz | nc host 12345
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.