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

时间:2012-11-04 05:01:39

标签: linux zip gzip tar

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

过去我做过这个:

  1. 压缩源服务器中的所有文件
  2. scp拉链到新服务器
  3. 解压
  4. 将目录移动到适当的位置
    • 无论出于什么原因,我从第1步开始的拉链总是随身携带路径,并要求我使用mv。
  5. 我最后一次这样做需要大约4-5天才能完成,这大约是我现在的60%。

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

    文件结构经过哈希处理。这样的事情:AAAAAAAAAA.jpg - ZZZZZZZZZZ.txt

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

    根据3个字母前缀将拉链分成数吨迷你拉链。类似的东西:

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

    理论优点:

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

    理论缺点:

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

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

    你怎么看?你会怎么做?

    (是的,我最终会将这些内容转移到Amazon S3上,我只会发送一个磁盘,但与此同时,我昨天需要它们!)

3 个答案:

答案 0 :(得分:10)

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

rsync [dir1] [dir2]

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

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

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

-z Zip
  -e Shell命令

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

甚至wget

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

答案 1 :(得分:1)

我来自Linux / Unix世界。我使用 tar 来制作一组tar文件。 E.g:

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。虽然这似乎非常低效......

答案 2 :(得分:0)

使用BitTorrent怎么样?它可能不那么容易设置,但是一旦你开始它它应该完全按照你想要的。开发BitTorrent是为了便于传输大文件。您需要源计算机上的客户端和目标计算机上的客户端。在源计算机上创建元文件。将其复制到目标计算机并将其加载到BitTorrent客户端。手动输入IP到源计算机。只要您没有防火墙阻止您,就应该开始转移。您可以选择首先使用无压缩(即STORED压缩)压缩所有文件,然后使用BitTorrent传输zip。