https://foro.gambas-es.org/viewtopic.php?f=6&t=6351
-----------------------------------
tincho
Lunes, 08 May 2017, 21:35

Script Para Respaldar Las Aplicaciones
-----------------------------------
Hola a todos.
Debido al [url=https://foro.gambas-es.org/viewtopic.php?f=1&t=6347&highlight=]post de Shordi sobre un script bash que el hizo para hacer backups de sus programas gambas.
Me quedo picando la curiosidad por aquello de que cada vez que se hacia el backup se copiaban todos los proyectos, aunque no tengan cambios. Esto presenta el problrma de aumentar el uso de espacio de disco, creo, innecesariamente.
Asi que me puse a jugar unas horas con bash ya que hacia tiempo que no tocaba ese lenguaje.

Bueno he logrado hacer lo que me propuse, el script hace lo siguiente:
Verifica cual es el ultimo backup.
Luego verifica la fecha de cada proyecto y si es posterior al bacup entonces lo pone en en el .tar.gz caso contrario no lo pone.

El resultado es una serie de archivos .tar.gz donde el primero que se realice contendra todos los proyectos y luego cada nuevo .tar.gz tendra solo lo que hayamos cambiado luego del ultimo backup.

espero que les sea de utilidad.
[code linenumbers=false syntax=bash]
#!/bin/bash
prdir="/directoriodetrabajo/"
bkdir="/directorioderespaldo/"
# Busqueda del ultimo backup
lastbk=`date -d"1970-01-01 00:00:00" +%Y%m%d%H%M%S`
for bkfile in $(ls -f ${bkdir}/*)
do
tdate1=`stat -c %y ${bkfile}`
tdate2=`date -d"${tdate1}" +%Y%m%d%H%M%S`
echo "Date 2 "$tdate2
	if [ $tdate2 -gt $lastbk ]; then
	echo $tdate2
	lastbk=$tdate2
	fi
done
echo "Fecha del ultimo backup "$lastbk
bdir=$(basename "$sdir")
mdate=`date +%Y%m%d%H%M%S`
mzip="$mdate.tar.gz"
mtar="$mdate.tar"
# Creación de un tar vacio
tar cfT $bkdir$mtar /dev/null 
cd $prdir
for sdir in $(ls -d ${prdir}*/)
do
# Busqueda de la fecha mas reciende dentro del proyecto
	process="NEUTRO"
	bdir=$(basename "$sdir")
        flast1=`find ${sdir} -type f -printf '%TY-%Tm-%Td %TH:%TM:%TS %p\n'| sort -n | tail -1 | cut -f1 -d"."`
        echo "1) La fecha mas reciente en "$bdir" es "$flast1
        flast2=`date -d "${flast1}" +%Y%m%d%H%M%S`
        echo "2) La fecha mas reciente en "$bdir" es "$flast2
		if [ $flast2 -gt $lastbk ]; then
		process="RESPALDAR"
                else
		process="OMITIR"
		fi
         echo "3) La acción para el proyecto "$bdir" es " $process
		if [ "$process" = "RESPALDAR" ]; then
		bdir=$(basename "$sdir")
		echo $bdir" tiene cambios" 
		echo "4) Empaquetando "$bdir   
		tar -r -f $bkdir$mtar $bdir/
                else
		echo "4) Omitiendo "$bdir   
		fi
done
gzip $bkdir$mtar
/usr/bin/gambas3 &
exit
[/code]

Saludos.


-----------------------------------
shordi
Lunes, 08 May 2017, 21:42

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
Muy bueno.


-----------------------------------
shordi
Martes, 09 May 2017, 08:00

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
Una sugerencia: Antes de hacer el backup de cada día, haz una lista de las carpetas incluídas y grábala en un fichero.txt, o como lo prefieras, con el mismo nombre del backup. Tar tiene una opción para listar su contenido, si no recuerdo mal...

Es que si tienes que recuperar la última copia de un proyecto, nunca sabes en qué tar.gz estará y te tocará ir mirando de uno en uno... lo que puede ser arduo si hace mucho tiempo desde que no se modificaba ese proyecto.

Saludos


-----------------------------------
tincho
Miercoles, 10 May 2017, 23:08

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
[quote user="shordi" post="38051"]...Es que si tienes que recuperar la última copia de un proyecto, nunca sabes en qué tar.gz estará y te tocará ir mirando de uno en uno... lo que puede ser arduo si hace mucho tiempo desde que no se modificaba ese proyecto...[/quote]
Si, es verdad.
A ver si comprendo lo que propones.
Para que sea mas fácil encontrar un backup hay que crear un .txt donde se registre cada proyecto y en que tar.gz esta localizado el último backup de este.
¿Algo así?
konvertilo:20170510112013.tar.gz
tradukisto:20170509123345.tar.gz
...

Saludos.


-----------------------------------
shordi
Miercoles, 10 May 2017, 23:59

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
Exacto. Cómo hacerlo sólo con un shell script... Habría que mirarlo.


-----------------------------------
tincho
Jueves, 11 May 2017, 00:06

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
[quote user="shordi" post="38085"]Exacto. Cómo hacerlo sólo con un shell script... Habría que mirarlo.[/quote]
Sabes como se hacen matrices o colecciones en bash?

Saludos.


-----------------------------------
shordi
Jueves, 11 May 2017, 07:39

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
[quote]
Sabes como se hacen matrices o colecciones en bash?[/quote]
Pues ni idea... para esos tejemanejes siempre recurro a Gambas...

Se me ocurre que una línea de trabajo sería generar un listado de lo que hay en el archivo comprimido y comparar ese resultado con el del fichero de texto índice con alguno de los comandos de comparación de archivos, diff o alguno así...

O, hacer un programita de gambas que solucione el tema ¿por qué no?

Saludos.


-----------------------------------
tincho
Jueves, 11 May 2017, 11:42

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
[quote user="shordi" post="38088"][quote]...O, hacer un programita de gambas que solucione el tema ¿por qué no?[/quote]
Bueno, la verdad es que me intereso el tema así que ayer por la noche comencé un nuevo proyecto en gambas para gestionar los backups y hacer restauraciones y que trabaje en conjunto con el script.
Ya comentare en cuanto tenga algo funcional.

Saludos.


-----------------------------------
jguardon
Jueves, 11 May 2017, 22:05

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
¿Y por qué no usar rsync?

Con rsync puedes elegir hacer copias completas, incrementales o sólo copiar los ficheros que hayan cambiado...  Hay miles de ejemplos en la web de formas de usarlo.

Saludos


-----------------------------------
tincho
Viernes, 12 May 2017, 01:38

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
[quote user="jguardon" post="38105"]¿Y por qué no usar rsync?
Con rsync puedes elegir hacer copias completas, incrementales o sólo copiar los ficheros que hayan cambiado...  Hay miles de ejemplos en la web de formas de usarlo.
Saludos[/quote]
Le eche on vistazo a algunos ejemplos de rsync eb el sitio este:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/
Esta interesante, creo que es mucho mas eficiente que todo los de los .tar.gz pero no me queda en claro si puedo tener la opción de guardar versiones a lo largo del tiempo o siempre guarda lo ultimo, lo cual seria un poco complicado en caso de cometer un erro en el original y que la "copia" finalmente tenga el error también (en caso de usar cron)

Bueno tendré que hacer pruebas para familiarizarme.

Saludos.


-----------------------------------
shordi
Viernes, 12 May 2017, 08:12

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
Yo utilizo rsync para todas las copias de seguridad tanto en el curro como en casa. Este es el script que uso cada quince días para salvar el home en el disco externo usb3 de copias de seguridad (otras 2TB)

[code linenumbers=false syntax=bash]
#!/bin/bash

rsync -av --delete /home/jorge /media/jorge/Copias/ --exclude cache* --exclude .cache* --exclude Trash* --exclude .Trash*
[/code]

Pero rsync te da una "foto" de lo que tienes en el momento. Lo que yo hago con mi script de gambas es "una foto" cada día. Ya os digo, el único problema es el espacio en disco, pero yo tengo 2'5 Terabytes de disco y no utilizo ni una contando con todo.

Saludos.


-----------------------------------
jguardon
Domingo, 04 Junio 2017, 19:24

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
Si lo que quieres es guardar varias copias, en lugar de hacerlas incrementales, debes hacerlas completas. Lo único que tienes que hacer es concatenar la fecha en un formato válido al final del nombre del fichero comprimido y también mediante el script bash ejecutar el borrado de las copias más antiguas según tu criterio, por ejemplo para mantener siempre las 3 últimas.

Es cuestión sólo de analizar la fecha del archivo y borrarlo si procede... sencillo.

Saludos


-----------------------------------
tincho
Lunes, 05 Junio 2017, 10:09

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
[quote user="jguardon" post="38448"]Si lo que quieres es guardar varias copias, en lugar de hacerlas incrementales, debes hacerlas completas...[/quote]
Te referis a hacer una copia incremental completa con rsysnc y luego hacer una copia comprimida de este directorio "copado" ?
Si es así parece que en estos dos pasos se tiene lo mejor de los dos métodos.
Por un lado el trafico de datos se mantiene bajo y por otro se mantiene un histórico razonable.

Saludos.


-----------------------------------
jguardon
Lunes, 05 Junio 2017, 18:31

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
[quote user="tincho" post="38462"]
Te referis a hacer una copia incremental completa con rsysnc y luego hacer una copia comprimida de este directorio "copado" ?
[/quote]

No, me refiera a realizar una copia completa cada vez. Ten en cuenta que las copias incrementales dependen cada una de la inmediatamente anterior que haya sufrido cambios. Si sólo guardas la última, la información no estará ni mucho menos completa. Lo que planteas de comprimir el directorio completo tiene sentido, pero nunca lo he hecho así. Yo lo que hago es guardar siempre 3 copias completas y en cada operación (programada con el cron, claro) voy borrando la más antigua para siempre tener las tres últimas.

Saludos


-----------------------------------
tincho
Lunes, 05 Junio 2017, 22:47

Re: Script Para Respaldar Las Aplicaciones
-----------------------------------
[quote user="jguardon" post="38469"][quote user="tincho" post="38462"]
Te referis a hacer una copia incremental completa con rsysnc y luego hacer una copia comprimida de este directorio "copado" ?
[/quote]

No, me refiera a realizar una copia completa cada vez. Ten en cuenta que las copias incrementales dependen cada una de la inmediatamente anterior que haya sufrido cambios. Si sólo guardas la última, la información no estará ni mucho menos completa. Lo que planteas de comprimir el directorio completo tiene sentido, pero nunca lo he hecho así. Yo lo que hago es guardar siempre 3 copias completas y en cada operación (programada con el cron, claro) voy borrando la más antigua para siempre tener las tres últimas.

Saludos[/quote]

A ver, suponete que tenes un directorio-original con tres archivos [b]a.txt, b.txt y c.txt[/b]
0.1) Hago[i] rsync[/i] de [b]directorio-original[/b] a [b]directorio-copia[/b]. Aquí como es la primera vez se copia todo, es decir a.txt, b.txt y c.txt.
0.2) Comprimo [b]directorio-copia[/b] y todo su contenido, como [b]directorio-back-t0-fecha.tar.gz[/b]
Pasa un tiempo t1
1.1) Hago otro rsync, pero esta vez solo cambio b.txt, por lo tanto rsync solo copiara y reemplazara b.txt del directorio-copia de tal manera que ambos directorio estén iguales.
1.2) Comprimo [b]directorio-copia[/b] y todo su contenido, como [b]directorio-back-t1-fecha.tar.gz[/b]
...
Pasa un tiempo tn
n.1) Hago otro rsync, para equiparar ambos directorios.
Comprimo [b]directorio-copia[/b] y todo su contenido, como [b]directorio-back-tn-fecha.tar.gz[/b]

Cada vez que se genera un archivo tar.gz desde [b]directorio-copia[/b] este contendrá lo mismo que si se hiciera desde [b]directorio-original[/b] pero con mucho menos trafico de red.

La pregunta es ¿Que tan fiable es rsync? si no se copia algo o ambos directorios son diferentes, ¿Sale algún aviso?

Saludos.


