Архивирование и восстановление почтового сервера Zimbra

К сожалению, в бесплатной версии Zimbra Collaboration Suite не существует встроенного механизма бекапа. Приходится доделывать самому. Поскольку установка сервера не представляет особой сложности, главное, что нужно архивировать это учетные записи пользователей и содержимое почтовых ящиков.

Кроме самих учетных записей почтовых ящиков и их содержимого, так же неплохо перенести альясы.

Для создания учетной записи из командной сроки в Zimbra используется следующая команда:

$ zmprov ca <почтовый_ящик> <пароль> парамерт1 "значение1" параметр2 "значение2" ... параметрN "значениеN"

Что бы точно узнать название параметра, зайдите в админку, откройте редактирование учетной записи и кликните мышкой на нужном вам параметре:

param

Перенос учетных записей почтовых ящиков

Выгрузка учетных записей

Создадим файл /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"

Добавить комментарий


Защитный код
Обновить