我正在切换托管服务提供商,需要将数百万个上传的文件传输到新服务器。所有文件都在同一目录中。是。你读得正确。 ;)
过去我做过这个:
scp
拉链到新服务器我最后一次这样做需要大约4-5天才能完成,这大约是我现在的60%。
我希望有更好的方法。你有什么建议?
文件结构经过哈希处理。这样的事情:AAAAAAAAAA.jpg
- ZZZZZZZZZZ.txt
这是我们正在折腾的一个想法:
根据3个字母前缀将拉链分成数吨迷你拉链。类似的东西:
AAAAAAAAAA.jpg - AAAZZZZZZZ.gif => AAA.zip
理论优点:
理论缺点:
AAA*
)查找文件,或许可以使用所有CPU而不是仅使用一个来一次运行多个zip线程来抵消。我们还考虑过rsync和scp,但担心手动传输每个文件的费用。由于远程服务器是空的,我不需要担心已经存在的东西。
你怎么看?你会怎么做?(是的,我最终会将这些内容转移到Amazon S3上,我只会发送一个磁盘,但与此同时,我昨天需要它们!)
答案 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。