DwarFS, un sistema de archivos diseñado para reducir los datos redundantes
Marcus Holland-Moritz (un inginerio de software de Facebook) dio a conocer mediante una publicacion las primeras versiones de DwarFS, un sistema de archivos de solo lectura diseñado para maximizar la compresión y reducir los datos redundantes.
Este sistema de archivos usa el mecanismo FUSE y se ejecuta en el espacio del usuario, el código está escrito en C++ y se distribuye bajo la licencia GPLv3.
Sobre DwarFS
DwarFS se asemeja a los sistemas de archivos como SquashFS, cramfs y CromFS en sus tareas , y se puede usar para crear imágenes en vivo y reducir el tamaño de archivos con una gran cantidad de duplicados y datos duplicados (por ejemplo, almacenamiento de imágenes de máquinas virtuales o colecciones de diferentes versiones de programas).
En términos de velocidad de acceso a los datos, DwarFS está aproximadamente al mismo nivel que SquashFS, pero varias veces por delante de este FS en términos de eficiencia de compresión y velocidad de formación de imágenes.
El proyecto fue desarrollado para resolver el problema de optimizar el almacenamiento con diferentes versiones de Perl (el autor de DwarFS participa en el mantenimiento del archivo CPAN).
Inicialmente, se intentó usar Cromfs para la compresión, pero tomó demasiado tiempo construir la imagen y la estabilidad dejó mucho que desear. SquashFS funcionó de manera estable y renderizó las imágenes notablemente más rápido, pero el nivel de compresión fue inaceptable.
La mayor parte del código de DwarFS se escribió en 2013. Este año, el autor encontró tiempo para llevar el código al público y escribir documentación. DwarFS usa las bibliotecas Boost y Folly.
La biblioteca congelada de la sucursal de Thrift Facebook se usa para almacenar metadatos. Otras dependencias incluyen FUSE3 y las bibliotecas de compresión lz4 , zstd y liblzma.
DwarFS superó a SquashFS en términos de tasa de compresión en 8 veces, y en términos de velocidad de creación de imágenes en 4 veces al crear una imagen que incluye 1139 instalaciones de Perl diferentes, en las que hay 284 versiones de Perl.
DwarFS pudo reducir el conjunto de pruebas de 47 GB a 582 MB (1,1% del tamaño original), mientras que el tamaño de imagen de SquashFS resultante fue de 4,7 GB. SquashFS tardó 69 minutos en crear la imagen, mientras que DwarFS completó el trabajo en 15 minutos.
Ambos sistemas de archivos utilizaron el algoritmo ZSTD para la compresión. Al usar LZMA, el tamaño de la imagen DwarFS se redujo en otro 18% (aprox unos 479 MB), pero la velocidad de acceso a dicha imagen se redujo significativamente.
Las pruebas con datos con menos duplicados mostraron una ventaja no tan significativa, pero aún notable, de DwarFS. Por ejemplo, el tamaño de la imagen para el FS raíz del SO Paspberry Pi fue de 298 MB para DwarFS y 364 MB para SquashFS, y el tiempo de creación fue de 1 minuto 36 segundos y 1 minuto 54 segundos, respectivamente.
De las características clave de DwarFS se destacan las siguientes:
- Capacidad de poder elimine la redundancia agrupando datos similares (independientemente de los límites del archivo) utilizando funciones hash LSH para identificar objetos similares.
- Análisis de la segmentación de bloques del sistema de archivos para reducir el tamaño del sistema de archivos sin comprimir y aumentar la eficiencia del uso del caché del procesador debido al hecho de que ingresan más datos necesarios.
- Implementación multiproceso de la utilidad de imágenes y el módulo FUSE, que puede usar todos los núcleos de CPU disponibles cuando se ejecuta.
- Soporte experimental para la capacidad de conectar controladores Lua que se pueden usar para filtrar y ordenar contenido.
- Modo de reempaquetado que le permite cambiar el algoritmo de compresión de una imagen ya creada (por ejemplo, puede reempaquetar usando LZMA o LZ4 en lugar de ZSTD).
- Las imágenes se crean usando la utilidad mkdwarfs y se montan usando la utilidad dwarfs .
Finalmente si quieres conocer mas al respecto sobre este sistema de archivos o estas interesado en poder compilar el codigo fuente de este, puedes consultar la informacion u obtener el codigo fuente en el siguiente enlace.