Сам Zimbra-сервер целиком бэкапится средствами гипервизора, на котором он расположен в качестве виртуальной машины. А вот ящики пользователей желательно сохранять отдельно. Для этого использован скрипт, запускаемый планировщиком CentOS.
Сначала подготавливаем ресурс, куда будут сохраняться архивы почтовых ящиков. Это будет сетевое хранилище Qnap, с NFS-ресурсом. Настраиваем QNAP
Теперь настроим автомонтирование NFS-ресурса к CentOS7.
Монтировать будем с помощью autofs. Данный способ монтирования позволяет автоматически монтировать папку после обращения к ней.
Устанавливаем необходимые пакеты
yum install nfs-utils autofs -y
Проверим, как отрабатывает команда монтирования
mount -t nfs 172.16.10.10:/MailBackup /mnt/mailbackup ll /mnt/mailbackup umount /mnt/mailbackup
Для настройки autofs редактируем файл /etc/auto.master
mcedit /etc/auto.master /mnt/autofs /etc/auto.nfs --timeout=60
В файле /etc/auto.nfs добавляем строку для подключения к ресурсу NFS
mcedit /etc/auto.nfs mailbackup -fstype=nfs4,rw,soft,intr 172.16.10.10:/MailBackup
Добавляем сервис в автозагрузку и запускаем
systemctl enable autofs systemctl restart autofs
Создаем скрипт для бэкапа почтовых ящиков. Скрипт получает список учетных записей сервера для указанных доменов, извлекает содержимое почтовых ящиков и сохраняет в архивах на примонтированный NFS-ресурс.
mcedit /opt/zimbra/scripts/mailboxesbackup.sh
Текст скрипта
#!/bin/bash # создаем папки для текущего бэкапа mkdir /mnt/autofs/mailbackup/domain01_`date +%d-%m-%Y` mkdir /mnt/autofs/mailbackup/domain02_`date +%d-%m-%Y` mkdir /mnt/autofs/mailbackup/domain03_`date +%d-%m-%Y` # получаем списки почтовых ящиков указанных доменов /opt/zimbra/bin/zmprov -l gaa domain01.com > /mnt/autofs/mailbackup/domain01_users_mailbox.txt /opt/zimbra/bin/zmprov -l gaa domain02.com > /mnt/autofs/mailbackup/domain02_users_mailbox.txt /opt/zimbra/bin/zmprov -l gaa domain03.ru > /mnt/autofs/mailbackup/domain03_users_mailbox.txt # в цикле по файлу со списком почтовых ящиков # получаем папки с письмами почтового ящика и архивируем в tgz-архив for mbox in `cat /mnt/autofs/mailbackup/domain01_users_mailbox.txt` do echo "$mbox"; /opt/zimbra/bin/zmmailbox -z -m $mbox getRestURL "//?fmt=tgz" > /mnt/autofs/mailbackup/domain01_`date +%d-%m-%Y`/$mbox.tgz done for mbox in `cat /mnt/autofs/mailbackup/domain02_users_mailbox.txt` do echo "$mbox"; /opt/zimbra/bin/zmmailbox -z -m $mbox getRestURL "//?fmt=tgz" > /mnt/autofs/mailbackup/domain02_`date +%d-%m-%Y`/$mbox.tgz done for mbox in `cat /mnt/autofs/mailbackup/domain03_users_mailbox.txt` do echo "$mbox"; /opt/zimbra/bin/zmmailbox -z -m $mbox getRestURL "//?fmt=tgz" > /mnt/autofs/mailbackup/domain03_`date +%d-%m-%Y`/$mbox.tgz done
Делаем скрипт исполняемым и меняем его владельца
chmod +x /opt/zimbra/scripts/mailboxesbackup.sh chown zimbra /opt/zimbra/scripts/mailboxesbackup.sh
Добавляем задание в планировщик пользователя zimbra
su zimbra crontab -e # Один раз в сутки в 03:30 30 3 * * * /opt/zimbra/scripts/mailboxesbackup.sh > /mnt/autofs/mailbackup/lastbackup.log 2>&1
После выполнения задания, лог работы скрипта сохраняется вместе с бэкапом.
Для удаления старых бэкапов воспользуемся планировщиком QNAP. Создаем скрипт с таким содержимым
mcedit /root/scripts/oldbackupdelete.sh #!/bin/bash # Удаляем файлы старше 30 дней find /share/CAHCEDEV1_DATA/MailBackup -type d -mtime +31 -exec rm {} \;
Делаем его исполняемым
chmod +x /root/scripts/oldbackupdelete.sh
Добавляем запуск скрипта в планировщик и перезапускаем службу
mcedit /etc/config/crontab # Один раз в сутки в 05:00 0 5 * * * /root/scripts/oldbackupdelete.sh crontab /etc/config/crontab && /etc/init.d/crond.sh restart