Итак, вот ситуация.
У меня около 20 000 учетных записей электронной почты maildir, занимающих несколько сотен ГБ места на нашем почтовом сервере. Maildir по своей природе хранит тысячи крошечных файлов, а не один файл .mbox или тому подобное ...
Поэтому мне нужно перенести все эти несколько миллионов файлов с одного сервера на другой как по причинам, связанным с пространством, так и по причинам жизненного цикла.
обычные методы, которые я бы использовал, работают нормально. rsync - это вариант, который сразу приходит на ум, однако я хотел посмотреть, есть ли другие «лучшие» варианты.
Rsync не обрабатывает многопоточные передачи в этой ситуации отстой, потому что на самом деле он никогда не набирает скорость и насыщает мое сетевое соединение, из-за этого передача с одного сервера на другой займет часы сверх часов, хотя на самом деле это не должно занимать больше, чем один или два.
Я знаю, что это очень самоуверенный и субъективный подход и поэтому будет отмечен вики сообщества.
рассмотрим смоляную трубку, подобную этой:
tar cf - . | ssh remote "cd /backup; tar xf -"
Я бы тоже посмотрел на bbcp. Я понимаю, что страница о bbcp огромна и запутана, но найдите время, чтобы прочитать ее, потому что я считаю, что это, вероятно, лучшее решение здесь.
http://www.slac.stanford.edu/~abh/bbcp/
Я выполнял передачи bbcp в различных сетях и обнаружил, что с правильными настройками потоков вы можете нормально заполнить любую сеть.
Тщательно подумайте о файловой системе, которую вы используете, поскольку ext3, вероятно, будет очень неэффективен для большого количества небольших файлов. Я бы использовал XFS.
В зависимости от требований к вашему сервису вы также можете рассмотреть возможность использования комбинации проксирования IMAP и imapsync в nginx.
Прокси-сервер для запросов IMAP динамически (используя поиск аутентификации, чтобы определить, к какому внутреннему серверу следует подключиться пользователю). Перебирайте список пользователей с помощью imapsync. После того, как пользователь перешел на новый сервер, заблокируйте учетную запись, запустите последнюю синхронизацию и обновите запись где-нибудь, чтобы поиск аутентификации вернул новый сервер.
Таким образом, вы не создадите видимых сбоев для конечного пользователя.
imapsync также довольно умен в том, как он выполняет инкрементную синхронизацию.
Я сделал это для миграции пользователей с Courier на Cyrus, а также между серверными модулями почтового хранилища.