Мы рассмотрим универсальный способ переноса данных Zimbra со старого сервера на новый. По сути, данная инструкция является рерайтом другой инструкции Перенос данных между различными версиями Zimbra безопасно и без простоя. Но для упрощения восприятия и использования в качестве шпаргалки, упускаются детали.
Предполагается, что у нас уже есть почтовый сервер Zimbra на новом сервере. В противном случае можно воспользоваться другой инструкцией Установка и настройка Zimbra на Linux.
На новом и старом серверах создаем каталог, в который будут складываться файлы для импорта и экспорта:
mkdir -p /backup/zimbra
Выдадим разрешающие права на созданную папку для пользователя zimbra:
chown -R zimbra:zimbra /backup/zimbra
На старом сервере входим под пользователем zimbra:
su – zimbra
Переходим в созданный ранее каталог:
cd /backup/zimbra
Можно приступать к экспорту.
Сначала мы перенесем информацию о доменах, пользователях, группах рассылки и псевдонимах. Эти данные экспортируются и импортируются, относительно, быстро.
Начнем с экспорта — выполняем команды на старом (текущем сервере).
1. Домены:
zmprov gad | tee -a domains.txt
Проверяем:
cat domains.txt
2. Учетные записи администраторов:
zmprov gaaa | tee -a admins.txt
3. Учетные записи пользователей:
zmprov -l gaa | tee -a users.txt
4. Настройки пользователей:
mkdir users_settings
for user in `cat users.txt`; do zmprov ga $user | grep -i Name: | tee -a users_settings/$user.txt ; done
* операция может занять некоторое время.
5. Пароли:
mkdir passwords
for user in `cat users.txt`; do zmprov -l ga $user userPassword | grep userPassword: | awk ‘{ print $2}’ | tee -a passwords/$user.shadow; done
6. Группы рассылки:
zmprov gadl | tee -a distribution_lists.txt
И список адресов, которые входят в группы рассылки:
mkdir distribution_lists
for list in `cat distribution_lists.txt`; do zmprov gdlm $list > distribution_lists/$list.txt ; echo “$list”; done
7. Псевдонимы:
mkdir aliases
for user in `cat users.txt`; do zmprov ga $user | grep zimbraMailAlias | awk ‘{print $2}’ | tee -a aliases/$user.txt ; echo $i ; done
Удалим пустые файлы с алиасами (для записей которых нет псевдонимов):
find aliases/ -type f -empty | xargs -n1 rm -v
Готово. Мы выполнили импорт всех нужных нам список. Мы должны получить следующий список файлов:
[[email protected] zimbra]$ lltotal 24-rw-r—– 1 zimbra zimbra 52 Jun 12 09:31 admins.txtdrwxr-x— 2 zimbra zimbra 151 Jun 12 10:46 aliasesdrwxr-x— 2 zimbra zimbra 264 Jun 12 10:35 distribution_lists-rw-r—– 1 zimbra zimbra 170 Jun 12 10:22 distribution_lists.txt-rw-r—– 1 zimbra zimbra 69 Jun 12 09:28 domains.txtdrwxr-x— 2 zimbra zimbra 4096 Jun 12 09:51 passwords-rw-r—– 1 zimbra zimbra 878 Jun 12 09:34 users.txtdrwxr-x— 2 zimbra zimbra 4096 Jun 12 09:43 users_settings
Приступаем к переносу данных и импорту.
Перенесем полученные файлы на новый сервер. Для этого есть несколько способов, например, с помощью WinSCP. Мы же просто перенесем данные командой rsync или scp — рассмотрим оба примера.
а) с помощью rsync:
rsync -a -e ‘ssh -p <SSH-порт>’ /backup/zimbra <учетная запись на новом сервере>@<IP-адрес нового сервера>:/tmp/
Например:
rsync -a -e ‘ssh -p 22’ /backup/zimbra [email protected]:/tmp/
б) с помощью scp:
scp -r -P <SSH-порт> /backup/zimbra <учетная запись на новом сервере>@<IP-адрес нового сервера>:/tmp/
scp -r -P 22 /backup/zimbra [email protected]:/tmp/
После того, как мы перенесли файлы в каталог /tmp на новом сервере, подключаемся к последнему и переносим эти файлы в каталог /backup:
mv /tmp/zimbra/ /backup/
Задаем нужные права на перенесенные файлы:
Заходим под учетной записью zimbra:
Переходим в каталог:
Экспортируем системную переменную:
export LC_ALL=ru_RU.UTF-8
* это необходимо для корректного отображения символов на кириллице.
Переходим, непосредственно, к импорту.
Выполним обратные операции на новом сервере, которые приведут к созданию необходимых нам данных и настроек. После каждой операции рекомендуется заходить на веб-интерфейс почтовой системы и проверять перенос.
for domain in `cat domains.txt` ; do zmprov cd $domain zimbraAuthMech zimbra ; echo $domain ; done
2. Учетные записи, их настройки и пароли.
Процесс выполняется с помощью скрипта. Создадим его:
vi restore_accounts.sh
PASSWDS=”passwords”ACCOUNT_DETAILS=”users_settings”
for i in `cat users.txt` do givenName=$(grep givenName: $ACCOUNT_DETAILS/$i.txt | cut -d “:” -f2) displayName=$(grep displayName: $ACCOUNT_DETAILS/$i.txt | cut -d “:” -f2) shadowpass=$(cat $PASSWDS/$i.shadow) zmprov ca $i “TeMpPa55^()” cn “$givenName” displayName “$displayName” givenName “$givenName” zmprov ma $i userPassword “$shadowpass”done
И запускаем его на выполнение:
bash ./restore_accounts.sh
3. Списки рассылки:
for lists in `cat distribution_lists.txt`; do zmprov cdl $lists ; echo “$lists — done ” ; done
… и их содержимое, но для этого создадим скрипт:
vi restore_dist_lists.sh
for list in `cat distribution_lists.txt`do for mbmr in `grep -v ‘#’ distribution_lists/$list.txt | grep ‘@’` do zmprov adlm $list $mbmr echo ” $mbmr has been added to $list” donedone
Запускаем его на выполнение:
bash ./restore_dist_lists.sh
4. Псевдонимы.
Создаем скрипт:
vi restore_aliases.sh
echo “Processing User accounts”for user in `cat users.txt`do echo $user if [ -f “aliases/$user.txt” ]; then for alias in `grep ‘@’ aliases/$user.txt` do zmprov aaa $user $alias echo “$user ALIAS $alias – Restored” done fidoneecho “Processing Admin accounts”for user in `cat admins.txt`do echo $user if [ -f “aliases/$user.txt” ]; then for alias in `grep ‘@’ aliases/$user.txt` do zmprov aaa $user $alias echo “$user ALIAS $alias – Restored” done fidone
Запускаем его:
bash restore_aliases.sh
Со структурой разобрались. Идем дальше.
Теперь переходим к переносу самого главного, а именно почтовых сообщений. Также мы перенесем пользовательские фильтры.
Данную операции стоит уже делать после полного перехода на новый сервере (как правило, после смены записей MX и перевода пользователей на использование нового сервера.
На старом сервере выполним экспорт. По своему принципу, действия одинаковые, как мы выполняли выше. Также напомню, что мы должны зайти под пользователем zimbra и перейти в наш рабочий каталог:
1. Почта.
Создаем каталог, где будут размещены наши файлы с выгруженной почтой:
mkdir mailbox_data
Запускаем команду:
for user in `cat users.txt`; do echo “Exporting mailbox $user” ; zmmailbox -z -m $user getRestURL ‘/?fmt=tgz’ > mailbox_data/$user.tgz ; done
Данная операция может выполняться долго. Это зависит от объема почтовых сообщений.
2. Фильтры.
Создаем каталог:
mkdir filters
vi export_filters.sh
mkdir tmpset -xclearfor user in `cat users.txt`; do filter=`zmprov ga $user zimbraMailSieveScript > ./tmp/$user` sed -i -e “1d” ./tmp/$user sed ‘s/zimbraMailSieveScript: //g’ ./tmp/$user > filters/$user; rm ./tmp/$user echo “Export filter for $user”donerm -rf tmp
И выполняем его:
bash ./export_filters.sh
В каталоге filters мы получим файлы с пользовательскими правилами.
Теперь нам нужно перенести полученные данные на новый сервер. Это будут два каталога:
Для этого мы можем воспользоваться вышеописанными командами rsync или scp, например:
rsync -a -e ‘ssh -p 22’ /backup/zimbra/mailbox_data /backup/zimbra/filters [email protected]:/tmp/
… или
scp -r -P 22 /backup/zimbra/mailbox_data /backup/zimbra/filters [email protected]:/tmp/
После чего на новом сервере перенесем каталоги из /tmp в рабочую директорию:
mv /tmp/mailbox_data /tmp/filters /backup/zimbra/
Задаем права:
Переходим на новый сервер. Заходим под пользователем zimbra в рабочий каталог:
Мы готовы к импорту.
1. Почта:
for mailbox in `cat users.txt`; do zmmailbox -z -m $mailbox postRestURL “/?fmt=tgz&resolve=skip” mailbox_data/$mailbox.tgz ; echo “$mailbox – done “; done
* операция займет много времени, особенно, для больших почтовых ящиков.
Для импорта фильтров нужно создать скрипт:
vi import_filters.sh
for filter in filters/*do Filter_String=`cat “$filter”` Account=$filter zmprov ma $(echo $filter | grep -E -o “b[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+.[A-Za-z]{2,6}b”) zimbraMailSieveScript “$Filter_String” echo “Process filter $Account”doneecho “All filter has been import successfully”
И запускаем его командой:
bash import_filters.sh
Собственно, импорт данных выполнен.
После переноса учетных записей, они создаются как пользователи с обычными правами. В начале нашей выгрузки мы создали файл admins.txt. Смотрим его содержимое:
cat admins.txt
И веб-панели управления zimbra переходим в Управление – Учетные записи. Кликаем дважды по нужным учетным записям, которые должны иметь права администратора, ставим галочку Глобальный администратор и нажимаем Сохранить.
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies