Copias de respaldo incrementales con rsync |
Este documento explicará como usar rsync para hacer copias de respaldo (backups) incrementales de la información de manera remota, es decir, aquellos que almacenan sólo la información que ha cambiado desde la última vez que la copia de seguridad fue hecha en una maquina diferente a la que tiene la informacion. |
Contents
Contexto
rsync es una herramienta que nos permite sincronizar remotamente dos máquinas. Es útil para realizar copias de seguridad incrementales de nuestros datos, de este modo si una carpeta mide 3 GB y queremos almacenarla en otro computador, sólo la primera vez los 3 GB serán transferidos, luego sólo se transferirán los pequeños cambios que haya entre el servidor principal donde están los datos y la máquina donde hemos hecho nuestra copia de seguridad. Para mayor información se recomienda visitar:
Haga copias de su sitio web con rsync (En inglés y la fuente principal de este documento)
Tutorial
Primero: Instalación y configuración de rsync
Para que se puedan hacer copias incrementales de la información se requiere que tanto la máquina principal (al que de ahora en adelante nos referiremos como principal.com), como la máquina de respaldo (que llamaremos respaldo.com) tengan instalado rsync. En caso de no tenerlo es necesario instalarlo (En debian basta con el clásico apt-get install rsync).
Además de eso supondremos que se tiene un usuario en el servidor principal al que llamaremos simplemente usuario-p. Para hacer un backup usando rsync basta con ejecutar desde la máquina de respaldo el siguiente comando:
rsync -avz -e ssh ejemplo@principal.com:/carpeta/para/salvar /lugar/donde/salvarla
con lo cual estamos indicando que nos conectaremos a la máquina principal.com mediante ssh con la cuenta del usuario ejemplo y haremos una sincronización mediante rsync de lo que está en la ruta /carpeta/para/salvar de ese servidor y lo dejaremos en el directorio /lugar/donde/salvarla del servidor respaldo.com. Una vez ejecutemos dicho comando, saldrá en la consola algo como esto:
The authenticity of host 'principal.com (192.168.0.100)' can't be established. RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23. Are you sure you want to continue connecting (yes/no)?
a lo que respondemos yes (perdonarán el spanglish :-P ). Colocamos la clave del usuario usuario-p, en el servidor principal que se nos preguntará después y la sincronización entonces se llevará a cabo copiando las cosas en la máquina desde la que ejecutamos el comando.
rsync via ssh sin solicitar contraseña
Ahora veremos cómo hacer para que esta comando no nos pida clave cada vez que lo ejecutemos. Para que la automatización del backup funcione más adecuadamente generaremos un par de llaves privadas y públicas en el servidor respaldo.com. Para esto hacemos lo siguiente en dicho servidor:
mkdir ~/rsync ssh-keygen -t dsa -b 2048 -f ~/rsync/mirror-rsync-key
Veremos algo similar a esto:
Generating public/private dsa key pair. Enter passphrase (empty for no passphrase): [press enter here] Enter same passphrase again: [press enter here] Your identification has been saved in /root/cron/mirror-rsync-key. Your public key has been saved in /root/cron/mirror-rsync-key.pub. The key fingerprint is: 68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 root@mirror
El anterior mensaje nos pide una frase clave para la generación de los pares de llaves, pero ahí no colocaremos ninguna, de modo que la copia de respaldo se pueda hacer sin intervención humana. Presionamos entonces dos veces la tecla "Enter".
Y luego copiamos la clave pública recien generada al servidor principal:
scp ~/rsync/mirror-rsync-key.pub usuario-p@principal.com:
Ahora nos conectamos al servidor principal.com como el usuario-p usando ssh y una vez adentro creamos un archivo que tenga las llaves autorizadas para conectarse a esta máquina. Para esto, hacemos lo siguiente:
mkdir ~/.ssh chmod 700 ~/.ssh mv ~/mirror-rsync-key.pub ~/.ssh/ cd ~/.ssh touch authorized_keys chmod 600 authorized_keys cat mirror-rsync-key.pub >> authorized_keys
El archivo authorized_keys debería lucir algo así:
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom== usuario-r@respaldo.com
Ahora, para permitir conexiones a esta máquina sólo desde la máquina respaldo.com, como el usuario-r y a través únicamente de rsync debemos adicionar las siguientes líenas al comienzo del archivo authorized_keys
command="/home/usuario-r/rsync/checkrsync",from="respaldo.com",no-port-forwarding,no-X11-forwarding,no-pty
Obsérvese que tenemos que cambiar /home/usuario-r/rsync/checkrsync y respaldo.com en el comando anterior, por los parámetros específicos (cambios similares se aplican para todo el documento, pero en comandos tan largos puede perderse de vista).
Ahora creamos un script home/usuario-p/rsync/checkrsync que rechace todos los comandos ejecutados remotamente por el usuario-r en el servidor de respaldo, salvo el rsync
mkdir ~/rsync nano ~/rsync/checkrsync
y allí pegamos las siguientes líneas:
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esacAhora damos los permisos adecuados a ese script:
chmod 700 ~/rsync/checkrsync
Ahora salimos de la máquina principal y luego probamos que podemos entrar sin necesidad de acreditarnos, desde la máquina de respaldo. Para esto último hacemos:
rsync -avz -e "ssh -i /home/usuario-p/rsync/mirror-rsync-key" ejemplo@principal.com:/carpeta/para/salvar /lugar/donde/salvarla
A diferencia del comando que dimos al comienzo, este no nos debe solicitar ninguna clave en principal.com para hacer la sincronización, simplemente indicará que se está llevando a cabo.
Luego veremos cómo automatizar la labor cada x minutos colocándolo en un cron.
Rsync de una carpeta con mucho uso
Este script ejecuta rsync constantemente hasta que copie exitosamente una carpeta.
salida=1
while [ $salida -ne 0 ]; do
rsync -av /novell/CUN_SOFTWARE/ /backup/novell/latest/CUN_SOFTWARE/
salida=$?
doneKmilo: En mi caso lo uso para copiar una carpeta de una particion montada por red, que esta bajo fuerte uso y por ello suele presentar errores al copiar,
|
Esta sección es un esbozo en construcción. Se aprecian tus aportes y paciencia |
