En informática , la deduplicación de datos es una técnica para eliminar copias duplicadas de datos repetidos. La implementación exitosa de la técnica puede mejorar la utilización del almacenamiento, lo que a su vez puede reducir el gasto de capital al reducir la cantidad total de medios de almacenamiento necesarios para satisfacer las necesidades de capacidad de almacenamiento. También se puede aplicar a las transferencias de datos en red para reducir la cantidad de bytes que se deben enviar.
El proceso de deduplicación requiere la comparación de "fragmentos" de datos (también conocidos como "patrones de bytes"), que son bloques de datos únicos y contiguos. Estos fragmentos se identifican y almacenan durante un proceso de análisis y se comparan con otros fragmentos dentro de los datos existentes. Siempre que se produce una coincidencia, el fragmento redundante se reemplaza con una pequeña referencia que apunta al fragmento almacenado. Dado que el mismo patrón de bytes puede aparecer docenas, cientos o incluso miles de veces (la frecuencia de coincidencia depende del tamaño del fragmento), la cantidad de datos que se deben almacenar o transferir se puede reducir en gran medida. [1] [2]
Una técnica relacionada es el almacenamiento de datos en una sola instancia , que reemplaza varias copias de contenido a nivel de archivo completo con una única copia compartida. Si bien es posible combinar esto con otras formas de compresión y deduplicación de datos, es distinto de los enfoques más nuevos para la deduplicación de datos (que pueden operar a nivel de segmento o subbloque).
La deduplicación es diferente de los algoritmos de compresión de datos, como LZ77 y LZ78 . Mientras que los algoritmos de compresión identifican datos redundantes dentro de archivos individuales y codifican estos datos redundantes de manera más eficiente, el objetivo de la deduplicación es inspeccionar grandes volúmenes de datos e identificar secciones grandes (como archivos completos o grandes secciones de archivos) que sean idénticas y reemplazarlas con una copia compartida.
Por ejemplo, un sistema de correo electrónico típico puede contener 100 instancias del mismo archivo adjunto de 1 MB ( megabyte ). Cada vez que se realiza una copia de seguridad de la plataforma de correo electrónico , se guardan las 100 instancias del archivo adjunto, lo que requiere 100 MB de espacio de almacenamiento. Con la deduplicación de datos, solo se almacena realmente una instancia del archivo adjunto; las instancias posteriores se referencian de nuevo a la copia guardada para una relación de deduplicación de aproximadamente 100 a 1. La deduplicación a menudo se combina con la compresión de datos para ahorrar almacenamiento adicional: la deduplicación se utiliza primero para eliminar grandes fragmentos de datos repetitivos y luego se utiliza la compresión para codificar de manera eficiente cada uno de los fragmentos almacenados. [3]
En el código informático , la deduplicación se realiza, por ejemplo, almacenando información en variables para que no sea necesario escribirlas individualmente, sino que se puedan cambiar todas a la vez en una ubicación referenciada centralmente. Algunos ejemplos son las clases CSS y las referencias con nombre en MediaWiki .
La deduplicación de datos basada en almacenamiento reduce la cantidad de almacenamiento necesaria para un conjunto determinado de archivos. Es más eficaz en aplicaciones en las que se almacenan muchas copias de datos muy similares o incluso idénticos en un solo disco. En el caso de las copias de seguridad de datos, que se realizan de forma rutinaria para protegerse contra la pérdida de datos, la mayoría de los datos de una copia de seguridad determinada permanecen sin cambios con respecto a la copia de seguridad anterior. Los sistemas de copia de seguridad comunes intentan aprovechar esto omitiendo (o vinculando de forma permanente ) archivos que no han cambiado o almacenando diferencias entre archivos. Sin embargo, ninguno de los enfoques captura todas las redundancias. La vinculación permanente no ayuda con archivos grandes que solo han cambiado de manera leve, como una base de datos de correo electrónico; las diferencias solo encuentran redundancias en versiones adyacentes de un solo archivo (considere una sección que se eliminó y luego se agregó nuevamente, o una imagen de logotipo incluida en muchos documentos).
La deduplicación de datos de red en línea se utiliza para reducir la cantidad de bytes que se deben transferir entre puntos finales, lo que puede reducir la cantidad de ancho de banda necesario. Consulte Optimización de WAN para obtener más información.
Los servidores virtuales y los escritorios virtuales se benefician de la deduplicación porque permite que los archivos de sistema nominalmente separados de cada máquina virtual se fusionen en un único espacio de almacenamiento. Al mismo tiempo, si una determinada máquina virtual personaliza un archivo, la deduplicación no cambiará los archivos de las otras máquinas virtuales, algo que no ofrecen alternativas como los enlaces físicos o los discos compartidos. La realización de copias de seguridad o copias duplicadas de entornos virtuales también se ve mejorada.
La deduplicación puede ocurrir "en línea", mientras fluyen los datos, o "posprocesándolos", después de que se hayan escrito.
Con la deduplicación posterior al proceso, los datos nuevos se almacenan primero en el dispositivo de almacenamiento y luego un proceso posterior analizará los datos en busca de duplicados. La ventaja es que no es necesario esperar a que se completen los cálculos hash y la búsqueda antes de almacenar los datos, lo que garantiza que el rendimiento del almacenamiento no se degrade. Las implementaciones que ofrecen un funcionamiento basado en políticas pueden brindar a los usuarios la capacidad de diferir la optimización en archivos "activos" o procesar archivos en función del tipo y la ubicación. Una posible desventaja es que los datos duplicados pueden almacenarse innecesariamente durante un corto período de tiempo, lo que puede ser problemático si el sistema está cerca de alcanzar su capacidad máxima.
Como alternativa, los cálculos de hash de deduplicación se pueden realizar en línea: sincronizados a medida que los datos ingresan al dispositivo de destino. Si el sistema de almacenamiento identifica un bloque que ya ha almacenado, solo se almacena una referencia al bloque existente, en lugar de todo el nuevo bloque.
La ventaja de la deduplicación en línea sobre la deduplicación posterior al proceso es que requiere menos almacenamiento y tráfico de red, ya que los datos duplicados nunca se almacenan ni se transfieren. En el lado negativo, los cálculos de hash pueden ser costosos computacionalmente, lo que reduce el rendimiento del almacenamiento. Sin embargo, ciertos proveedores con deduplicación en línea han demostrado equipos que realizan la deduplicación en línea a altas velocidades.
Los métodos de deduplicación en línea y de posprocesamiento suelen ser motivo de intensos debates. [4] [5]
El Diccionario SNIA identifica dos métodos: [2]
Otra forma de clasificar los métodos de deduplicación de datos es según el lugar donde se producen. La deduplicación que se produce cerca del lugar donde se crean los datos se denomina "deduplicación de origen". Cuando se produce cerca del lugar donde se almacenan los datos, se denomina "deduplicación de destino".
La deduplicación de origen garantiza que los datos de la fuente de datos se dedupliquen. Esto generalmente ocurre directamente dentro de un sistema de archivos. El sistema de archivos escaneará periódicamente los archivos nuevos creando hashes y los comparará con los hashes de los archivos existentes. Cuando se encuentran archivos con los mismos hashes, se elimina la copia del archivo y el nuevo archivo apunta al archivo anterior. Sin embargo, a diferencia de los enlaces físicos , los archivos duplicados se consideran entidades separadas y si uno de los archivos duplicados se modifica posteriormente, se crea una copia de ese archivo o bloque modificado mediante un sistema llamado copia en escritura . El proceso de deduplicación es transparente para los usuarios y las aplicaciones de copia de seguridad. Realizar una copia de seguridad de un sistema de archivos deduplicado a menudo provocará que se produzcan duplicaciones, lo que dará como resultado que las copias de seguridad sean más grandes que los datos de origen. [6] [7]
La deduplicación de origen se puede declarar explícitamente para operaciones de copia, ya que no se necesita ningún cálculo para saber que los datos copiados necesitan deduplicación. Esto conduce a una nueva forma de "vinculación" en sistemas de archivos llamada reflink (Linux) o clonefile (MacOS), donde uno o más inodos (entradas de información de archivo) se crean para compartir algunos o todos sus datos. Se denomina de manera análoga a los enlaces duros , que funcionan a nivel de inodo, y los enlaces simbólicos que funcionan a nivel de nombre de archivo. [8] Las entradas individuales tienen un comportamiento de copia en escritura que no es de alias, es decir, cambiar una copia después no afectará a otras copias. [9] ReFS de Microsoft también admite esta operación. [10]
La deduplicación de destino es el proceso de eliminar duplicados cuando los datos no se generaron en esa ubicación. Un ejemplo de esto sería un servidor conectado a una SAN/NAS. La SAN/NAS sería un destino para el servidor (deduplicación de destino). El servidor no está al tanto de ninguna deduplicación, el servidor también es el punto de generación de datos. Un segundo ejemplo sería la copia de seguridad. Generalmente, se trata de un almacenamiento de copias de seguridad, como un repositorio de datos o una biblioteca de cintas virtuales .
Una de las formas más comunes de implementación de deduplicación de datos funciona comparando fragmentos de datos para detectar duplicados. Para que esto suceda, a cada fragmento de datos se le asigna una identificación, calculada por el software, generalmente utilizando funciones hash criptográficas. En muchas implementaciones, se supone que si la identificación es idéntica, los datos son idénticos, aunque esto no puede ser cierto en todos los casos debido al principio de pigeonhole ; otras implementaciones no suponen que dos bloques de datos con el mismo identificador sean idénticos, sino que realmente verifican que los datos con la misma identificación sean idénticos. [11] Si el software supone que una identificación dada ya existe en el espacio de nombres de deduplicación o realmente verifica la identidad de los dos bloques de datos, dependiendo de la implementación, entonces reemplazará ese fragmento duplicado con un enlace.
Una vez que se han deduplicado los datos, al volver a leer el archivo, dondequiera que se encuentre un vínculo, el sistema simplemente reemplaza ese vínculo con el fragmento de datos al que se hace referencia. El proceso de deduplicación está pensado para ser transparente para los usuarios finales y las aplicaciones.
Las implementaciones de deduplicación comercial difieren según sus métodos de fragmentación y arquitecturas.
Hasta la fecha, la deduplicación de datos se ha utilizado predominantemente con sistemas de almacenamiento secundario. Las razones para esto son dos: primero, la deduplicación de datos requiere una sobrecarga para descubrir y eliminar los datos duplicados. En los sistemas de almacenamiento primario, esta sobrecarga puede afectar el rendimiento. La segunda razón por la que se aplica la deduplicación a los datos secundarios es que estos tienden a tener más datos duplicados. Las aplicaciones de respaldo en particular suelen generar porciones significativas de datos duplicados con el tiempo.
La deduplicación de datos se ha implementado con éxito con almacenamiento primario en algunos casos donde el diseño del sistema no requiere una sobrecarga significativa ni afecta el rendimiento.
El almacenamiento de instancia única (SIS) es la capacidad de un sistema de tomar múltiples copias de objetos de contenido y reemplazarlas por una única copia compartida. Es un medio para eliminar la duplicación de datos y aumentar la eficiencia. El SIS se implementa con frecuencia en sistemas de archivos , software de servidor de correo electrónico , copia de seguridad de datos y otro software informático relacionado con el almacenamiento. El almacenamiento de instancia única es una variante simple de la deduplicación de datos. Si bien la deduplicación de datos puede funcionar a nivel de segmento o subbloque, el almacenamiento de instancia única funciona a nivel de objeto, eliminando copias redundantes de objetos como archivos completos o mensajes de correo electrónico. [12]
El almacenamiento de instancia única se puede utilizar junto con (o en capas) otros métodos de duplicación o compresión de datos para mejorar el rendimiento a cambio de un aumento en la complejidad y (en algunos casos) un aumento menor en los requisitos de espacio de almacenamiento.
Un método para deduplicar datos se basa en el uso de funciones hash criptográficas para identificar segmentos de datos duplicados. Si dos piezas de información diferentes generan el mismo valor hash, esto se conoce como colisión . La probabilidad de una colisión depende principalmente de la longitud del hash (consulte el ataque de cumpleaños ). Por lo tanto, surge la preocupación de que se pueda producir corrupción de datos si se produce una colisión de hash y no se utilizan medios de verificación adicionales para verificar si hay una diferencia en los datos o no. Tanto las arquitecturas en línea como las de posprocesamiento pueden ofrecer validación bit a bit de los datos originales para garantizar la integridad de los datos. Las funciones hash utilizadas incluyen estándares como SHA-1 , SHA-256 y otros.
La intensidad de los recursos computacionales del proceso puede ser un inconveniente de la deduplicación de datos. Para mejorar el rendimiento, algunos sistemas utilizan tanto hashes débiles como fuertes. Los hashes débiles son mucho más rápidos de calcular, pero existe un mayor riesgo de una colisión de hashes. Los sistemas que utilizan hashes débiles calcularán posteriormente un hashes fuerte y lo utilizarán como factor determinante para determinar si se trata realmente de los mismos datos o no. Tenga en cuenta que la sobrecarga del sistema asociada con el cálculo y la búsqueda de valores hash es principalmente una función del flujo de trabajo de deduplicación. La reconstitución de archivos no requiere este procesamiento y es poco probable que cualquier penalización de rendimiento incremental asociada con el reensamblado de fragmentos de datos afecte al rendimiento de la aplicación.
Otra preocupación es la interacción entre la compresión y el cifrado. El objetivo del cifrado es eliminar cualquier patrón discernible en los datos. Por lo tanto, los datos cifrados no se pueden deduplicar, aunque los datos subyacentes puedan ser redundantes.
Aunque no es un defecto de la deduplicación de datos, se han producido violaciones de datos cuando se utilizan procedimientos de seguridad y validación de acceso insuficientes con grandes repositorios de datos deduplicados. En algunos sistemas, como es habitual en el almacenamiento en la nube, [ cita requerida ] un atacante puede recuperar datos que pertenecen a otros conociendo o adivinando el valor hash de los datos deseados. [13]
La deduplicación se implementa en algunos sistemas de archivos como en ZFS o Write Anywhere File Layout y en diferentes modelos de matrices de discos . [ cita requerida ] Es un servicio disponible tanto en NTFS como en ReFS en servidores Windows.