Tengo una tarea cron por hora que copia alrededor de 40 GB de datos de una carpeta de origen a una nueva carpeta con la hora agregada al final.
Cuando se completa, la tarea poda todo lo que tenga más de 24 horas de antigüedad. Estos datos cambian muy a menudo durante la jornada laboral y están en una compartición de archivos samba. Así es como se ve la estructura de carpetas:
\server\Versión.1
\server\Versión.2
\server\Versión.3
...
\server\Versión.24
El contenido de cada nueva carpeta en comparación con la anterior generalmente no cambia mucho, ya que esta es una tarea por hora.
Ahora podrías estar pensando que soy un idiota por haber soñado con esto. La verdad es que me acabo de enterar. En realidad, se ha utilizado durante años y es increíblemente simple, cualquiera podría borrar el COMPARTIR completo de 40 GB (imagina ese diálogo de borrado en ejecución... eliminando miles y miles de archivos) y realmente sería más rápido restaurarlo moviendo la copia más reciente de vuelta a la fuente de lo que tardó en eliminarlo.
¡Genial!
Ahora, para rematar esto, necesito replicar eficientemente estos 960 GB de datos "en su mayoría similares" a un servidor remoto a través de un enlace WAN, con la replicación ocurriendo lo más cerca posible del tiempo real. Piensa en un repuesto en caliente, recuperación ante desastres, etc.
Mi primera idea fue rsync.
Un fracaso total.
Rsync ve la eliminación de la carpeta que tiene 24 horas de antigüedad y la adición de una nueva carpeta con 30 GB de datos para sincronizar. También miré rdiff-backup y unison, ambos parecen usar algoritmos similares y no mantienen suficiente metadatos para hacerlo de manera inteligente.
Lo mejor que puedo encontrar "tal cual" para hacer esto es "Replicación de Sistema de Archivos Distribuido" de Windows Server que utiliza "Compresión Diferencial Remota" - Después de leer la información de fondo sobre cómo funciona esto, en realidad parece ser exactamente lo que necesito.
Problema: Ambos servidores están corriendo Linux. ¡Ay! Una aproximación que estoy considerando es la siguiente, digamos que son las 5 AM y la tarea cron finaliza:
- Llega la nueva carpeta Versión.5 al servidor local
- SSH al servidor remoto y copiar Versión.4 a Versión.5
- Ejecutar rsync en el servidor local enviando los cambios al servidor remoto. Rsync finalmente sabe hacer una copia diferencial entre Versión.4 y Versión.5
¿Hay una forma más inteligente de replicar comparticiones de Samba lo más cerca posible del tiempo real?
¿Hay algo que haga "Compresión Diferencial Remota" en Linux?