Chunks y su importancia en backups
- jogofus
- 29 oct
- 3 Min. de lectura
Todos somos conscientes de la necesidad de disponer de backups, y sobretodo, de tener un buen software de backup que garantice que se hacen correctamente.
Pero además, caprichosos de nosotros, queremos que esos backup ocupen poco.
Desde hace un tiempo, la gran mayoría de software de backup utilizan un sistema llamado deduplicación.
¿Que es esto de deduplicación?
Según Wikipedia:
En informática, la deduplicación o desduplicación de datos es una técnica especializada de compresión de datos para eliminar copias duplicadas de datos repetidos. Un término relacionado con la deduplicación de datos es la compresión inteligente de datos. Esta técnica se usa para optimizar el almacenamiento de datos en disco y también para reducir la cantidad de información que debe enviarse de un dispositivo a otro a través de redes de comunicación.
Siguiendo con el hilo de la explicación:
Los procesos de deduplicación a nivel de archivo examinan los ficheros en su totalidad para determinar si están duplicados, lo que se conoce como almacenamiento de instancia única, que es idéntico a un backup incremental clásico. Sin embargo, otros procesos dividen los datos en bloques y tratan de encontrar duplicados en ellos (duplicación al nivel de los bloques). La deduplicación a nivel de bloques produce más granularidad y una reducción mayor del espacio de almacenamiento que la de nivel de archivo. Pero la verdadera potencia está en la deduplicación a nivel de bytes, al realizar un comparación byte a byte de las corrientes de datos se consigue una mayor nivel de precisión garantizando la eliminación de datos redundantes.

Resumiendo, el software "revisa" los datos que ya existen y que no han sido modificados y solo copia lo que no existe en su base de datos.
Para los que usamos Proxmox Backup Server nos es muy familiar el término chunk. Esto no es más que pequeños "trozos" de la copia de seguridad. En git se le llaman blobs.
Una vez trozeada la copia de seguridad, se calcula el hash para comprobar su integridad y poder comparar si ha cambiado en algún momento.
Manos a la obra
Como sabéis los que me conocéis o los que seguís el blog, soy una persona que me gusta poder hacer las cosas por cuenta propia, sin depender de software privativo.
Es cierto que todos los software de backup implementan esta solución pero, ¿y si queremos hacer algo parecido de un fichero en concreto sin necesidad de pagar un software o para tener el control total?
Pues esto es lo que me he propuesto yo. Y sí, es muy sencillo.
El ejemplo es el siguiente:
Disponemos de un fichero de tamaño X Gb. Lo que haremos será "trozearlo", calcular el hash y luego volver a unirlo para ver si funciona como se espera.
No voy a entrar en la opción de si hay algo que ha sido modificado, añadirlo, pero el proceso será el mismo: trozear, sacar hash, comparar los hashes únicos y añadir los nuevos.
Crearemos un directorio en el que trabajar:
mkdir -p /home/jose/Escritorio/ejemplo/storage/
mkdir -p /home/jose/Escritorio/ejemplo/chunks/En /home/jose/Escritorio/ejemplo copiaré una .iso de Windows.
Ahora procederemos a trocearla en cachos de 1Gb:
split -b 1024M Win11_24H2_Spanish_x64.iso chunks/chunk_
Como vemos, se ha creado los chunks correspondientes, cada uno de 1Gb, excepto el último porque no llegaba a 1gb completo.
Calculamos el hash y lo guardamos:
for i in chunk_*; do sha256sum $i | awk '{print $1}' > ${i}.hash;done

Ahora podríamos reconstruir todos los chunks, modificamos o no. Como en este caso no hay ningún chunk modificado, el resultado deberá ser el mismo que el original.
for i in $(ls -l | awk '{print $11}' | grep -v .hash); do cat $i >> ../storage/Win11_reconstruido.iso;doneSi comparamos el hash del original con el reconstruido:







Comentarios