Crear un Backup de correos en Zentyal versiones 3.5 a 5.0 a Disco Externo

El siguiente es un script el cual realiza un backup incremental de todos los correos de una empresa hacia un disco duro externo formateado como NTFS y envia un correo cuando  a la direccion configurado cuando este se completa correctamente, puede añadirse una tarea en crontab para ejecutarse segun los requerimientos necesarios.

Estas son las instrucciones, se asume que se tienen ya permisos de administrador y que la unidad o el disco extraible  esta conectada:

crear la carpeta /etc/elianai con el siguiente comando

mkdir /etc/elianai

crear la carpeta /mnt/backup que sera donde se montara la unidad

mkdir /mnt/backup

instalar los paquetes necesarios para leer particiones NTFS y enviar las alertas de correo

apt-get install ntfs-3g bsd-mailx

Ejecutar el comando blkid para ver el UUID del disco duro Externo y lo anotamos en algun lugar

probamos montar la unidad  con el comando ntfs-3g

ntfs-3g /dev/sdb1 /mnt/backup

Si todo funciona normalmente entonces pasamos al paso siguiente en caso que la unidad muestre errores de NTFS probamos reparar con

ntfsfix -b -d /dev/sdb1

Desmontamos la unidad

umount /mnt/backup

Creamos el script en la carpeta /etc/elianai ejecutando el siguiente comando

nano /etc/elianai/backup

 

Copiamos el siguiente contenido:

#!/bin/bash
##************************************************************************
## Script para Realizar Backup en servidores Zentyal, Escritor por Joel Sulecio
## Elianai Systems 2014-2016
##************************************************************************
##    This program is free software: you can redistribute it and/or modify
##    it under the terms of the GNU General Public License as published by
##    the Free Software Foundation, either version 3 of the License, or
##    (at your option) any later version.

##    This program is distributed in the hope that it will be useful,
##    but WITHOUT ANY WARRANTY; without even the implied warranty of
##    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
##    GNU General Public License for more details.

##    You should have received a copy of the GNU General Public License
##    along with this program.  If not, see <http://www.gnu.org/licenses
##************************************************************************


## Montar la partición en el fstab Opcional.
## Para ver el UUID en zentyal ejecutar: sudo sudo blkid
## Agregar la línea con los datos correos en el fstab
## UUID=4E04E5C604E5B0DF  /mnt/Backup ntfs-3g  defaults  0 0
## instalar tambien el comando mail con sudo apt-get install bsd-mailx
## para reparar particiones ntfs despues de intstalar ntfs-3g
## sudo ntfsfix -b -d /dev/sda6

##
## VARIABLES
##

# Establece los parametros de Origen
BACKUP_FROM="/var/vmail"

# Estable los parametros de Destino
BACKUP_TO="/mnt/backup/correos/"
BACKUP_DEV="4E04E5C604E5B0DF" #UUID of the disk
BACKUP_MNT="/mnt/backup"

# Establece los parametros del Correo que recibira las notificaciones
EMAIL="informatica@empresa.com"

# Ruta del archivo de la Bitacora
LOG_FILE="/etc/elianai/bitacora.txt"

##
## SCRIPT
##

# Revisa si existe el archivo para la bitacora
if [ ! -e "$LOG_FILE" ]; then
touch "$LOG_FILE"
fi

# Revisa que el origen exista y pueda leerse
if [ ! -r  "$BACKUP_FROM" ]; then
echo "$(date "+%Y-%m-%d %k:%M:%S") - ERROR: No se puede leer el directorio o no existe." >> "$LOG_FILE"
echo "$(date "+%Y-%m-%d %k:%M:%S") - ERROR: No es posible sincronizar." >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
exit 1
fi

#Revisa si el disco externo esta montado
if mountpoint -q "$BACKUP_MNT"; then
echo "El disco duro externo ya esta montado en la ruta $BACKUP_MNT" >> "$LOG_FILE"
else
echo "El disco duro no pudo ser montado en $BACKUP_MNT " >> "$LOG_FILE"
mount -U "$BACKUP_DEV" "$BACKUP_MNT"
if mountpoint -q "$BACKUP_MNT"; then
echo "El disco duro externo ha sido montado correctamente" >> "$LOG_FILE"
else
echo "El disco duro no pudo ser montado en $BACKUP_MNT en dos oportunidades" >> "$LOG_FILE"
exit 1
fi
fi

# Revisa el directorio de destino si existe y es posible escribir en el
if [ ! -w  "$BACKUP_TO" ]; then
echo "$(date "+%Y-%m-%d %k:%M:%S") - ERROR: No se puede escribir en la ruta de destino." >> "$LOG_FILE"
echo "$(date "+%Y-%m-%d %k:%M:%S") - ERROR: No se puede sincronizar." >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
exit 1
fi

# Inicia el ingreso en el registro de la bitacora.
echo "$(date "+%Y-%m-%d %k:%M:%S") - La Sincronizacion ha comenzado." >> "$LOG_FILE"

# Comienza la sincronizacion
if rsync -avb "$BACKUP_FROM" "$BACKUP_TO" &>> "$LOG_FILE"; then
echo "$(date "+%Y-%m-%d %k:%M:%S") - La sincronizacion ha finalizado satisfactoriamente." >> "$LOG_FILE"
echo "$(date "+%Y-%m-%d %k:%M:%S") El Backup se ha completado con exito"|mail -s "BACKUP CORREOS" "$EMAIL"

else
echo "$(date "+%Y-%m-%d %k:%M:%S") - ERROR: Ha fallado el comando rsync." >> "$LOG_FILE"
echo "$(date "+%Y-%m-%d %k:%M:%S") - ERROR: No se puede sincronizar." >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
exit 1
fi

# Desmonta la unidad de Backup para evitar perdidas accidentales
if  umount "$BACKUP_MNT" ; then
echo "$(date "+%Y-%m-%d %k:%M:%S") - El disco del Backup ha sido desmontado correctamente." >> "$LOG_FILE"
else
echo "$(date "+%Y-%m-%d %k:%M:%S") - ADVERTENCIA: El disco duro del BACKUP no se ha desmontado." >> "$LOG_FILE"
fi

# Finaliza la entrada en el registro
echo "" >> "$LOG_FILE"
exit 0

Leave a Reply

Your email address will not be published. Required fields are marked *

19 + 1 =

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>