#!/bin/bash # # mauro, backup # # clear ############################ # DECLARACION DE VARIABLES # ############################ ##Tipo de copia solo estos valores (incremental o diferencial) Tcopia=incremental ##IP remota IPremota=192.168.11.24 ##Usuario remoto User_remoto=root ##Disco duro remoto DDremoto=sda6 ##Disco Duro local DDlocal=sda6 ##Nombre del fichero de la copia completa nomb_backup=`echo $(date +%Y-%m-%d)_fullbackup.tar.bz2` ##nombre del fichero de la copia incremental o diferencial nomb_backup_indi=`echo $(date +%Y-%m-%d)_indibackup.tar.bz2` ##listado de aplicaciones instaladas, se guarda en el escritorio del usuario temporalmente dpkg --get-selections > /tmp/bk-paquetes-instalados.txt ##Ping para controlar que el equipo remoto este online ping=`ping -c 2 $IPremota|grep packet\ loss|awk '{print $6}'` ##Tamaño de /etc tam_etc=`du -ms /etc/|awk '{print $1}'` ##Tamañp de /var/log tam_varlog=`du -ms /var/log/|awk '{print $1}'` ##Tamaño de /var/lib tam_varlib=`du -ms /var/lib/|awk '{print $1}'` ##Tamaño de /home tam_home=`du -ms /home/|awk '{print $1}'` ##Suma de todos los tamaños ^-^ let tam_total=$tam_etc+$tam_varlog+$tam_varlib+$tam_home ##Espacio disponible localmente tam_dispo_local=`df -m|grep $DDlocal|awk '{print $4}'` ## Dia para el Backup Completo dia_full=`date +%u` ##fecha de la ultima copia completa fecha_ult_backup=`ssh $IPremota ls -t /copias|grep full|head -1|cut -d _ -f1` # ## Directorio y archivos a ser salvados. # datos='/etc /home /var/log /var/lib /tmp/bk-paquetes-instalados.txt ' ## Comprobamos que el equipo remoto tenga conexion antes de empezar todo. if [ $ping != 0% ]; then echo "El equipo en el que va a guardar la copia de seguridad, no se encuenta operativo." echo "contacte con el administrador" exit fi ######################################## # COMPROBACIONES LOCALES Y EMPAQUETADO # ######################################## ## Comprobamos que la copia pueda ser almacenada en nuestro equipo if [ $tam_total -lt $tam_dispo_local ]; then echo "Hay espacio diponible, se procede a empaquetar..." ##creamos una carpeta pra almacenar la copia if [ ! -d /backups_mauro ]; then mkdir /backups_mauro echo "se ha creado un directorio para las copias de seguridad." fi if [ $dia_full -eq 7 ]; then echo "se creara una copia completa" #borramos la copia full. rm -r /backups_mauro/*_full*2> /tmp/logrm #borramos las copias incrementales o diferenciales rm -r /backups_mauro/*_indi*2> /tmp/logrm ## Creamos nuestra copia de seguridad #tar -cjf /backups_mauro/$nomb_backup /home /etc /var/log /var/lib /tmp/bk-paquetes-instalados.txt tar -cjPf /backups_mauro/$nomb_backup $datos ##guardamos el tamaño de la copia, lo usaremos mas adelante tam_copia=`du -m /backups_mauro/$nomb_backup|awk '{print $1}'` ##borramos el archivo temporal rm /tmp/bk-paquetes-instalados.txt2> /tmp/logrm echo "se ha empaquetado correctamente y se almaceno en /backups_mauro" else case $Tcopia in incremental) echo "ha elegido la copia incremental" tar cjPgf /tmp/copia.incremental /backups_mauro/$nomb_backup_indi $datos echo "se ha creado la copia incremental " ;; diferencial) echo "ha eleguido la copia diferencial" tar cjPNf $fecha_ult_backup /backups_mauro/$nomb_backup_indi $datos echo "se ha creado la copia diferencial " ;; esac ##guardamos el tamaño de los incrementales o diferenciales tam_copia=`du -m /backups_mauro/$nomb_backup_indi|awk '{print $1}'` #fin de la comprobacion del dia fi else echo "Lo siento, pero no hay espacio suficiente para realizar el empaquetado..." exit #fin comprobacion del espacio fi ################################# # ENVIAR DATOS AL EQUIPO REMOTO # ################################# #comprobamos que la carpeta en la que vamos a grabar los datos existe y si no la craamos if test -z `ssh 192.168.0.24 ls -d /backups 2> /tmp/error.carpeta`; then ssh 192.168.0.24 mkdir /backups|echo se creo una carpeta; fi ## espacio del disco, en el equipo remoto. tam_espacio_remoto=`ssh $User_remoto@$IPremota df -m|grep $DDremoto|awk '{print $4}'` ##Si hay Espacio en el equipo remoto. if [ $tam_copia -lt $tam_espacio_remoto ]; then echo "hay espacio en el pc remoto, se procede a transferir la copia." ## Si es domingo, el bk completo case $dia_full in #si el dia es 7(domingo) hace la copia completa 7) ##Copiamos en el otro equipo la copia completa scp /backups_mauro/$nomb_backup $User_remoto@$IPremota:/backups echo "se ha copiado el Backup completo" ## Variables para comprobar MD5SUM md5_remoto=`ssh $User_remoto@$IPremota md5sum /backups/$nomb_backup|awk '{print $1}'` md5_local=`md5sum /backups_mauro/$nomb_backup|awk '{print $1}'`;; #si el dia no es domingo, hace la copia de las incrementales o diferenciales *) ##Copiamos en el otro equipo los bks scp /backups_mauro/$nomb_backup_indi $User_remoto@$IPremota:/backups echo "se ha copiado el diferencial o incremental" ## Variables para comprobar MD5SUM md5_remoto=`ssh $User_remoto@$IPremota md5sum /backups/$nomb_backup_indi|awk '{print $1}'` md5_local=`md5sum /backups_mauro/$nomb_backup_indi|awk '{print $1}'`;; esac ## comprobamos la integridad de los datos if [ $md5_remoto = $md5_local ]; then echo "la copia se realizo con exito" else ## Si algo ha fallado lo intetengo N veces, si no lo logra, ## el programa termina. cont=4 while [ $cont -gt 0 ]; do echo "la copia ha fracazado . quedan "$cont" intentos" if [ $dia_full -eq 7 ]; then scp /backups_mauro/$nomb_backup $User_remoto@$IPremota:/backups md5_remoto=`ssh $User_remoto@$IPremota md5sum /backups/$nomb_backup|awk '{print $1}'` else scp /backups_mauro/$nomb_backup $User_remoto@$IPremota:/backups md5_remoto=`ssh $User_remoto@$IPremota md5sum /backups/$nomb_backup|awk '{print $1}'` fi if [ $md5_remoto != $md5_local ]; then let cont=$cont-1 else let cont=-1 fi done #si el contador llega a 0 es que no se pudo realizar la copia y salgo del programa if [ $cont -eq 0 ]; then echo "lo siento pero fue imposible realizar la copia" echo "ponte en contacto con el administrador." exit else echo "aunque surgieron problemas, la copia se logro realizar" #fin de comprobacion del contador fi #fin de comprobacion MD5 fi else echo "lo siento, pero en el equipo remoto no hay espacio." echo "hay libres solo"$tam_espacio_remoto"m" fi # fin de la copia de datos. ## colorin colorado... este script ha terminado... ^^