Backup con Rsync en Ubuntu

26 10 2010

Hoy he conocido el comando rsync gracias una problemática de respaldos que estaban realizando en el lugar en donde estoy haciendo la practica. El punto es que estuve buscando una herramienta libre que hiciera respaldos incrementales para winbugs (lamentablemente lo usan, pero la vez que puedo les entrego herramientas libres y lo que se pierden por no tener Linux), en eso doy con DeltaCopy, un programa (para windows) que hace uso de rsync a través de Cygwin. Y eso me doy la idea para programar este script para hacer respaldos de directorios tanto locales como remotos a través de ssh. Para hacerla mas amigable he usado zenity y libnotify1. Antes de ejecutar el script instalaremos las dependencias con el siguiente comando:

sudo aptitude install openssh-server openssh-client zenity libnotify1 rsync

Script:

#!/bin/bash
#Creado por leonciokof
#lgaticastyle@gmail.com
#http://ubuntuparatodos.wordpress.com
#Licencia GPL
#Dependencias: openssh-server openssh-client zenity libnotify1 rsync

zenity --info --text="Backup con Rsync by Leonciokof"

backupLocal(){
zenity --info --text="Seleccionar el directorio que desea respaldar (origen)"
dirOrigen=`zenity --file-selection --title="Seleccionar el directorio que desea respaldar" --directory`
case $? in
1)
menu;;
esac

zenity --info --text="Seleccionar el directorio de respaldo (destino)"
dirDestino=`zenity --file-selection --title="Seleccionar el directorio de respaldo" --directory`
case $? in
1)
menu;;
esac

notify-send "Inicio del Respaldo"
rsync -altgvb "$dirOrigen/" "$dirDestino"
}

backupRemoto(){
zenity --info --text="Seleccionar el directorio que desea respaldar"
dirLocal=`zenity --file-selection --title="Seleccionar el directorio que desea respaldar" --directory`
case $? in
1)
menu;;
esac

zenity --info --text="Seleccionar el directorio de respaldo remoto"
dirRemoto=`zenity --entry --title="Directorio Remoto" --text="Introdusca la ruta del directorio remoto, ej: /home/leonardo/Respaldo/"`
case $? in
1)
menu;;
esac
if [ "$dirRemoto" = "" ]; then
zenity --error --text="Error, no ha ingresado un directorio"
menu
fi

usuario=`zenity --entry --title="Usuario Remoto" --text="Introdusca el nombre del ususario remoto, ej: leonardo"`
case $? in
1)
menu;;
esac
if [ "$usuario" = "" ]; then
zenity --error --text="Error, no ha ingresado un usuario"
menu
fi

ip=`zenity --entry --title="Direccion IP Remota" --text="Introdusca la direccion IP remota, ej: 192.168.1.2"`
case $? in
1)
menu;;
esac
if [ "$ip" = "" ]; then
zenity --error --text="Error, no ha ingresado una direccion IP"
menu
fi

claveSsh=`find ~/.ssh/ -iname "id_rsa.pub"`
if [ -f "$claveSsh" ]; then
ssh-copy-id -i ~/.ssh/id_rsa.pub "$usuario"@"$ip"
else
zenity --info --text="Dejar en blanco la palabra clave"
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub "$usuario"@"$ip"
fi

notify-send "Inicio del Respaldo"
rsync -e ssh -altgvb "$dirLocal" "$usuario"@"$ip":"$dirRemoto"
}

menu(){
tipo=`zenity --list --title="Elija el tipo de respaldo" --radiolist --print-column=2 \
--column="" --column="Tipo" \
TRUE	"Local" \
FALSE	"Remoto"`
case $? in
1)
exit 1;;
esac
if [ "$tipo" = "Local" ]; then
backupLocal
else
backupRemoto
fi
}

menu
notify-send "Respaldo Finalizado"
zenity --info --text="Respaldo realizado satisfactoriamente"

Descarga: Backup.sh

Para ejecutar el script le dan doble clic y eligen la opción ”Ejecutar en una terminal”

Notas: Para el respaldo remoto debe tener instalados los paquetes openssh-server y openssh-client en ambos equipos, ademas debe conocer la dirección ip del equipo remoto (en consola ejecutar ifconfig), conocer la ruta de la carpeta de respaldo y conocer un usuario que tenga cuenta en el equipo remoto.

Advertisement

Acciones

Información

Deja un comentario

Fill in your details below or click an icon to log in:

Logo de WordPress.com

You are commenting using your WordPress.com account. Log Out / Cambiar )

Twitter picture

You are commenting using your Twitter account. Log Out / Cambiar )

Facebook photo

You are commenting using your Facebook account. Log Out / Cambiar )

Connecting to %s




Seguir

Get every new post delivered to your Inbox.