Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

Zimbra перенос почтовых ящиков

Ответить
Аватара пользователя
ALEXX
Администратор
Администратор
Сообщения: 1286
Зарегистрирован: 21 дек 2014, 14:59
Откуда: Королёв
Контактная информация:

Zimbra перенос почтовых ящиков

Сообщение ALEXX »

Подготовка

На новом и старом серверах создаем каталог, в который будут складываться файлы для импорта и экспорта:

Код: Выделить всё

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
Готово. Мы выполнили импорт всех нужных нам список. Мы должны получить следующий список файлов:

Код: Выделить всё

[zimbra@mail zimbra]$ ll
total 24
-rw-r----- 1 zimbra zimbra   52 Jun 12 09:31 admins.txt
drwxr-x--- 2 zimbra zimbra  151 Jun 12 10:46 aliases
drwxr-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.txt
drwxr-x--- 2 zimbra zimbra 4096 Jun 12 09:51 passwords
-rw-r----- 1 zimbra zimbra  878 Jun 12 09:34 users.txt
drwxr-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 root@192.168.1.20:/tmp/
б) с помощью scp:

scp -r -P <SSH-порт> /backup/zimbra <учетная запись на новом сервере>@<IP-адрес нового сервера>:/tmp/

Например:

Код: Выделить всё

scp -r -P 22 /backup/zimbra root@192.168.1.20:/tmp/
После того, как мы перенесли файлы в каталог /tmp на новом сервере, подключаемся к последнему и переносим эти файлы в каталог /backup:

Код: Выделить всё

mv /tmp/zimbra /backup/
Задаем нужные права на перенесенные файлы:

Код: Выделить всё

chown -R zimbra:zimbra /backup/zimbra
Устанавливаем локаль с кириллицей в UTF-8:

Код: Выделить всё

localedef -i ru_RU -f UTF-8 ru_RU
Заходим под учетной записью zimbra:

Код: Выделить всё

su - zimbra
Переходим в каталог:

Код: Выделить всё

cd /backup/zimbra
Экспортируем системную переменную:

Код: Выделить всё

export LC_ALL=ru_RU.UTF-8
* это необходимо для корректного отображения символов на кириллице.

Переходим, непосредственно, к импорту.
Импорт данных

Выполним обратные операции на новом сервере, которые приведут к созданию необходимых нам данных и настроек. После каждой операции рекомендуется заходить на веб-интерфейс почтовой системы и проверять перенос.

1. Домены:

Код: Выделить всё

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"
    done
done
Запускаем его на выполнение:

Код: Выделить всё

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
    fi
done
echo "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
    fi
done
Запускаем его:

Код: Выделить всё

bash restore_aliases.sh
Со структурой разобрались. Идем дальше.
Перенос данных

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

Данную операции стоит уже делать после полного перехода на новый сервере (как правило, после смены записей MX и перевода пользователей на использование нового сервера.
Экспорт

На старом сервере выполним экспорт. По своему принципу, действия одинаковые, как мы выполняли выше. Также напомню, что мы должны зайти под пользователем zimbra и перейти в наш рабочий каталог:

Код: Выделить всё

su - zimbra

Код: Выделить всё

cd /backup/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 tmp
set -x
clear
for 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"
done
\rm -rf tmp
И выполняем его:

Код: Выделить всё

bash ./export_filters.sh
В каталоге filters мы получим файлы с пользовательскими правилами.
Перенос файлов

Теперь нам нужно перенести полученные данные на новый сервер. Это будут два каталога:

mailbox_data
filters

Для этого мы можем воспользоваться вышеописанными командами rsync или scp, например:

Код: Выделить всё

rsync -a -e 'ssh -p 22' /backup/zimbra/mailbox_data /backup/zimbra/filters root@192.168.1.20:/tmp/
... или

Код: Выделить всё

scp -r -P 22 /backup/zimbra/mailbox_data /backup/zimbra/filters root@192.168.1.20:/tmp/
После чего на новом сервере перенесем каталоги из /tmp в рабочую директорию:

Код: Выделить всё

mv /tmp/mailbox_data /tmp/filters /backup/zimbra/
Задаем права:

Код: Выделить всё

chown -R zimbra:zimbra /backup/zimbra
Импорт

Переходим на новый сервер. Заходим под пользователем zimbra в рабочий каталог:

Код: Выделить всё

su - zimbra

Код: Выделить всё

cd /backup/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
* операция займет много времени, особенно, для больших почтовых ящиков.

2. Фильтры.

Для импорта фильтров нужно создать скрипт:

Код: Выделить всё

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._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}\b") zimbraMailSieveScript "$Filter_String"
    echo "Process filter $Account"
done
echo "All filter has been import successfully"
И запускаем его командой:

Код: Выделить всё

bash import_filters.sh
Собственно, импорт данных выполнен.
Ответить

Вернуться в «Серверы»