情况是这样的。
我有大约 20,000 个 maildir 电子邮件帐户,占用了我们电子邮件服务器上数百 GB 的空间。Maildir 本质上保存了数千个微小的文件,而不是一个 .mbox 文件或类似的文件……
因此,出于空间和生命周期的原因,我需要将这数百万个文件从一台服务器迁移到另一台服务器。
我使用的传统方法都可以正常工作。rsync 是我立即想到的选项,但是我想看看是否还有其他“更好”的选项。
在这种情况下,Rsync 不处理多线程传输,这很糟糕,因为它实际上从未加速并使我的网络连接饱和,因此从一台服务器到另一台服务器的传输将花费数小时,而实际上不应该超过一两个小时。
我知道这是非常主观和主观的,因此将被标记为社区维基。
答案1
考虑像这样的 tar 管道:
tar cf - . | ssh remote "cd /backup; tar xf -"
我也会查看 bbcp。我知道关于 bbcp 的页面很长而且很混乱,但请花点时间阅读它,因为我觉得这可能是这里最好的解决方案。
http://www.slac.stanford.edu/~abh/bbcp/
我已经在各种网络上完成了 bbcp 传输,发现使用正确的线程设置通常可以使任何网络饱和。
仔细考虑你使用的文件系统,因为 ext3 对于大量小文件来说可能效率很低。我会使用 XFS。
答案2
根据您的服务需求,您可能还需要考虑使用 nginx 的 IMAP 代理和 imapsync 的组合。
动态代理 IMAP 请求(使用身份验证查找来确定用户应连接到哪个后端服务器)。使用 imapsync 遍历您的用户列表。一旦用户迁移到新服务器,锁定帐户,运行最终同步,并在某处更新记录,以便身份验证查找返回新服务器。
这样,最终用户就不会看到任何中断。
imapsync 在增量同步方面也相当巧妙。
我这样做是为了将用户从 Courier 迁移到 Cyrus,并在邮件存储后端之间进行迁移。