Jul 1, 2009

Copias de seguridad con rsync

Rsync es una herramienta muy utilizada en el mundo Linux para hacer copias de seguridad o backups, tanto de ficheros como de directorios.

Una de las principales ventajas de esta aplicación es que permite realizar copias incrementales: cada uno de los ficheros sobre los que se aplica un backup es dividido por rsync en diferentes bloques, obteniendo de cada uno de ellos una suma. Este checksum agilizará enormemente las ejecuciones de rsync, ya que cuando tenga que hacer un backup por segunda vez sobre un mismo conjunto de archivos, lo que hará será comprobar las sumas de los diferentes bloques (operación muy rápida en tiempos de cómputo), y aquellos bloques de datos cuyo checksum no coincida serán los que realmente se copien, es decir, realizará una copia de seguridad por incrementos.

Vamos a suponer que se quiere hacer un backup de todo el directorio de configuración de Apache y depositarlo en /backup/ (las pruebas se realizarán sobre una distribución CentOS 5.3).
# tree /etc/httpd/
/etc/httpd/
|-- conf
| |-- httpd.conf
| `-- magic
|-- conf.d
| |-- README
| |-- logserver.conf
| |-- proxy_ajp.conf
| `-- welcome.conf
|-- logs -> ../../var/log/httpd
|-- modules -> ../../usr/lib64/httpd/modules
`-- run -> ../../var/run

5 directories, 6 files

Para realizar la copia de seguridad se ejecutará rsync con las siguientes opciones:
  • -a, --archive: aplicar recursión a los directorios y conservar la mayoría de los permisos.
  • -l, --links: conservar los enlaces simbólicos de los archivos en el destino.
  • -t, --times: conservar la fecha de los archivos en el destino.
  • -g, --group: conservar el grupo de los archivos en el destino.
  • -v, --verbose: incrementar la información mostrada por pantalla durante la transferencia.
  • -b, --backup: realizar copias de seguridad incrementales.
  • --no-whole-file: no copiar el fichero entero. Para archivos locales, rsync usa por defecto la opción -W (--whole-file), ya que considera que los recursos empleados para calcular la diferencia son mucho mayores que el hecho de copiar el fichero entero.
Otra opción bastante interesante es --delete, que borra aquellos ficheros ya existentes en el destino pero que no se encuentren en el origen.
# rsync -altgvb /etc/httpd/ /backup/
building file list ... done
logs -> ../../var/log/httpd
modules -> ../../usr/lib64/httpd/modules
run -> ../../var/run
conf.d/
conf.d/README
conf.d/logserver.conf
conf.d/proxy_ajp.conf
conf.d/welcome.conf
conf/
conf/httpd.conf
conf/magic

sent 49565 bytes received 182 bytes 99494.00 bytes/sec
total size is 48979 speedup is 0.98

Como puede observarse en la salida anterior, se han copiado un total de 49565 bytes.

Ahora añadiremos cuatro caracteres al fichero httpd.conf y a continuación volveremos a aplicar la copia de seguridad:
# echo "abcd" >> /etc/httpd/conf/httpd.conf

# rsync -altgvb --no-whole-file /etc/httpd/ /backup/
building file list ... done
conf/httpd.conf

sent 617 bytes received 342 bytes 1918.00 bytes/sec
total size is 48984 speedup is 51.08

Puede observarse que no se han enviado todos los archivos, sino simplemente el bloque o incremento que se ha visto afectado: 617 bytes.

Al realizar las copias hay que tener en cuenta si el directorio origen se finaliza o no con la barra:
# rsync -altgvb --no-whole-file /etc/httpd /backup/
# rsync -altgvb --no-whole-file /etc/httpd/ /backup/

La primera opción copia el directorio httpd y la segunda el contenido del directorio httpd.

Y ya por último, decir que tenemos la posibilidad de hacer backups en una máquina remota:
# rsync -altgvb --no-whole-file /etc/httpd root@192.168.1.20:/backup/

Para que el comando anterior no nos pida la clave cada vez que se ejecute, es conveniente configurar el cliente y el servidor SSH implicados a través de claves RSA.

No comments:

Post a Comment