5

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

过去我这样做过:

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

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

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

文件结构是散列的。像这样的东西:AAAAAAAAAA.jpg-ZZZZZZZZZZ.txt

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

根据 3 个字母前缀将拉链分成大量的迷你拉链。就像是:

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

理论优点:

  • 可以加快传输速度,允许同时传输多个 zip
  • 可以限制因传输失败而损失的时间。(等待 2 天转移最终失败是可怕的)

理论缺点:

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

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

你怎么看?你会怎么做?

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

4

3 回答 3

9

你实际上有多种选择,我最喜欢的是使用rsync.

rsync [dir1] [dir2]

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

有了这个,我最有可能使用以下内容

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

-z 压缩
-e 外壳命令

您还可以通过 SSH 使用 SFTP、FTP。

甚至wget

wget -rc ssh://user@example.com:/var/www/
于 2012-11-04T05:07:04.103 回答
1

我来自 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。虽然这看起来效率很低……

于 2012-11-04T13:48:35.277 回答
0

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

于 2012-11-04T22:05:05.363 回答