Download - Respaldos con Rsync
Backups con rsync
Por Carlos Antonio Leal saballos
Agenda
● Introduction
● Características de rsync
● rsync funcinamiento
● Trabajando con rsync
● rsync - Backups Incrementales
● Incluyendo y excluyendo ficheros del backup
● rsync remoto
Introducción
● rsync es una herramienta que permite hacer respaldos
ya sean locales o remotos
● rsync es una herramienta para realizar respaldos de
archivos y directorios
● Tiene su contraparte en Windows llamado Cygwin, el
cual opera sin ningún problema de interoperabilidad
Introducción
● Dos componentes importantes:
– Un algoritmo de delta compresión para respaldar
únicamente los archivos que han cambiado
– Un sistema mirroring para transferir datos (archivos y
directorios) de un lugar a otros con el menor consumo de
ancho de banda posible
Características de rsync ● Soporte para copiar enlaces, archivos, archivos de dispositivo, con
sus propietarios, grupos y permisos
● Se puede usar cualquier shell remota transparente, como ssh o rsh
● No es necesario ser root para usarlo
● pipelining de archivos transferidos para minimizar la latencia
● Soporte para usuarios anónimos o autentificados usando el
demonio de rsync (para hacer mirroring)
● Opciones de exclusión (exclude y exclude-from) similares a las del
GNU tar
● Modo CVS para ignorar los archivos que CVS ignoraría
rsync funcinamiento
● A nivel de un árbol de directorios con sus archivos, la idea es
sencilla. Rsync copiará ficheros y directorios tal y como estaban
en el origen.
● Al realizar una sincronización no se copia todo, sino sólo lo que
ha cambiado en el origen respecto al destino.
● El comando scp hace lo mismo, pero desperdicia ancho de banda
sobre escribiendo archivos que no han cambiado
rsync funcionamiento
● A nivel de archivos individuales, imaginemos un archivo enorme
(varios GB) de una base de datos.
● Con cp se necesita copiar todo el archivo, desperdiciando tiempo
y recursos del sistema, porque la inmensa mayoría de bloques
del archivo no ha cambiado.
● rsync analiza el archivo de origen y el de destino y sólo
transmite (de forma comprimida, además) las partes que
realmente hayan cambiado.
● Muchas distribuciones de Linux utilizan rsync para sincronizar
sus repositorios
rsync funcionamiento
● Los detractores rsync mencinan que el algoritmo utiliza
demasiada memoria y consume mucho procesador.
● También mencionan que no gestiona adecuadamente
archivos comprimidos y que hasta es capaz de corromper la
información
● Como usuario neutral recomiendo su uso racional
● Todo se resume en seleccionar las opciones correctas
Trabajando con rsync
● En su forma más sencilla de uso, es similar a un cp
– rsync -v archivo1.txt archivo2.txt
Creará una copia de archivo1.txt llamada archivo2.txt
La opción -v es para recibir información detallada
Al ejecutar con root, no mantiene los permisos
● No funciona con directorios
– rsync -v Directorio1 Directorio2
Trabajando con rsync
● Para funciones de backup no hay como la opción -a
– rsync -av Directorio1 Directorio2
-a: Esta opción combina el parámetro -r (recursivo), el -l (enlaces
simbólicos), la -p (mantener permisos), la -t (mantener la hora), la -
g (mantenga el grupo), la -o (mantenga el propietario), la -D (mantener
los ficheros de dispositivo (sólo para root)).
NO se mantienen los hard links (-H) ni las ACLs (-A).
La opción -a realiza s una copia exacta de una jerarquía de ficheros y
directorios.
Trabajando con rsync
● Al crear un nuevo directorio, rsync sincronizará los
cambios
– mkdir Directorio1/Data
– rsync -av Directorio1 Directorio2
Simplemente se sincronizan el nuevo directorios
● Igual si se trata de un archivo
– echo “hola mundo” > Directorio1/Data/saludo.txt
– rsync -av Directorio1 Directorio2
Trabajando con rsync ● Al modificar un archivo
– echo “hola mundo otra vez” >> Directorio1/Data/saludo.txt
– rsync -av Directorio1 Directorio2
● rsync sincroniza todo el archivo, no es un error, pero se puede
mejorar con la opción --no-whole-file
– rsync -av --no-whole-file Directorio1 Directorio2
● La opción -z comprime el bloque antes de enviarlo
– rsync -avz --no-whole-file Directorio1 Directorio2
● Ambas opciones disminuyen el consumo de ancho de banda pero
incrementan el uso de procesador y memoria.
Trabajando con rsync ● rsync para decidir su un archivo ha cambiado normalmente sólo
mira la fecha del archivo y su tamaño, si ninguna de las dos cosas
cambia, rsync lo copiará.
● En algunos escenarios muy especiales (Bases de Datos por
ejemplo) puede ocurrir que dos archivos con la misma fecha y
tamaño sean diferentes, la opción -c permite calcular el checksum
para determinar si realmente los ficheros son iguales, esto implica
también mayor impacto en el procesador y la memoria
– rsync -acvz --no-whole-file Directorio1 Directorio2
Trabajando con rsync
● Poner o no poner las barras al final de los nombre del
directorio tienen implicaciones distintas
– /path/foo significa el directorio foo
– /path/foo/ significa lo que hay dentro de foo
● A continuación algunos ejemplos para entenderlo
mejor
Trabajando con rsyn
● Dos directorios sincronizados y exactamente
iguales
– rm -Rf Directorio2
– rsync -av Directorio1/ Directorio2/
● Se comprueba con ls -al Directorio2
– rm -Rf Directorio2
– rsync -av Directorio1/ Directorio2
● Se comprueba con ls -al Directorio2
Trabajando con rsyn
● Copiar Directorio1 dentro de Directorio2
– rm -Rf Directorio2
– rsync -av Directorio1 Directorio2
● Se comprueba con ls -al Directorio2
– rm -Rf Directorio2
– rsync -av Directorio1 Directorio2/
● Se comprueba con ls -al Directorio2
Trabajando con rsync
● Eliminando archivos que ya no necesitan estar en el
respaldo
– touch Directorio2/archivoviejo.txt
– rsync -av --delete Directorio1/ Directorio2/
● Se debe proceder con cuidado, si no especificamos
bien el directorio de destino puede ocurrir un gran
desastre
Trabajando con rsync
● Otra opción interesante puede ser –u para que no sobre-escriba
los archivos si son más recientes
– touch Directorio1/archivonuevo.txt
– rsync -av --delete Directorio1/ Directorio2/
● Actualizar la fecha del archivo en el respaldo
– touch Directorio2/archivonuevo.txt
– rsync -av --delete -u Directorio1/ Directorio2/
● Se debe proceder con cuidado, si no especificamos bien el
directorio de destino puede ocurrir un gran desastre
rsync - Backups Incrementales
● Supongamos que tenemos dos
directorios Directorio1 y Directorio2 perfectamente sincronizados y
actualizamos un archivo en el directorio origen:
– rsync -av Directorio1/ Directorio2/
– echo prueba >> Directorio1/archivo1
● Si volvemos a sincronizar rsync borrará la versión anterior del archivo1
para dejar la nueva versión, si no queremos eliminar la versión previa se
puede utilizar la opción –b
rsync - Backups Incrementales
rsync -avvb --delete --backup-dir=$PWD/rsync/backup_$(date +%y%m%d%H%M) Directorio1/ Directorio2/
– Esto creará un directorio “rsync/backup con al fecha” en la ruta que estemos utilizando,
– Es importan que estos backups incrementales no estén dentro de ninguno de los directorios que se estén
sincronizando para evitar duplicidad y/o eliminación por el mismo efecto del respaldo.
rsync - Backups Incrementales
● También podemos hacer backups incrementales con las opciones:
– --compare-dest=DIR: Es como un backup incremental sólo se tiene en el directorio
destino los ficheros que han cambiado desde el último backup
– --compare-dest, está la --copy-dest=DIR, que hace lo mismo que la anterior pero
además copia los ficheros que no hayan cambiado. ¡Pero ojo!, la ventaja de esta
opción es que la copia de los ficheros que no han cambiado es local, de forma que en
un rsync remoto, todos los ficheros que ya estaban en DIR no se tienen que
transferir. La desventaja es que necesita mucho espacio en disco.
Incluyendo y excluyendo
ficheros del backup ● La mayoría de las veces no se trata de un backup de un único directorio
● Todo administrador de servidores tiene una lista determinada de directorios que quiere respaldar. También tiene una lista de directorios que no quiere respaldar
● En esos casos, se ejecuta el comando varias veces o se usa una lista de directorios a respaldar
● Es decir, tener un script de backup que lance rsync con las opciones deseadas Las opciones son:
– --exclude=PATTERN
– --exclude-from=FILE
– --include=PATTERN
– --include-from=FILE
– --files-from=FILE
Incluyendo y excluyendo
ficheros del backup ● Imaginemos que queremos hacer un backup de los directorios
“/var/log/” y “/var/www/“.
● Podríamos usar un comando como:
rsync -av --delete --include-from=lista_dirs_backup.txt / /media/disco/Backup/
en el que el fichero lista_dirs_backup.txt contiene:
+ /var/
+ /var/www/***
+ /var/log/***
- *
Incluyendo y excluyendo
ficheros del backup – En la última línea le especificamos con “- *” que todo lo que en ese
punto ya no ha pasado el filtro, que sea descartado.
– Tres asteriscos (***) para especificar que el propio directorio
especificado también pasa el filtro,
rsync remoto
● En la máquina destino es posible usar el propio proceso rsync funcionando como
demonio y escuchando por defecto en el puerto 873 para recibir estas
conexiones, pero es mucho más cómodo y fácil hacerlo por SSH, algo para lo
que rsync ya está preparado por defecto.
– rsync -av --delete dirA usuario@hostremoto:/backup/
– rsync -e "ssh -p 987" --delete dirA usuario@hostremoto:/backup/
Presentación: Backups con rsync
Autor: Carlos Antonio Leal Saballos ([email protected])
● Managua, Nicaragua, Octubre del 2013
● Licencia: CC-BY-SA 3.0 Unported
● http://creativecommons.org/licenses/by-sa/3.0/deed.es
● Datos tomados de http://www.vicente-navarro.com – CC-BY-SA 3.0
Por su Atensión
Muchas Gracias