Backup y Restaurar Servidores (Probado en Zimbra 7.2 y 8.09)

Con este Post, vamos sacar copias de seguridad y restaurar en un sistema Zimbra ya instalado y corriendo.

 

Backup de Zimbra

Para sacare una copia de Zimbra 7.2 utilizamos el siguiente script:

#!/bin/bash

 # Zimbra Backup Script
 # Requires ncftp to run
 # This script is intended to run from the crontab as root
 # Date outputs and su vs sudo corrections by other contributors, thanks, sorry I don't have names
 # to attribute!
 # Free to use and free of any warranty!  Daniel W. Martin, 5 Dec 2008

 start_date="$(date +%F)"

 # Outputs the time the backup started, for log/tracking purposes
 echo Time backup started = $start_date at $(date +%T)
 before="$(date +%s)"
 rm -rvf /backup/zimbra/*

 # Live sync before stopping Zimbra to minimize sync time with the services down
 # Comment out the following line if you want to try single cold-sync only
 rsync -avHK --delete /opt/zimbra/ /backup/zimbra

 # which is the same as: /opt/zimbra /backup
 # Including --delete option gets rid of files in the dest folder that don't exist at the src
 # this prevents logfile/extraneous bloat from building up overtime.

 # Now we need to shut down Zimbra to rsync any files that were/are locked
 # whilst backing up when the server was up and running.
 before2="$(date +%s)"

 # Stop Zimbra Services
 su - zimbra -c "/opt/zimbra/bin/zmcontrol stop"
 sleep 15

 # Kill any orphaned Zimbra processes
 kill -9 `ps -u zimbra -o "pid="`

 # Only enable the following command if you need all Zimbra user owned
 # processes to be killed before syncing
 # ps auxww | awk '{print $1" "$2}' | grep zimbra | kill -9 `awk '{print $2}'`

 # Sync to backup directory
 rsync -avHK --delete /opt/zimbra/ /backup/zimbra

 # Restart Zimbra Services
 su - zimbra -c "/opt/zimbra/bin/zmcontrol start"

 # Calculates and outputs amount of time the server was down for
 after="$(date +%s)"
 elapsed="$(expr $after - $before2)"
 hours=$(($elapsed / 3600))
 elapsed=$(($elapsed - $hours * 3600))
 minutes=$(($elapsed / 60))
 seconds=$(($elapsed - $minutes * 60))
 echo Server was down for: "$hours hours $minutes minutes $seconds seconds"

 # Create a txt file in the backup directory that'll contains the current Zimbra
 # server version. Handy for knowing what version of Zimbra a backup can be restored to.
 su - zimbra -c "zmcontrol -v > /backup/zimbra/conf/zimbra_version.txt"
 # or examine your /opt/zimbra/.install_history

 # Display Zimbra services status
 echo Displaying Zimbra services status...
 su - zimbra -c "/opt/zimbra/bin/zmcontrol status"

 # Create archive of backed-up directory for offsite transfer
 # cd /backup/zimbra
 tar -zcvf /home/backup/backup/${start_date}-dominio-com.tgz -C /backup/zimbra .
 rm -rf /backup/zimbra/*

 ############ We don't make the file transfer from here we do it from the XM1-BCK2 ###########
 # Transfer file to backup server
 # ncftpput -u  -p / /tmp/mail.backup.tgz

 # Outputs the time the backup finished
 # echo Time backup finished = $(date +%T)

 # Calculates and outputs total time taken
 after="$(date +%s)"
 elapsed="$(expr $after - $before)"
 hours=$(($elapsed / 3600))
 elapsed=$(($elapsed - $hours * 3600))
 minutes=$(($elapsed / 60))
 seconds=$(($elapsed - $minutes * 60))
 echo Time taken: "$hours hours $minutes minutes $seconds seconds"

Grabamos estos comandos en un archivo en cualquier lado con la extención sh (ejemplo: backup_zimbra.sh)

(Lo que hace este  script es muy sencillo: se encarga de copiar todo la carpeta /opt/zimbra al directorio /backup, luego detiene los servicios y realiza nuevamente la copia para asegurarse de transferir los archivos que estaban en uso y asi minimizar el tiempo de caida.)

Ojo: asegurarse de colocar bien el directorio a donde quisiéramos hacerle un backup, en mi caso particular lo he direccionado a otro disco duro físico.

 

Restaurar el Backup en una instalación fresca

Para restaurar la copia de seguridad, lo unico que hay que hacer es reemplazar la carpeta /opt/zimbra del nuevo servidor por la que tenemos en nuestro backup

En el Nuevo servidor hacer esto:

Paso 1.- Apagar los servico de zimbra por si estuvieran levantados y renombrar carpeta /opt/zimbra

#su - zimbra
$zmcontrol stop
$exit
#mv /opt/zimbra  /opt/zimbra_old

 

Paso 2.- Copiar el archivo de backup al nuevo servidor, ejemplo a la carpeta /opt/zimbra

Crear carpeta /opt/zimbra

#mkdir /opt/zimbra

Utilizar algun gestor de archivos para copiar el archivo de backup backup-dominio-com.tgz hacia /opt/zimbra del nuevo servidor

Paso 3.- Descomprimir el archivo de backup en la carpeta /opt/zimbra

Ejemplo:

 

#cd /opt/zimbra

# tar -xzvf backup-midominio.com.tgz

Paso4.- Con los siguientes comandos se verifica y repara permiso a la carpeta  descomprimida /opt/zimbra

$ chown -R zimbra.zimbra /opt/zimbra

$ /opt/zimbra/libexec/zmfixperms

Paso 5.- Reiniciamos Zimbra

$ su - zimbra

[zimbra@mail ~]$ zmcontrol restart

[zimbra@mail ~]$ zmcontrol start

 

Posibles errores:

[zimbra@mail ~]$ zmcontrol status
/usr/bin/perl: symbol lookup error: /opt/zimbra/common/lib/perl5/x86_64-linux-th read-multi/auto/Socket/Socket.so: undefined symbol: Perl_Istack_sp_ptr

 

Esperar  de 3 a 5 minutos, luego verificar que todos los servicios corran:

[zimbra@mail ~]$ zmcontrol status

deberá de mostrar lo siguiente:

antispam                Running
 antivirus               Running
 imapproxy               Running
 ldap                    Running
 logger                  Running
 mailbox                 Running
 memcached               Running
 mta                     Running
 snmp                    Running
 spell                   Running
 stats                   Running
 zmconfigd               Running

 

Si sale esto, es que ya todo esta corriendo, solo queda verificar!!

Tarea para sacar copias todos los días

Luego lo que queda es colocar una tarea para que todos los días se haga una copia de seguridad en la madrugada, por si falla, ya lo reparamos .

$ crontab -e

agregar esta línea:

00 02 * * 2-6 /root/Backup_Zimbra.sh

 

Lo que hará el crontab es ejecutar el archivo Backup_Zimbra.sh y este a la vez
sacará
una copia a las 2:00 am los días martes, mier,Jue, Vier, Sab

 


14 comments

  1. LazaroRivera dice:

    Una Consulta si ese backup lo quiero restaurar en otro Servidor como podemos hacer levantar este backup.

    donde tengo implementado un server zimbra lo queremos tener otro Servidor en donde copiar los backup y tenerlo listo en caso que el servidor principal se caiga.

    • Martín dice:

      Esta explicado en la segunda parte….. lo único que debes tener en cuenta es lo siguiente:
      1. Instalar desde cero el sistema operativo.
      2.- En este nuevo servidor instalar una versión nueva de Zimbra….. nuevo desde cero … configura solo los parámetros básicos, nada mas
      3.- Continuar con el manual de la restauración desde el punto 1 ( parte de restauración)

      Eso es todo

  2. Fernando dice:

    Hola, felicitaciones por el post, muy completo y funciona muy bien en zimbra 7.2. (Debian 5)
    Por si ha alguien mas le sirve, he provado una herramienta para hacer backup y restaurar en otro servidor con las configuraciones de las cuentas como eran originalmente. se llama z-extras y es gratis.

    • Benjamín Garzón dice:

      Hola, mañana pruebo el script, muchas gracias por compartir este dataso. por otra parte,busque z-extras y lleva licencia… igualmente lo voy a probar.
      Gracias!

  3. FELIX GALLEGOS dice:

    Martin una consulta por que en algunas variablessolo lo colocas entre comillas y otras no

    after=”$(date +%s)”
    elapsed=”$(expr $after – $before)”
    hours=$(($elapsed / 3600))
    elapsed=$(($elapsed – $hours * 3600))
    minutes=$(($elapsed / 60))
    seconds=$(($elapsed – $minutes * 60))

  4. FELIX GALLEGOS dice:

    MARTIN BUENAS TARDES SABES PROBE UN SCRIPT EN MI SERVIDOR ZIMBRA CON CENTOS BACKUPEA EL BACKU PESA CERCA DE 5 GB
    PERO AL DESCOMPRIMIRLO PARA RESTAURARLO
    SE ME LLENAEL DISCO TIENE Q VER ALGO CON EL TIPO DE PARTICIONAMIENTO
    SOI SON PARTICIONES DEFINIDAS O VLM

    • Martín dice:

      Hola Felix:
      En princicpio si tienes “bastante espacio” en tu disco duro (mas de 100 GB por ejemplo) al descomprimirlo no debería de llenarte el espacio en tu server.
      Has lo siguiente para ver cuanto espacio ocupa el zimbra en modo de producción:
      Si estas en Centos:

      1.- Ejecuta el siguiente comando para ver cuanto espacio has usado en todas las particiones del disco duro:
      # df
      Alli te va a mostrar cuanto espacio de disco duro te queda en la particion en donde albergas al zimbra.

      2.- Luego dirigite a la carpeta de instalación del zimbra y verifica cuanto espacio esta consumiendo el zimbra en tu disco duro (aqui esta incluido los mailbox de los usuarios), ejecuta este comando:

      # du /opt/zimbra

      Al final de la corrida te saldrá el valor final de uso.

      Según eso ya puedes calcular cuanto espacio necesitas libre cada vez que descomprimes un backup.

      Saludos

      PD. respecto al tipo de particion, no creo que tenga nada que ver.

  5. FELIX GALLEGOS dice:

    MARTIN MUY BUENAS TARDES:
    MIRA MIRA GENERE UN SCRIPT PARA BACKUPEAR ME GUSTARIA QUE REVICES MI CÓDIGO POR FAVOR:

    ###############################
    # SCRIPT PARA BACKUPS DE ZIMBRA
    ###############################

    # EMITE EL TIEMPO DE INICIO DE LA COPIA DE SEGURIDAD,
    # A EFECTOS DE REGISTRO Y RASTREO
    start_date=”$(date +%F)”
    echo Inciando proceso de copia de Seguridad el $start_date a las $(date +%T)
    before=”$(date +%s)”
    rm -rvf /BackupZimbra/zimbra/*
    rm -rvf /BackupZimbra/zimbramail.tar.gz
    echo
    before2=”$(date +%s)”
    echo Deteniendo Zimbra 8 Open Source Colaboration Suite
    echo
    service zimbra stop
    echo
    echo Servidor Zimbra detenido
    echo
    echo Copiando archivos a directorio de respaldo /BackupZimbra/zimbra
    echo
    cp -rp /opt/zimbra /BackupZimbra/zimbra/
    echo
    echo Copia de archivos completado
    echo
    echo Empaquetando Copia de Seguridad de Zimbra 8 Open Source Colaboration Suite
    tar -zcvf /BackupZimbra/zimbramail.tar.gz /BackupZimbra/zimbra/
    echo
    echo Empaquetamiento completado
    echo
    #
    # CALCULAR TIEMPO DE COPIA Y EMPAQUETAMIENTO DE RESPALDO
    #
    after=”$(date +%s)”
    elapsed=”$(expr $after – $before2)”
    hours=$((elapsed / 3600))
    elapsed=$(($elapsed – $hours * 3600))
    minutes=$(($elapsed / 60))
    seconds=$(($elapsed – $minutes * 60))
    echo Tiempo aproximado de empaquetamiento de Copia de Seguridad: “$hours horas $minutes minutos $seconds segundos”
    echo
    echo Iniciando Zimbra 8 Open Source Colaboration Suite
    service zimbra start
    echo Servidor Zimbra iniciado
    echo
    #
    # CALCULANDO TIEMPO DE DURACION DE PROCESO COMPLETO DE COPIA DE SEGURIDAD
    #
    after=”$(date +%s)”
    elapsed=”$(expr $after – $before)”
    hours=$(($elapsed / 3600))
    elapsed=$(($elapsed – $hours * 3600))
    minutes=$(($elapsed / 60))
    seconds=$(($elapsed – $minutes * 60))
    echo Tiempo estimado de duracion de la copia de Seguridad: “$hours horas $minutes minutos $seconds segundos”
    echo
    echo
    echo Copia de Seguridad realizada satisfactoriamente …

    lo que pasa que probe en una maquina virtual recien instalada con 2 cuentas creadas y un msj la pc vitual tiene 100gb de espacio libre y zimbra a las justas debe tener unos 5 a 7 GB
    pero al descomprimir el backup llena el disco apezar q tengo como 70 GB libres

  6. FELIX GALLEGOS dice:

    mi zimbra es la version 8.0.3 + centos 6.4 x64

  7. FELIX GALLEGOS dice:

    el directorio opt que contien zimbra pesa 13GB y tengo 400GB y tantos libre

    • Felix, como te va. Te comento que probe tu script y los tamaños son iguales en mi servidor de correo. Tengo un Zimbra 8.0.3 OpenSource tambièn.

      root@Mail:/BackupZimbra/zimbra# du -hlsc /BackupZimbra/zimbra
      3,4G /BackupZimbra/zimbra
      3,4G total
      root@Mail:/BackupZimbra/zimbra# du -hlsc /opt/zimbra
      3,5G /opt/zimbra
      3,5G total
      root@Mail:/BackupZimbra/zimbra#

      Es muy raro, lo probaste en otro servidor? tirale el comando du -hlsc /opt/zimbra para ver si realmente es el tamaño del directorio /opt/zimbra,.
      Cualquier cosa que te pueda ayudar, avisame.

      Saludos,

  8. luis dice:

    Como puedo eliminar un usuario dañodo, ya que ni por comando ni por consola del administrador puedo hacerlo

  9. Luis dice:

    Estimados quiseran que me ayuden soy nuevo en esto, quiero realizar una copia de seguridad de todos los buzones de zimbra, y eliminar ese servidor para crear un nuevo desde 0 y ahi restaurar los buzones por que al momento el correo no me esta enviando a correos externos, el problema viene pasando desde que el proveedor me cambio los dns y al actualizar en zimbra no me permite enviar.

    Quedo atento a sus valiosos comentarios y ayuda.

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *