miércoles, 20 de diciembre de 2017

Los backups incrementales y diferenciales

Una de las cosas con las que se enfrenta, con un poco de miedo, cualquier administrador de copias de seguridad es al backup diferencial.

¿Qué es un backup diferencial? La verdad es que ni siquiera los programas de backup lo tienen claro.

Para empezar, todos tienen claro lo que es un backup Full o completo: se copia todo lo que haya que copiar. Pero no se puede hacer backup de todo todos los días, sería un gasto enorme e inútil de recursos.

Entonces, se puede copiar cada día solamente lo que haya cambiado desde el día anterior. O solamente lo que haya cambiado desde que se hizo el backup Full.

Estas dos estrategias son interesantemente diferentes: si se copia solamente lo que haya cambiado desde el día anterior, todos esos backups serán pequeños, pero a la hora de restaurar (no perdamos de vista que los backups no son el objetivo: su propósito es poder restaurar) son necesarios tanto el backup completo inicial como todos estos backups parciales. En cambio, si se copia todo lo que haya cambiado desde el backup Full, estos backups parciales serán pequeños, sí, pero cada vez más grandes, sin embargo para restaurar solamente serán necesarios el backup completo inicial el el backup parcial en cuestión.

Estas dos estrategias, además, se pueden combinar de varias maneras. Y el problema es que reciben diferentes nombres allá donde se usen.

Uno de los grandes contendientes en la arena empresarial es EMC NetWorker. Para este programa la estrategia de copiar "lo que haya cambiado desde el día anterior" es llamada comúnmente backup incremental, y la de copiar "lo que haya cambiado desde el backup completo" es llamada normalmente backup diferencial. Aunque no es exactamente así: NetWorker tiene 9 niveles de backup diferencial. Así, un backup diferencial de nivel 1 es realmente "lo que haya cambiado desde el backup completo", uno de nivel 2 es "lo que haya cambiado desde el backup completo o desde el backup de nivel 1", etc., permitiendo un control fino de la estrategia de copia, mientras que un backup incremental es realmente "lo que haya cambiado desde el backup anterior". Nótese, por cierto, que en determinadas aplicaciones, como en el módulo de NetWorker para Microsoft SQL Server, el backup "incremental" tiene un uso especial (en MSSQL hace copia de los Transaction Logs), con lo cual no queda disponible para su uso regular. Para el control de lo que se ha copiado en cada uno de estos niveles, NetWorker maneja índices de ficheros.

Otro de los grandes programas es Veritas NetBackup. Para este programa, o su primo Veritas Backup Exec, la estrategia de copiar "lo que haya cambiado desde el día anterior" es llamada "Cumulative incremental" o más comúnmente incremental, y la de copiar "lo que haya cambiado desde el backup completo" es llamada "Differential Incremental" o más amigablemente backup diferencial, pero aquí no trabajan en base a índices de ficheros, sino que el backup incremental copia los ficheros que tengan el bit de Archivo en ON (los nuevos o que hayan sido modificados) y pone dicho bit a OFF, mientras que el backup diferencial copia los ficheros que tengan el bit de archivo a ON pero no modifica dicho bit. El comportamiento de ambos tipos de backups es el esperado, pero la interacción entre ambos es exactamente la contraria que en EMC NetWorker: los backups diferenciales de Veritas NetBackup o Veritas BackupExec "se apoyan", es decir, necesitan a la hora de una restauración, de un backup incremental previo si lo hubiera, mientras que en EMC NetWorker es exactamente al contrario.

El más importante de los programas de backup Open Source, Bacula, usa unas definiciones parecidas: un Incremental es exactamente lo que haya cambiado desde que comenzó el último backup de cualquier tipo, mientras que un Differential es exactamente lo que haya cambiado desde que comenzó (y es importante el detalle "desde que comenzó", ya que puede que no haya acabado) el último backup Full. De este modo, a la hora de la restauración se comportan igual que los de EMC NetWorker.

Para el no iniciado, pensar en términos de completo, diferencial e incremental puede suponer un esfuerzo mental extra. Es más sencillo trabajar solamente con el completo y el incremental, e introducir el diferencial a medida que se coge expericncia con el programa específico con el que se ha de trabajar.