¿Cómo hace RSYNC copias de seguridad incrementales?

14

¿Cómo rsyncsabe qué archivos se cambian y cuáles no? ¿Registra sus datos en cualquier parte del archivo?

Porque quiero hacer copias de seguridad incrementales, pero primero transferirá todos los archivos.

Entonces mi pregunta principal es: si subo los archivos iniciales a través de FTP pero no por rsync. Seguirá rsyncomitiendo esos archivos existentes o cargará todo en la primera ejecución.

umläute
fuente

Respuestas:

12

Rsync tiene una serie de indicadores que controlan lo que verá y lo que copiará al destino. La mayoría de las veces se usa la bandera "-a", que es la bandera "Archivo", esto es probablemente lo que desea. ejecute rsync con los indicadores "-av" y haga que se ejecute por primera vez con los datos que desea respaldar. La próxima vez que se ejecute, realizará una suma de comprobación de bloque del archivo y solo copiará las partes que se han modificado en los archivos existentes, copiará los archivos nuevos y eliminará los archivos que ya no estén allí. Consulte la sección de opciones "-a" en:

http://linux.die.net/man/1/rsync

La primera ejecución será de ancho de banda intensivo, las siguientes ejecuciones probablemente serán intensivas en procesador pero usarán poco ancho de banda en comparación con la ejecución inicial. A menos que tenga mucha rotación sobre su conjunto de datos.

A Rsync no le importa cómo obtuvo los archivos en los directorios de origen o de destino, solo copiará los cambios entre los dos, a menos que agregue banderas para hacer algo diferente.

Si desea registrar lo que se modificó, puede usar la opción "--log-file". En general, algo como esto suena como lo que quieres:

rsync -av --log-file=/var/log/rsync.log -e "ssh -l backup-user" backup-user@source-machine::module /nas01/backups
Ali Chehab
fuente
9

rsync no hace 'incremental', es más como 'diferencial'. no transfiere cambios (que suponen cierto conocimiento de una ejecución anterior), transfiere diferencias (comparando el origen con los archivos de destino)

Una simplificación del proceso:

  • primero verifica el tamaño del archivo, las fechas de creación / modificación, las marcas ... si todo es idéntico, omita el archivo.
  • Si no hay un archivo con ese nombre en el destino, simplemente copia todo el archivo.
  • Si hay un archivo en el destino, calcula sumas de verificación para cada 2 KB del archivo y lo transfiere al remitente.
  • el remitente compara el contenido del archivo de origen y lo compara con el destino, y transfiere cualquier dato que no esté allí, junto con referencias a cualquier dato coincidente. con eso, el objetivo puede reconstruir todo el archivo utilizando partes del antiguo objetivo y nuevos bloques.
Javier
fuente
5

rsync no registra ningún dato, verifica las marcas de tiempo de modificación del archivo y luego el contenido. si carga por ftp primero, estará bien: rsync no retransmitirá todos los datos, pero probablemente revisará todo el contenido y arreglará las marcas de tiempo. pero no habrá una gran transferencia de nuevo.

pQd
fuente
5

Tal vez soy pedante pero las copias de seguridad incrementales significan que primero tienes una copia de seguridad completa. Entonces tiene copia de seguridad de los archivos modificados desde esa copia de seguridad. Luego tiene otra copia de seguridad de las copias de seguridad cambiadas desde la anterior, etc. Por lo tanto, necesita la copia de seguridad completa y todas las copias de seguridad incrementales desde esa.

Entonces, solo usar el modo de archivo no es una copia de seguridad incremental . Creo que la diferencia es importante porque significa que no puede retroceder en el tiempo para obtener archivos antes de que cambien .

Si desea hacer una copia de seguridad incremental verdadera, utilice opciones como --backup-dir. Hay un ejemplo aquí .

Kyle Brandt
fuente
1
+1 para la distinción entre copias de seguridad incrementales y duplicación (que es lo que hace rsync por defecto).
sleske
¡Ah, sí! Espejo era la palabra que buscaba, buena decisión :-)
Kyle Brandt
0

Si la verdadera pregunta es "Quiero hacer copias de seguridad incrementales sobre rsync", hay algunas opciones disponibles. Yo uso dirvish:

http://www.dirvish.org/

La restauración es fácil porque le brinda instantáneas: utiliza enlaces duros para brindarle instantáneas completas mientras ahorra espacio donde un archivo es idéntico. Internamente, utiliza la opción --link-dest de rsync:

--link-dest=DIR         hardlink to files in DIR when unchanged

Como usa rsync, también ahorra ancho de banda de red (y, por lo tanto, tiempo) donde los cambios son muy pequeños. También funciona si el alquitrán y sneakernet una imagen dirvish creado localmente en primer lugar, si usted tiene un montón de archivos y un vínculo lento.

Alphax
fuente