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