Архивирование и восстановление почтового сервера Zimbra
К сожалению, в бесплатной версии Zimbra Collaboration Suite не существует встроенного механизма бекапа. Приходится доделывать самому. Поскольку установка сервера не представляет особой сложности, главное, что нужно архивировать это учетные записи пользователей и содержимое почтовых ящиков.
Кроме самих учетных записей почтовых ящиков и их содержимого, так же неплохо перенести альясы.
Для создания учетной записи из командной сроки в Zimbra используется следующая команда:
$ zmprov ca <почтовый_ящик> <пароль> парамерт1 "значение1" параметр2 "значение2" ... параметрN "значениеN"
Что бы точно узнать название параметра, зайдите в админку, откройте редактирование учетной записи и кликните мышкой на нужном вам параметре:
Перенос учетных записей почтовых ящиков
Выгрузка учетных записей
Создадим файл /root/tools/zmbackup_users.sh:
# mkdir /root/tools && chmod 660 /root/tools
# mcedit /root/tools/zmbackup_users.sh
#!/bin/bash
zmprov=/opt/zimbra/bin/zmprov
password=jJYdg3d7aisdhDwed # Временный пароль, установите свой, но сложный!
echo "#!/bin/bash";
echo "";
for mbox in `$zmprov -l gaa | egrep -v 'avir|galsync|spam|ham|virus'`; do
# Получаем параметры почтового ящика
cn=`$zmprov -l ga $mbox cn | grep cn: | sed 's/cn: //'`
givenName=`$zmprov -l ga $mbox givenName | grep givenName: | sed 's/givenName: //'`
displayName=`$zmprov -l ga $mbox displayName | grep displayName: | sed 's/displayName: //'`
zimbraPrefFromDisplay=`$zmprov -l ga $mbox zimbraPrefFromDisplay | grep zimbraPrefFromDisplay: | sed 's/zimbraPrefFromDisplay: //'`
zimbraAuthLdapExternalDn=`$zmprov -l ga $mbox zimbraAuthLdapExternalDn | grep zimbraAuthLdapExternalDn: | sed 's/zimbraAuthLdapExternalDn: //'`
userPassword=`$zmprov -l ga $mbox userPassword | grep userPassword | sed 's/userPassword: //'`
# Формируем строку для создания почтового ящика
echo "$zmprov ca $mbox $password userPassword \"$userPassword\" cn \"$cn\" displayName \"$displayName\" givenName \"$givenName\" zimbraPrefFromDisplay \"$zimbraPrefFromDisplay\" zimbraAuthLdapExternalDn \"$zimbraAuthLdapExternalDn\"";
# Получаем список альясов для почтового ящика
for alias in `$zmprov ga $mbox | grep zimbraMailAlias | sed 's/zimbraMailAlias: //'`; do
echo "$zmprov aaa $mbox $alias";
done
echo "";
done
Теперь если выполнить команду:
# /root/tools/zmbackup_users.sh > /opt/zimbra/backup/zmrestore_users.sh
Получим файл zmrestore_users.sh, который содержит команды для импорта почтовый учетных записей.
Загрузка учетных записей в Zimbra
Дайте права на запуск файла zmrestore_users.sh пользователю root и запустите файл, результатом выполнения будет список id учетных записей:
f856788b-ceb0-4d88-92de-1f8065bede1d
b32de718-6e1c-4a54-aca7-117c23de31e1
c7990605-ff7f-4005-8ad4-c2a742b88afa
...
Перенос содержимого почтовых ящиков
Кроме самих учетных записей нужно еще их содержимое. Для выгрузки содержимого почтового ящика в Zimbra используется утилита zmmailbox:
# /opt/zimbra/bin/zmmailbox -z -m user@example.com -t 0 getRestURL "//?fmt=tgz" > /tmp/user@example.com.tgz
Экспорт содержимого почтовых ящиков
Создадим файл zmbackup_mailboxes.sh:
# mcedit /root/tools/zmbackup_mailboxes.sh
#!/bin/bash
zmbox=/opt/zimbra/bin/zmmailbox
zmprov=/opt/zimbra/bin/zmprov
backup=/opt/zimbra/backup # Папка, куда выгружать архивы ящиков
echo "$(date +%T): -- Begin dump mailboxes -- ";
for mbox in `$zmprov -l gaa | egrep -v 'avir|galsync|spam|ham|virus'`; do
echo "$(date +%T): Begin dump $mbox";
$zmbox -z -m $mbox -t 0 getRestURL "//?fmt=tgz" > $backup/$mbox.tgz
echo "$(date +%T): End dump $mbox";
echo "";
done
echo "$(date +%T): -- End dump mailboxes -- ";
В результате выполнения в папке /opt/zimbra/backup появятся архивы почтовых ящиков.
Импорт содержимого почтовых ящиков
Для того чтобы загрузить содержимое (письма, календари, задачи) в существующие учетные записи, используется команда:
# /opt/zimbra/bin/zmmailbox -z -m user@example.com postRestURL "//?fmt=tgz&resolve=reset" /tmp/user@example.com.tgz
Создайте файл zmrestore_mailboxes.sh:
# mcedit /root/tools/zmrestore_mailboxes.sh
#!/bin/bash
zmbox=/opt/zimbra/bin/zmmailbox
zmprov=/opt/zimbra/bin/zmprov
backup=/opt/zimbra/backup # Папка, где хратся выгружанные архивы ящиков
echo "$(date +%T): -- Begin restore mailboxes -- ";
for mbox in `$zmprov -l gaa | egrep -v 'avir|galsync|spam|ham|virus'`; do
echo "$(date +%T): Begin restoring files from $mbox";
$zmbox -z -m $mbox -t 0 postRestURL "//?fmt=tgz&resolve=reset" $backup/$mbox.tgz
echo "$(date +%T): End restoring files from $mbox";
echo "";
done
echo "$(date +%T): -- End restore mailboxes -- ";
Данный скрипт загрузит содержимое архивов из папки /opt/zimbra/backup, в соответствующие учетные записи почты.
Таким образом, при помощи двух скриптов удалось без особых проблем перенести учетные записи на новый сервер.
Конечно, они переносят далеко не все параметры, если вам чего-то не хватает, добавьте нужные параметры в скрипт zmbackup_users.sh. Посмотреть название параметров можно как указано на рисунке в начале статьи.
Получить значения параметров можно командой:
# /opt/zimbra/bin/zmprov -l ga user@example.com
Перенос базы данных Policyd
Если вы активно используете плагин Policyd, будет жалко потерять его настройки, накопленную статистку и правила. Policyd хранит свои данные в базе sqlite3. Все что нужно это скопировать файл базы данных:
# su - zimbra -c "zmcbpolicydctl stop"
# cp /opt/zimbra/data/cbpolicyd/db/cbpolicyd.sqlitedb /opt/zimbra/backup/cbpolicyd.sqlitedb
# su - zimbra -c "zmcbpolicydctl start"
Для восстановления базы:
# su - zimbra -c "zmcbpolicydctl stop"
# cp /opt/zimbra/backup/cbpolicyd.sqlitedb /opt/zimbra/data/cbpolicyd/db/cbpolicyd.sqlitedb
# su - zimbra -c "zmcbpolicydctl start"