Backups Caseros – Remotos e Incrementales si el PC esta Encendido.

Los backups son importantes para mi y al tener varias computadoras que mejor que una haga backup dentro de otra, el problema es que hacerlo de forma manual aveces no es conveniente, primero por tiempo y segundo por que se me olvida !

Ahora bien, tener varias computadoras en casa no significa que estén todas encendidas siempre, aunque casi todos los días coinciden y durante un periodo de tiempo llegan a estar encendidas a la vez más de una computadora, así que he pensado en esto durante un tiempo y me dio por hacer un script que aproveche esos periodos de tiempo y haga un backup.

Versión 0.3.3
– Selección de puerto SSH.
– Bugs solucionados.

Versión 0.3.0
– Algunos cambios en el código, ahora funciona con bash solamente, no se puede ejecutar con sh en ubuntu si no con./
– [Bug] Mejora en los backups, revisa códigos de error, si el pc se apaga o el backup no termina no se crea el lock file.
– Se puede escoger puerto para el SSH.

Versión 0.2.2 beta

– Posibilidad de escoger otro puerto ssh.
– Cambios menores.

Versión 0.2 beta:

– Revisar si existe el lock file, si existe revisa que este no tenga más de 2 días, si tiene más de 2 días lo borra.
– Si el lock file no existe revisa que la computadora destino este online.
– Si la computadora destino esta online ejecuta rsync y hace el backup.
– Al acabar el backup crea el lock file.

Requiere:

– Rsync.
– SSH.
– Llaves RSA para conectarse sin claves a la computadora destino.

El script antes hacía lo mismo pero en versión USB, revisaba que estuviera conectado un USB conectado llamado Backup con un archivo dentro, aunque quite todo eso y lo hice para que hiciera Backup en un PC remoto que bien puede ser un servidor, que es lo que a mi me sirve, aunque supongo que sacaré la versión USB pronto.

Se puede modificar sin problemas para:

– Añadir lista de hosts, varios dominios o IPs y que intente conectar al que este disponible para hacer Backup.
– Trabajar con USB en vez de computadora remota.

En fin, el script:

#!/bin/bash
# Respaldo v 0.3.3  
# Beta en pruebas
# Por Maks Skamasle - skamasle.com | yo @ skamasle.com
# Miercoles 7 mayo 2014
# Script para backups locales ( caseros )
# Comprueba que la computadora en la que se hará backup este encendida.
# Si esta online hace backup, si no revisa más tarde ( según el cron puede ser cada 5 min)
# En caso de estar online hace el backup incremental y no se ejecuta hasta al siguiente día asignado.
# Requiere rsync y keys rsa sin clave.
##################################################################################################################
# Este script a sido liberado por si a alguien le sirve, no se garantiza que funcione, use bajo su propio riesgo.#
##################################################################################################################
host=192.168.1.1 		# ip o host del pc en donde se hará backup
count=1				# Veces que se hará ping
port=22				# Puerto SSH
respaldar=/home/skamasle/		# Ruta a respaldar.
time=2				# Cada cuantos días se quiere el backup.
rmusr=root			# Usuario remoto...
rmuta=/home/backup			# Ruta en el pc remoto /var/backup /home/user/backup /blabla
remoto=$rmusr@$host:$rmuta 	# No hace falta tocar esto..
lock=/tmp/sk-homeup.lock 	# Lock file
RSYNC=/usr/bin/rsync

if [ -e $lock ]; then
	/bin/find $lock -type f -mtime +$time | xargs rm -f
fi
backup () {
#Creamos el lock por si no acaba el backup y se vuelve a ejecutar.
/bin/touch $lock 
RSYNC -az --delete -e "ssh -p $port" $respaldar $remoto
status="$?"
if [[ $status -eq "0" ]]; then
	/bin/touch $lock
else
	#echo "Posponiendo... por código de error $status"
	/bin/rm $lock
fi
}

check () {
estas=$(ping -c $count $host |grep "received" |cut -d " " -f4)

if [[ "$estas" -eq "$count" ]]; then
	backup
else 
	#echo "Servidor off" 
	exit 1
fi
}

if [ ! -e "$lock" ]; then
	check
else
	#echo "Lock File a la vista"
	exit 1
fi

Descargar:

wget mirror.skamasle.com/scripts/sk-homeup.sh

Cron:

*/10 * * * * /ruta/sk-homeup.sh

Premisos:

chmod +x /ruta/sk-homeup.sh

Eso es todo, seguro le haré algunas mejoras conforme pasen los días y lo pruebe mejor, aunque ya quedo la beta 1.