Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов. 8(977)608-78-62 adm@nixm.ru
Zimbra перенос почтовых ящиков
- ALEXX
- Администратор
- Сообщения: 1286
- Зарегистрирован: 21 дек 2014, 14:59
- Откуда: Королёв
- Контактная информация:
Zimbra перенос почтовых ящиков
На новом и старом серверах создаем каталог, в который будут складываться файлы для импорта и экспорта:
Код: Выделить всё
mkdir -p /backup/zimbra
Код: Выделить всё
chown -R zimbra:zimbra /backup/zimbra
Код: Выделить всё
su - zimbra
Код: Выделить всё
cd /backup/zimbra
Перенос структурной информации
Сначала мы перенесем информацию о доменах, пользователях, группах рассылки и псевдонимах. Эти данные экспортируются и импортируются, относительно, быстро.
Экспорт данных
Начнем с экспорта — выполняем команды на старом (текущем сервере).
1. Домены:
Код: Выделить всё
zmprov gad | tee -a domains.txt
Код: Выделить всё
cat domains.txt
Код: Выделить всё
zmprov gaaa | tee -a admins.txt
Код: Выделить всё
zmprov -l gaa | tee -a users.txt
Код: Выделить всё
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
Код: Выделить всё
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
Код: Выделить всё
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 -r -P <SSH-порт> /backup/zimbra <учетная запись на новом сервере>@<IP-адрес нового сервера>:/tmp/
Например:
Код: Выделить всё
scp -r -P 22 /backup/zimbra root@192.168.1.20:/tmp/
Код: Выделить всё
mv /tmp/zimbra /backup/
Код: Выделить всё
chown -R zimbra:zimbra /backup/zimbra
Код: Выделить всё
localedef -i ru_RU -f UTF-8 ru_RU
Код: Выделить всё
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
Процесс выполняется с помощью скрипта. Создадим его:
Код: Выделить всё
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
Код: Выделить всё
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
Создаем скрипт:
Код: Выделить всё
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
Создаем каталог, где будут размещены наши файлы с выгруженной почтой:
Код: Выделить всё
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
Перенос файлов
Теперь нам нужно перенести полученные данные на новый сервер. Это будут два каталога:
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/
Код: Выделить всё
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