我怎样才能有效地将许多文件移动到新的服务器?

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

在过去,我已经这样做了:

  1. 从源服务器上压缩所有的文件
  2. 将邮政编码到新的服务器
  3. 拉开拉链
  4. 将目录移动到适当的位置
    • 无论出于何种原因,我从第1步开始的拉链总是带着他们的path,并要求我mv。

我最后一次完成这个工作大约需要4-5天才能完成,大约是现在的60%。

我希望有一个更好的方法。 你有什么build议?

文件结构被哈希。 像这样的东西: AAAAAAAAAA.jpgZZZZZZZZZZ.txt

这里有一个想法,我们正在折腾:

根据3个字母的前缀将拉链分成多个微型拉链。 就像是:

 AAAAAAAAAA.jpg - AAAZZZZZZZ.gif => AAA.zip 

理论优点:

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

理论缺点:

  • 可能会使初始zip变慢,因为zip必须通过通配符( AAA* )查找文件,或许可以通过使用所有CPU而不是一个CPU来同时运行多个zip线程来抵消。
  • 复杂?

我们也考虑过rsync和scp,但是担心手动传输每个文件的费用。 而由于远程服务器是空的,我不需要担心已经有什么。

你怎么看? 你会怎么做?

(是的,我最终会把它们转移到Amazon S3上,我只是把它们放在一个磁盘上,但同时我昨天也需要它们)

Solutions Collecting From Web of "我怎样才能有效地将许多文件移动到新的服务器?"

你实际上有多个选项,我最喜欢使用rsync

 rsync [dir1] [dir2] 

这个命令实际上会比较目录,并且只同步它们之间的差异。

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

 rsync -z -e ssh user@example.com:/var/www/ /var/www/ 

-z邮编
-e Shell命令

你也可以通过SSH使用SFTP,FTP。

甚至wget

 wget -rc ssh://user@example.com:/var/www/ 

我来自Linux / Unix世界。 我会用tar来创建一个设定大小的tar文件。 例如:

 tar -cML $MAXIMUM_FILE_SIZE_IN_KILOBYTES --file=${FILENAME}}_{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}{0,1,2,3,4,5,6,7,8,9}.tar ${THE_FILES} 

除非你的.txt文件很大,否则我会跳过重新压缩。 你不会得到很多重新压缩.jpeg文件的里程,它会吃掉很多的CPU(和真实的)时间。

我会研究你的流量整形如何工作。 你可以有多少个并发连接? 每个连接有多少带宽? 总共多少钱?

我用scp看过一些有趣的东西。 测试一个家庭网络, scp的吞吐量远远低于复制挂载的共享smbfs文件系统的吞吐量。 我不完全清楚为什么。 虽然这可能是可取的,如果scp正在验证副本并请求重发错误。 (在因特网上传输的数据包中出现错误的概率非常小,如果没有某种后续的验证阶段,这对大数据集来说是一个真正的问题,您可能想要运行md5散列…)

如果这是一个网络服务器,你总是可以使用wget。 虽然这似乎非常低效…

怎么使用BitTorrent? 它可能不是那么容易设置,但一旦你有它去,它应该做你想要的。 BitTorrent的开发是为了方便传输大文件。 您将需要一台客户端在源机器上,并在目标机器上。 在源机器上创建图元文件。 将其复制到目标机器,并将其加载到BitTorrent客户机中。 手动输入IP到源机器。 只要你没有防火墙阻止你,转移应该开始。 或者,您可以先压缩所有文件,然后使用不压缩(也称为STORED)压缩,然后使用BitTorrent传输压缩文件。