Copias de Respaldo III: El Poder de Rsync

Enviado por Black Rider el 30 Octubre, 2011 - 15:11.

Bienvenidos a la tercera entrega de COPIAS DE RESPALDO, en la que hablaremos de una herramienta extremadamente potente: rsync. Rsync es una aplicación especialmente indicada para realizar copias de respaldo en discos duros externos o unidades en red. Es sencillo de usar, y está disponible en casi cualquier instalación por defecto de GNU/Linux, por lo que es una solución muy socorrida para usuarios domésticos que mantengan un dispositivo de almacenamiento independiente.

¿QUÉ ES? CONCEPTOS BÁSICOS

Dicho de forma poco rigurosa, rsync es una versión ampliada de la orden cp. Rsync es, sin embargo, un poco más inteligente, dado que es capaz de comparar los contenidos del directorio de origen con el directorio de destino y copiar sólo los archivos que sean diferentes.

En vez de quemarte la cabeza con explicaciones detalladas, voy a emplear algunos ejemplos:

Para copiar el contenido de /home a /mnt/usb/backup:

# rsync -av /home /mnt/usb/backup

-a -----> Le indica a rsync que aplique varias opciones para archivar los datos, tales como conservar los permisos. Más detalles en el manual.
-v -----> Le indica a rsync que muestre información del proceso de copia en pantalla mientras se lleva a cabo. Puede utilizarse esta opción múltiples veces para aumentar la cantidad de información mostrada en la pantalla.

Asumiendo que /mnt/usb/backup fuese un directorio vacío, lo que rsync haría sería limitarse a copiar los contenidos de /home del mismo modo que cp. Tendríamos una copia de respaldo completa de ése directorio.

Ahora bien, si dentro de una semana quieres hacer un nuevo backup de tu /home, no necesitas borrar /mnt/usb/backup y volver a copiarlo todo. Empleando la siguiente línea, rsync se limitará a buscar las diferencias que existen entre /home y /mnt/usb/backup y a copiar sólo los archivos nuevos o los que hayan cambiado.

# rsync -av --delete /home /mnt/usb/backup

--delete -----> En el modo por defecto, los archivos que se hayan borrado en el origen no serán borrados en el destino (y el respaldo no será fiel al original) si no se especifica esta opción.

Ahora que ya has visto el manejo básico, vamos a empezar a hacer virguerías.

COPIA DE RESPALDO DECREMENTAL SENCILLA

Imaginad que yo hiciese una copia de respaldo completa de una carpeta.

$ rsync -av /home/blackrider/Mis_Novelas /media/Encrypted_Drive

Imaginad que dos horas después me cabreo porque mi editor piensa que La Espada Vengadora es infumable y no me la quiere publicar. Me da un ataque psicótico y borro dicha novela de mi disco duro.

$ rm /home/blackrider/Mis_Novelas/La_Espada_Vengadora.odt

Imaginad que justo después tomo una nueva copia de respaldo.

$ rsync -av --delete /home/blackrider/Mis_Novelas /media/Encrypted_Drive

Con ésta última orden, rsync sobreescribiría cualquier archivo que hubiese sido modificado entre el primer backup y éste, y borraría en el dispositivo de respaldo cualquier archivo que hubiese sido borrado en el origen, incluyendo La_Espada_Vengadora.odt

Imaginaos que tres minutos después recuerdo que me tiré un año entero para escribir esa novela, me digo que el calvo asqueroso de la editorial no tiene ni idea de arte, que la historia es buena y que quiero recuperarla.

Ahora imaginaos lo al que lo pasaría cuando descubriese que el archivo no está disponible en el directorio original (porque lo borré yo) ni en el directorio de backup (porque lo borró rsync automáticamente).

¿Cómo se puede evitar éste escenario de pesadilla? Pues guardando los archivos borrados o modificados en un directorio a parte, en vez de destruyéndolos. Rsync es capaz de mover a una carpeta especificada los archivos que de otro modo borrarían o modificarían al sincronizar. Un mecanismo sencillo es el siguiente:

$ rsync -av  --delete --backup –backup-dir=/media/Encrypted_USB /home/blackrider/Mis_Novelas /media/Encrypted_Drive

Lo que esto hace es sincronizar /media/Encrypted_Drive con /home/blackrider/Mis_Novelas, y guardar los archivos que de otro modo se desecharían en /media/Encrypted_USB. De este modo, si dentro de dos semanas el usuario descubre que necesita un archivo antiguo, podrá recuperarlo desde Encrypted_USB.

La mejor manera de emplear éste enfoque consiste en guardar los archivos modificados/eliminados en carpetas fechadas.

Día 1:

$ mkdir -v  /media/Encrypted_Drive/RESPALDO
$ rsync -av /home/blackrider/Mis_Novelas /media/Encrypted_Drive/RESPALDO

Día 2 y sucesivos:

$ mkdir -v /media/Encrypted_Drive/`date -I`
$ rsync -av  --delete --backup --backup-dir=media/Encrypted_Drive/`date -I` /home/blackrider/Mis_Novelas /media/Encrypted_Drive/RESPALDO

COPIA DE RESPALDO INCREMENTAL CON UN POCO MÁS DE MIGA

El backup decremental sencillo es útil para evitar perder archivos por error o estupidez, y debería bastar para crear copias de respaldo domésticas simples de directorios aislados. Es, sin embargo, una solución poco elegante. Hay una manera mucho más refinada de conservar los datos y evitar algunos inconvenientes que podrían derivarse del método anterior.

Día 1:

$ mkdir -v  /media/Encrypted_Drive/`date -I`
$ rsync -av /home/blackrider/Mis_Novelas /media/Encrypted_Drive/`date -I`

Día 2 y sucesivos:

$ mkdir -v  /media/Encrypted_Drive/`date -I`
$ rsync -av --delete --link-dir=[[[La carpeta donde tengas el backup anterior]]  /home/blackrider/Mis_Novelas /media/Encrypted_Drive/`date -I`

Éste mecanismo produce una carpeta fechada distinta cada vez que se realiza un backup. Cada carpeta contiene una imagen 100% representativa del directorio al que respalda, porque cada vez que se hace una nueva copia de respaldo, rsync tira enlaces duros desde los archivos invariantes de la copia de respaldo anterior e importa los demás desde el original. Como los enlaces duros no ocupan espacio a efectos prácticos, cada carpeta contiene una copia utilizable pero ocupa sólo lo que ocupan los cambios realizados desde el momento del backup anterior.

LIMITACIONES:

Rsync almacena los metadatos de tus archivos en el sistema de ficheros receptor. Si empleas un sistema de ficheros que no soporte tus metadatos, no serán incluidos en el backup. Particularmente, los permisos, los atributos extendidos (como los de Selinux) o los ACL pueden perderse si empleas sistemas de ficheros incompatibles tales como FAT32 o NTFS.

Rsync compara los archivos de la copia de respaldo con los originales para averiguar cuáles borrar, cuales mantener y cuales actualizar. Para tal comparación, rsync utiliza por defecto el tiempo de modificación (mtime) y el tamaño de los archivos. Dado que, bajo determinadas circunstancias, algunos archivos pueden cambiar sin ver alteradas tales características, existe la posibilidad de que rsync se equivoque y no sincronice esos datos. La probabilidad es escasa, pero debe ser tenida en cuenta y sopesada. Concretamente, algunos programas permiten abrir y modificar archivos pero no son capaces de reasignarles un tiempo de modificación nuevo, así que un documento que fuese manipulado con este tipo de herramientas pero que no cambiase de tamaño sería ignorado.

Es una buena idea especificar la opción --numeric-owner, dado que de otro modo la asignación de usuarios y grupos en el momento de la restauración puede fallar si se restaura desde un LiveCD u otra distribución.

OTRAS OPCIONES INTERESANTES:

--dry-run --->> No copia los archivos, sólo realiza una simulación. Es útil para averiguar los cambios entre el sistema original y un backup, por ejemplo.
--inplace --->> Por defecto, cuando rsync se dispone a actualizar un archivo, lo que hace es borrar la versión antigua y copiar la moderna desde cero. Con esta opción, rsync sólo actualiza los componentes del archivo que han variado.
-H --->> Preserva los enlaces duros encontrados en el origen, que de otro modo serían tratados como archivos independientes.
-A --->> Conserva los ACL de los archivos (si procede).
-X --->> Conserva los atributos extendidos (si procede).
-S --->> Activa el manejo eficiente de archivos dispersos (como los de descargas incompletas de algunos programas de torrent). No compatible con --inplace.
--checksum --->> Utiliza sumas de comprobación para comparar los contenidos de los directorios de origen y destino, en vez de utilizar únicamente la verificación de mtime+tamaño por defecto. Es demasiado lento como para ser práctico si los directorios son grandes.

PRÓXIMA ENTREGA: ARCHIVANDO CON DAR

Imagen de Debish
Enviado por Debish el 31 Octubre, 2011 - 00:14.

Muy didáctico, como sus dos predecesores clap

Imagen de cnicolas
Enviado por cnicolas el 31 Octubre, 2011 - 08:18.

Buen articulo, rsync es una muy buena herramienta de backup. Algunas de las ocpiones las desconocia.

Un pequeño detalle, creo que te falta el directorio backup en la instruccion, seria algo asi

# rsync -av /home /mnt/usb/backup
Imagen de Black Rider
Enviado por Black Rider el 31 Octubre, 2011 - 10:39.

Acabo de arreglar lo de /mnt/usb/backup :-)

Imagen de cnicolas
Enviado por cnicolas el 31 Octubre, 2011 - 12:00.

Una opcion que a mi se me ocurriria para hacer backup de /home si esta en una particion aparte seria usar dd

# dd if=/dev/sda3 of=/mnt/usb/backup bs=512 conv=noerror,sync

Suponiendo que hubiera espacio claro, tambien se puede pasar a imagen iso, img, etc.
No tiene todas las opciones de rsync, pero es otra opcion

Imagen de Black Rider
Enviado por Black Rider el 31 Octubre, 2011 - 12:22.

dd está bien para tomar imágenes completas. Es una solución a prueba de idiotas, dado que la partición se toma "tal cual es" y se conservan todos los permisos y atributos sin que el usuario tenga que hacer nada más. Lo malo es que dd sólo es capaz de tomar una imagen completa, y no es capaz de administrar por sí solo copias de respaldo diferenciales. Tomar una imagen de un /home un poco grande con dd lleva mucho tiempo.

Si el tamaño de la copia de respaldo te preocupa, puedes probar a utilizar mksquashfs. Squashfs es un sistema de ficheros comprimido de sólo lectura. Podrías tomar una copia completa de tu /home el primer día con mksquashfs y luego utilizar rsync para crear copias diferenciales:

# rsync -av --compare-dest=/punto/montaje/squashfs /mnt/Encrypted_Drive/`date -I`

Así, tendrías una copia completa en /punto/montaje/squashfs y una copia de los archivos que cambiasen en /mnt/Encrypted_Drive/`date -I`. La orden que he descrito es poco práctica a la hora de restaurar, pero creo que la idea se entiende.

Como nota adicional, debo indicar que Squashfs no soporta ACL actualmente, aunque se espera que añada esta característica en el futuro próximo.

Imagen de cnicolas
Enviado por cnicolas el 31 Octubre, 2011 - 12:56.
Black Rider escribió:

dd está bien para tomar imágenes completas. Es una solución a prueba de idiotas, dado que la partición se toma "tal cual es" y se conservan todos los permisos y atributos sin que el usuario tenga que hacer nada más. Lo malo es que dd sólo es capaz de tomar una imagen completa, y no es capaz de administrar por sí solo copias de respaldo diferenciales. Tomar una imagen de un /home un poco grande con dd lleva mucho tiempo.

Si el tamaño de la copia de respaldo te preocupa, puedes probar a utilizar mksquashfs. Squashfs es un sistema de ficheros comprimido de sólo lectura. Podrías tomar una copia completa de tu /home el primer día con mksquashfs y luego utilizar rsync para crear copias diferenciales:

# rsync -av --compare-dest=/punto/montaje/squashfs /mnt/Encrypted_Drive/`date -I`

Así, tendrías una copia completa en /punto/montaje/squashfs y una copia de los archivos que cambiasen en /mnt/Encrypted_Drive/`date -I`. La orden que he descrito es poco práctica a la hora de restaurar, pero creo que la idea se entiende.

Como nota adicional, debo indicar que Squashfs no soporta ACL actualmente, aunque se espera que añada esta característica en el futuro próximo.

Si, ya se que no soporta backup incrementales, pero para una copia puntual que quieras guardar por ejemplo en un dvd si la particion es del tamaño correspondiente te permite hacer una imagen iso que luego puedes pasar facilmente a un dvd, no es tan completa ni con tantas opciones como rsync pero puede sacarte de un apuro en un momento dado.
Tambien es mostrar que existen muchas diversas herramientas que se pueden usar.

Imagen de sebas
Enviado por sebas el 4 Noviembre, 2011 - 16:03.

Muy bueno...esto te vino bien para no olvidar no es cierto? silbo
Va directo a mi kindle..
P.D.:Por cierto es más didáctico que lo que escribiste en el que haces devil
Abrazo!
Sebas

Imagen de sercari
Enviado por sercari el 5 Noviembre, 2011 - 00:58.

Excelente, muchas gracias por compartirlo y por semejante explicación. Esto me viene justo para tener el mismo home en la PC de escritorio y en la netbook.

Saludos.

Imagen de jaugustogv
Enviado por jaugustogv el 9 Noviembre, 2011 - 16:32.

Hola... segun tu experiencia, rsync aplicaria para una buena politica de respaldo, para los buzones de un servidor de correo? y que forma de backup recomendarias

Imagen de Black Rider
Enviado por Black Rider el 9 Noviembre, 2011 - 18:20.
jaugustogv escribió:

Hola... segun tu experiencia, rsync aplicaria para una buena politica de respaldo, para los buzones de un servidor de correo?

La verdad es que nunca he gestionado un servidor de correo, así que experiencia sobre ellos tengo más bien poca.

Teóricamente, rsync debería permitir guardar los datos de los buzones. El problema es que si tu servidor es un equipo muy activo, si empiezas a copiar los datos y ocurre una modificación entre medias podrías obtener un backup incoherente (lo que no implica pérdida de datos). Rsync me es especialmente útil para copiar datos que no están siendo modificados, y de hecho yo suelo montar los sistemas de ficheros que respaldo como de sólo lectura (si puedes permitirte parar el servicio, también tú puedes hacerlo). Para respaldar sistemas de ficheros "en caliente", se suele recomendar que utilices la función de snapshots de LVM. También hay algunas alternativas propietarias por ahí, pero de esas no tengo muchas referencias.