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.