所以情况就是这样。
我有大约2万个maildir电子邮件帐户,在我们的电子邮件服务器上咀嚼几百GB的空间。 天生就是Maildir保存着成千上万个小文件,而不是一个.mbox文件或类似文件。
所以我需要将所有这些数百万个文件从一台服务器迁移到另一台服务器,无论是空间还是生命周期的原因。
传统的方法,我会使用所有的工作就好了。 rsync是立即想到的选项,但是我想看看是否有任何其他“更好”的选项。
在这种情况下,Rsync不处理multithreading传输很糟糕,因为它实际上并没有达到速度并使我的networking连接饱和,因为从一台服务器到另一台服务器的传输需要数小时甚至更长的时间,一个或两个。
我知道这是高度自以为是主观的,因此将被标记为社区维基。
考虑像这样一个焦油pipe:
tar cf - . | ssh remote "cd /backup; tar xf -"
我也会看bbcp。 我意识到关于bbcp的页面是巨大的和令人困惑的,但花时间阅读它是因为我觉得它可能是最好的解决scheme。
http://www.slac.stanford.edu/~abh/bbcp/
我已经在各种networking上进行了bbcp传输,发现使用正确的线程设置,通常可以使任何networking饱和。
仔细考虑一下你正在使用的文件系统,因为ext3很可能对很多小文件来说效率很低。 我将使用XFS。
根据您的服务要求,您可能还需要考虑使用nginx的IMAP代理和imapsync的组合。
dynamic代理IMAP请求(使用身份validation查找来确定用户应连接到哪个后端服务器)。 用imapsync迭代你的用户列表。 一旦用户已经迁移到新的服务器,locking帐户,运行最后的同步,并更新某个地方的logging,所以auth查找返回新的服务器。
这样您就不会为最终用户生成可见的中断。
imapsync在增量同步方面也很聪明。
我已经完成了将用户从Courier迁移到Cyrus以及邮件存储后端的过程。