Backup Zimbra Open Source edition to a NAS with NFS

The most recent open source version of Zimbra Collaboration 8.8 has no official backup module. But with the help of scripting it is still possible to backup a mailbox.

The following situation is assumed:

  • Up-to-date Zimbra Collaboration 8.8
  • A file is available (emailaccounts.txt) containing all email addresses for the backup
  • A NFS server is available to store the backup externally
  • A local directory (/nfs-mount) is available to connect to the NFS server
  • The script has to be run as root because of NFS (maybe there are other ways to do this, but it works.)
  • A local partition is available (/backup) from where the backup is copied to the NFS server
#!/bin/bash

#
# Functies
#

function backup_loop() {
# In het bestand emailaccounts.txt moet handmatig het emailaccount worden toegevoegd, wil het meegenomen worden in de backup.

for i in $(cat /home/maarten/emailaccounts.txt);

# De content van de gehele mailbox (dus ook agenda etc.) wordt dmv een API opgevraagd en opgeslagen in de map /backup/zimbra/
do
        backup_folder_check			# Controleer of de map bestaat
        backup_cleanup				# Verwijder bestanden ouder dan geconfigureerde dagen
        export_mailbox				# Exporteer de mailbox
        backup_to_nas				# Zet een kopie op de nas via de NFS-koppeling

# Echo welke emailadressen in de backup zijn verwerkt
echo $i;

# Klaar met exporteren
done;
}

function backup_folder_check() {
# Controleer of de map bestaat voor deze gebruiker. Is dit niet het geval, maak alsnog de map aan.
if [ ! -d /backup/zimbra/$i ];
        then
                mkdir -p /backup/zimbra/$i;
                chown zimbra:zimbra /backup/zimbra/$i
fi
}

function export_mailbox() {
        zmmailbox -z -m $i getRestURL "//?fmt=tgz" > /backup/zimbra/$i/$(date +%Y-%m-%d).tgz;
}

function backup_cleanup() {
        /usr/bin/find /backup/zimbra/$i/ -type f -mtime +4 -delete; # Verwijder bestanden ouder dan 4 dagen
}

function backup_to_nas() {
        cp -Rf /backup/zimbra/$i /nfs-mount/zimbra/$i # Kopieer bestanden naar de nas via /nfs-mount/
}

function mount_nfs() {
        /sbin/mount.nfs4 NAS:/volume2/Backups /nfs-mount/ -w -o rsize=8192,wsize=8192 # Koppel de nas aan /nfs-mount/
}

function unmount_nfs() {
        /sbin/umount.nfs4 /nfs-mount/ # Ontkoppel de /nfs-mount/
}

#
# Volgorde uit te voeren werkzaamheden
#

mount_nfs		# Maak de NAS wakker en maak een NFS-koppeling  --> kan alleen als root
backup_loop		# Start de loop - controleer of mappen bestaan en exporteer vervolgens de mailbox naar de betreffende map
backup_cleanup		# Zorg dat de lokale backup maximaal 4 dagen oud is
unmount_nfs		# Ontkoppel /nfs-mount/ zodat de NAS kan slapen  --> kan alleen als root