Резервное копирование почтовых ящиков с Zimbra-сервера на NFS-ресурс QNAP

Сам 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