Cuando empiezas hacer copias de backups, se suele empezar por un pequeño tar, luego lo programas diariamente, te envías un report por correo, luego lo envías a otra maquina y finalmente terminas haciendo copias completas e incrementales.
El siguiente script en Bash es el que utilizo para realizar copias diarias. Se ejecuta cada día en un cron. Los sábados realiza un backup completo y el resto de dias un incremental. Realiza un backup en local y también lo envía por SSH a una máquina remota.
Descargar kbackup.sh.
#!/bin/bash
### modificar las variables segun las necesidades
DATA_BACKUP="/etc/network /etc/ssh /etc/rc.local /var/log/syslog /var/log/auth.log
/var/log/messages /var/log/dmesg /var/log/daemon.log"
LOCAL_DST_BACKUP="/var/backuplocal"
NAME_BACKUP="mi_srv"
SEND_REMOTE_BACKUP="yes"
REMOTE_DST_BACKUP="/var/backup/mi_srv"
HOST_REMOTE_BACKUP="srvbackup.miempresa"
DAY_FULL_BACKUP="Sun"
### variables especificas del script. No modificar
_LIST="/tmp/backup$$.list"
echo "kbackup.sh v0.1b, por amperis[@]gmail.com"
echo
case $1 in
--help)
echo "Sintaxis:"
echo " # ./kbackup.sh "
echo
echo " --help: muestra la ayuda"
echo " --exec: ejecuta el script"
echo
echo "Notas:"
echo
echo "1) Editar este script y modificar las variables necesarias."
echo " DATA_BACKUP: Lista de directorio o fichero que de desean incluir en
el backup."
echo " LOCAL_DST_BACKUP: Directorio local donde se guardará la copia local
del backup."
echo " NAME_BACKUP: Nombre o prefijo del backup."
echo " SEND_REMOTE_BACKUP: yes/no, indicar si queremos que el backup tambien
se copie"
echo " en un servidor remoto."
echo " REMOTE_DST_BACKUP: Directorio remoto donde debe copiarse el backup."
echo " HOST_REMOTE_BACKUP: Nombre de host o IP de la maquina remota que
almacena el"
echo " backup."
echo " DAY_FULL_BACKUP: Día de la semana que queremos hacer el full backup"
echo
echo
echo "2) Crear una tarea programada diaria para este script."
echo
echo " # crontab -e"
echo " @daily /root/script/kbackup.sh | mail -s 'Report de Backup'
admin@miempresa.com"
echo
echo "3) Para realizar el backup remoto es necesario que el servidor destino
confie"
echo " en cliente. Copia su llave al servidor (http://amperis.blogspot.com
/2009/02/scp-entre-maquinas.html)"
echo
exit 0
;;
--exec)
echo "-> Inciado a las `date +%H:%M:%S`h"
if [ -d "$LOCAL_DST_BACKUP" ]; then
set $(date)
## Backup completo. Se realiza solo los sabados
if test "$1" = "$DAY_FULL_BACKUP" ; then
echo "-> Ejecutando copia completa del $3 de $2 del $6"
_NAME_BACKUP="$NAME_BACKUP-full-$6-$2-$3.tgz"
tar cfzv "$LOCAL_DST_BACKUP/$_NAME_BACKUP" $DATA_BACKUP
rm -f $LOCAL_DST_BACKUP/$NAME_BACKUP-incr*
else
## Backup incremental, se realiza el resto de dias
echo "-> Ejecutando copia incremental del $3 de $2 del $6 ..."
find $DATA_BACKUP -depth -type f \( -ctime -1 -o -mtime -1 \) -print > $_LIST
_NAME_BACKUP="$NAME_BACKUP-incr-$6-$2-$3.tgz"
tar cfzTv "$LOCAL_DST_BACKUP/$_NAME_BACKUP" "$_LIST"
rm -f "$_LIST"
fi
echo "-> Backup creado: $_NAME_BACKUP"
## Enviado el backup a un servidor externo
if [ $SEND_REMOTE_BACKUP = "yes" ]; then
echo "-> Enviando backup a $HOST_REMOTE_BACKUP"
rsync -avz $LOCAL_DST_BACKUP/ -e ssh root@$HOST_REMOTE_BACKUP:$REMOTE_DST_BACKUP
fi
else
echo "ERROR: El directorio $LOCAL_DST_BACKUP no existe"
fi
echo "-> Finalizado a las `date +%H:%M:%S`h"
;;
*)
echo "Utilice la opción --help para más información."
;;
esac

0 comentarios:
hacer un comentario en esta entrada