GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar rsync avanzado para grandes copias de seguridad de Linux

Parece claro que las copias de seguridad son siempre un tema candente en el mundo de Linux. En 2017, David Both ofreció a los lectores de Opensource.com consejos sobre "Usar rsync para hacer una copia de seguridad de su sistema Linux" y, a principios de este año, publicó una encuesta preguntándonos:"¿Cuál es su principal estrategia de copia de seguridad para el directorio /home en Linux? " En otra encuesta de este año, Don Watkins preguntó:"¿Qué solución de copia de seguridad de código abierto usas?"

Mi respuesta es rsync. ¡Realmente me gusta rsync! Hay muchas herramientas grandes y complejas en el mercado que pueden ser necesarias para administrar unidades de cinta o dispositivos de biblioteca de almacenamiento, pero una herramienta de línea de comandos de código abierto simple puede ser todo lo que necesita.

Rsync básico

Administré el sistema de repositorio binario para una organización global que tenía aproximadamente 35 000 desarrolladores con múltiples terabytes de archivos. Regularmente movía o archivaba cientos de gigabytes de datos a la vez. Se utilizó Rsync. Esta experiencia me dio confianza en esta sencilla herramienta. (Entonces, sí, lo uso en casa para hacer una copia de seguridad de mis sistemas Linux).

El comando básico de rsync es simple.

rsync -av SRC DST

De hecho, los comandos rsync enseñados en cualquier tutorial funcionarán bien para la mayoría de las situaciones generales. Sin embargo, supongamos que necesitamos hacer una copia de seguridad de una gran cantidad de datos. Algo así como un directorio con 2000 subdirectorios, cada uno de los cuales contiene entre 50 GB y 700 GB de datos. Ejecutar rsync en este directorio podría llevar una gran cantidad de tiempo, especialmente si está utilizando la opción de suma de comprobación, que prefiero.

Es probable que el rendimiento se vea afectado si intentamos sincronizar grandes cantidades de datos o sincronizar a través de conexiones de red lentas. Permítame mostrarle algunos métodos que utilizo para garantizar un buen rendimiento y confiabilidad.

Rsync avanzado

Más recursos de Linux

  • Hoja de trucos de los comandos de Linux
  • Hoja de trucos de comandos avanzados de Linux
  • Curso en línea gratuito:Descripción general técnica de RHEL
  • Hoja de trucos de red de Linux
  • Hoja de trucos de SELinux
  • Hoja de trucos de los comandos comunes de Linux
  • ¿Qué son los contenedores de Linux?
  • Nuestros últimos artículos sobre Linux

Una de las primeras líneas que aparece cuando se ejecuta rsync es:"enviando lista de archivos incrementales". Si realiza una búsqueda de esta línea, verá muchas preguntas como:¿por qué tarda una eternidad? o ¿por qué parece colgar?

He aquí un ejemplo basado en este escenario. Digamos que tenemos un directorio llamado /storage que queremos hacer una copia de seguridad en un dispositivo USB externo montado en /media/WDPassport .

Si queremos hacer una copia de seguridad de /storage a una unidad externa USB, podríamos usar este comando:

rsync -cav /storage /media/WDPassport

La c La opción le dice a rsync que use sumas de verificación de archivos en lugar de marcas de tiempo para determinar los archivos modificados, y esto generalmente lleva más tiempo. Para desglosar el /almacenamiento directorio, sincronizo por subdirectorio, usando buscar dominio. He aquí un ejemplo:

find /storage -type d -exec rsync -cav {} /media/WDPassport \;

Esto se ve bien, pero si hay algún archivo en el /almacenamiento directorio, no se copiarán. Entonces, ¿cómo podemos sincronizar los archivos en /storage? ? También hay un pequeño matiz en el que ciertas opciones harán que rsync sincronice el . directorio, que es la raíz del directorio de origen; esto significa que sincronizará los subdirectorios dos veces y no queremos eso.

Para resumir, la solución que escogí es un script de "doble incremento". Esto me permite dividir un directorio, por ejemplo, dividir /home en los directorios de inicio de los usuarios individuales o en los casos en que tenga varios directorios grandes, como música o fotos familiares.

Aquí hay un ejemplo de mi script:

HOMES="alan"
DRIVE="/media/WDPassport"

for HOME in $HOMES; do
     cd /home/$HOME
     rsync -cdlptgov --delete . /$DRIVE/$HOME
     find . -maxdepth 1 -type d -not -name "." -exec rsync -crlptgov --delete {} /$DRIVE/$HOME \;
done

El primer comando rsync copia los archivos y directorios que encuentra en el directorio de origen. Sin embargo, deja los directorios vacíos para que podamos iterar a través de ellos usando buscar dominio. Esto se hace pasando la d argumento, que le dice a rsync que no recurra al directorio.

-d, --dirs                  transfer directories without recursing

El encontrar Luego, el comando pasa cada directorio a rsync individualmente. Rsync luego copia el contenido de los directorios. Esto se hace pasando la r argumento, que le dice a rsync que recurse al directorio.

-r, --recursive             recurse into directories

Esto mantiene el archivo de incremento que usa rsync en un tamaño manejable.

La mayoría de los tutoriales de rsync utilizan la a (o archivo ) argumento de conveniencia. Este es en realidad un argumento compuesto.

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

Los otros argumentos que paso se habrían incluido en el a; esos son l , p , t , g , y o .

-l, --links                 copy symlinks as symlinks
-p, --perms                 preserve permissions
-t, --times                 preserve modification times
-g, --group                 preserve group
-o, --owner                 preserve owner (super-user only)

El --eliminar La opción le dice a rsync que elimine cualquier archivo en el destino que ya no exista en la fuente. De esta manera, el resultado es una duplicación exacta. También puede agregar una exclusión para la .Papelera directorios o tal vez el .DS_Store archivos creados por MacOS.

-not -name ".Trash*" -not -name ".DS_Store"

Ten cuidado

Una recomendación final:rsync puede ser un comando destructivo. Afortunadamente, sus reflexivos creadores brindaron la capacidad de hacer "ensayos". Si incluimos la n opción, rsync mostrará el resultado esperado sin escribir ningún dato.

rsync -cdlptgovn --delete . /$DRIVE/$HOME

Este script es escalable a tamaños de almacenamiento muy grandes y situaciones de gran latencia o enlace lento. Estoy seguro de que todavía hay margen de mejora, como siempre lo hay. Si tiene sugerencias, compártalas en los comentarios.


Linux
  1. Cómo usar systemd-nspawn para la recuperación del sistema Linux

  2. Cómo usar el comando Linux Rsync (sincronización remota)

  3. Cómo usar el comando Su en Linux

  4. El comando rsync de Linux:cómo usarlo

  5. Linux:¿cómo usar el espacio de intercambio solo para emergencias?

Cómo uso Cockpit para la administración del servidor Linux de mi hogar

Cómo comprobar los puertos de escucha en Linux (Puertos en uso)

Cómo elegir una herramienta de copia de seguridad para Linux

Cómo usar más comandos en Linux para leer archivos de texto grandes

Cómo usar kdump para el análisis de fallas del kernel de Linux

¿Cómo puedo usar rsync con un sistema de archivos FAT?