¿Cómo hacer una copia de seguridad de un archivo grande con pequeños cambios?

9

Si un conjunto de archivos (varios GB de gran tamaño cada uno) y cada uno cambia ligeramente todos los días (en lugares aleatorios, no solo la información adjunta al final), ¿cómo se puede copiar de manera eficiente? Quiero decir, en el sentido de que solo las partes modificadas se actualizan, y no todos los archivos. Eso significaría la diferencia entre copiar algunos Kb aquí y allá o algunos GB.

Quora Feans
fuente
Dif binario? Creo que es una cosa, pero no creo que difflo haga
gato
@cat: diffpodría informar diferencias, pero aquí el problema es copiar las pequeñas diferencias.
Quora Feans
Bueno, estaba pensando en copiar los diferenciales - rsynces mejor
gato
1
En Server Fault: qué programa usar para la copia de seguridad incremental de un solo archivo grande (2011-01-07) y en Stack Overflow: RSync single (archive) que cambia cada vez (2011-03-04).
Graham Perrin

Respuestas:

25

El programa rsync hace exactamente eso. Desde la página del manual:

Es famoso por su algoritmo de transferencia delta, que reduce la cantidad de datos enviados a través de la red al enviar solo las diferencias entre los archivos de origen y los archivos existentes en el destino. Rsync se usa ampliamente para copias de seguridad y duplicación y como un comando de copia mejorado para el uso diario.

hlovdal
fuente
De hecho, rsync se está ejecutando mientras escribe esta respuesta, haciendo una copia de seguridad de todo en esta máquina en mi servidor de archivos (con zfs).
hlovdal
Para fines de respaldo, me gustaría recomendar rdiff-backup ( nongnu.org/rdiff-backup ). Lo uso para respaldar cuatro máquinas diferentes, desde hace varios años, con buenos resultados.
Thomas Padron-McCarthy
Wikipedia tiene una buena explicación de cómo rsynccompara los fragmentos de archivos usando sumas de comprobación continuas.
Adam Katz
Intenté rsync para "revertir" de nuevo a una imagen de disco duro de VM antigua donde solo se han cambiado algunos archivos en el interior, lamentablemente rsync parece copiar todo el archivo nuevamente (tarda ~ 3 minutos escribiendo ~ 300MB / s)? rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
feedc0de
8

Probablemente desee un programa de copia de seguridad de deduplicación moderno. Echa un vistazo a BorgBackup .

Esto hará múltiples copias de seguridad de cada versión de su archivo grande, pero compartirá el contenido común entre las diferentes versiones, por lo que el espacio total utilizado para una versión dada de su archivo grande solo será un poco más que el espacio total en disco para un solo versión, suponiendo que las diferentes versiones solo difieran ligeramente.

Faheem Mitha
fuente
5

Si tiene alguna IO limitada, use un sistema de archivos como BTRFS o ZFS que admita directamente copias de seguridad incrementales sin tener que encontrar las diferencias en los archivos, como lo que rsynctiene que hacer.

El uso rsyncserá lento y muy intensivo en IO.

Porque si cualquier aplicación que esté escribiendo cambios en los archivos está de alguna manera limitada por IO, el uso rsyncva a quitar importantes ciclos de IO de la aplicación, esa es la razón por la que existen los archivos. Y si su proceso o sistema de respaldo está limitado por IO, rsyncle quitará ciclos de IO a su ancho de banda de respaldo disponible.

Simplemente Google "rsync es lento". Por ejemplo: rsync es muy lento (factor 8 a 10) en comparación con cp al copiar archivos de nfs-share a directorio local

Andrew Henle
fuente
Esto tiene el beneficio adicional de preservar todos los metadatos sin tener que verificarlo, y siempre sabiendo que su copia de seguridad es tan buena como la copia original. rsync está bien para uso general, pero si tiene un sistema de archivos moderno, sería una tontería ignorar sus ventajas.
user121391