如何有效地将许多文件移动到新服务器?

Rya*_*yan 5 linux zip gzip tar

我正在切换托管服务提供商,需要将数百万个上传的文件传输到新服务器.所有文件都在同一目录中.是.你读得正确.;)

过去我做过这个:

  1. 压缩源服务器中的所有文件
  2. scp zip到新服务器
  3. 拉开拉链
  4. 将目录移动到适当的位置
    • 无论出于何种原因,我从第1步开始的拉链总是带着它们的路径,并要求我mv.

我最后一次这样做需要大约4-5天才能完成,这大约是我现在拥有的60%.

我希望有更好的方法.你有什么建议?

文件结构经过哈希处理.像这样:AAAAAAAAAA.jpg-ZZZZZZZZZZ.txt

这是我们正在折腾的一个想法:

根据3个字母前缀将拉链分成数吨迷你拉链.就像是:

AAAAAAAAAA.jpg - AAAZZZZZZZ.gif => AAA.zip
Run Code Online (Sandbox Code Playgroud)

理论优势:

  • 可以加快转移,允许多个拉链一次转移
  • 可以限制转移失败所浪费的时间.(等待2天转移到最终失败是可怕的)

理论缺点:

  • 由于zip必须通过通配符(AAA*)查找文件,可能会通过运行多个zip线程,使用所有CPU而不是仅使用一个来抵消,从而大大减慢了初始zip的速度.
  • 复杂?

我们还考虑过rsync和scp,但担心手动传输每个文件的费用.由于远程服务器是空的,我不需要担心已经存在的东西.

你怎么看?你会怎么做?

(是的,我最终会把它们移到亚马逊S3上,我会把它们装到一个磁盘上,但与此同时,我昨天需要它们!)

Mat*_*ark 10

你实际上有多个选项,我最喜欢的是rsync.

rsync [dir1] [dir2]
Run Code Online (Sandbox Code Playgroud)

此命令实际上将比较目录,并仅同步它们之间的差异.

有了这个,我最喜欢使用以下内容

rsync -z -e ssh user@example.com:/var/www/ /var/www/
Run Code Online (Sandbox Code Playgroud)

-z Zip
-e Shell命令

您也可以通过SSH使用SFTP,FTP.

甚至wget.

wget -rc ssh://user@example.com:/var/www/
Run Code Online (Sandbox Code Playgroud)