通过 ssh 复制服务器上文件的最佳方法是什么?
就我而言:我正在谈论复制 magento 商店。(15000 个文件〜50MB)
cp -a source destination
需要几个小时...(我的情况是服务器是 2.4 Xeon,2GB RAM)
答案1
一个词:rsync
。
请注意,如果您的链接速度很慢,或者服务器负载很重,则用于复制的工具不会成为瓶颈,并且任何复制方式都会很慢。
这应该为您提供在本地计算机和远程服务器之间进行复制的基本用法:http://oreilly.com/pub/h/38
要从本地计算机复制到远程服务器(当然,您需要替换路径、用户名和主机地址):
rsync -avz -e ssh /path/on/local/computer [email protected]:/path/on/server
-a
档案-v
冗长-z
压缩-e ssh
“使用 SSH 隧道”
要向另一个方向复制,请切换路径(第一个是从,第二是到):
rsync -avz -e ssh [email protected]:/path/on/server /path/on/local/computer
但 rsync 甚至对于在同一台服务器上复制内容也很有用:
rsync -av /path-to/copy/from /path_to/copy/to
答案2
另一个词:scp
scp /path/on/local/computer [email protected]:/path/on/server
对于一次性交易,scp 很方便。如果文件很多,那么 rsync 是个好主意。如果连接断开,rsync 可以从中断的地方继续。
我知道 rsync 具有压缩功能(-z
),并且刚刚了解到 scp 也有压缩功能(-C
)。
答案3
在您的设置中,rsync 可能就足够了……但例如,如果有许多小文件,则先将文件打包成 tar 可能比通过 rsync 传输更快。这是因为如果文件较小,则传输所有者、时间戳、权限有时比传输文件本身更麻烦。Tar 会将所有信息合并到一个文件中,而 rsync 会复制更大的块。
或者更好的是,如果不需要安全性,请使用 tar 和 nc:
在目的地,准备一个接收守护进程,解压缩并解压:
nc -l -p 12345 | pigz -d | tar xvf -
在源端,将所有内容打包成 tar,并行压缩并发送到目标端:
tar cvf - ./ | pigz | nc host 12345