PuzzleFS, el sistema de archivos de Cisco escrito en Rust
Cisco dio a conocer hace poco mediante las lista de correo del Kernel de Linux, la propuesta de un nuevo sistema de archivos el cual tiene como nombre «PuzzleFS» y que se propone implementar como un módulo para el kernel de Linux.
PuzzleFS, es un sistema de archivos escrito en Rust, diseñado por Cisco para albergar contenedores aislados y continúa el desarrollo de las ideas propuestas en el sistema de archivos AtomfsFS, para abordar las
limitaciones del formato OCI existentes.
¡Hola a todos!
Este es un controlador de prueba de concepto escrito para PuzzleFS sistema de archivos contenedor de última generación [1]. He incluido un breve resumen. sobre puzzlefs más abajo. Este controlador se basa en el rust-next branch, además de lo cual he respaldado las abstracciones del sistema de archivos…
Sobre el desarrollo del proyecto, se menciona que se tiene como objetivo sortear las limitaciones que surgen al utilizar imágenes de contenedores en formato OCI (Open Container Initiative). PuzzleFS aborda problemas como el almacenamiento eficiente de datos duplicados, la capacidad de montaje directo, la creación de imágenes repetibles y la seguridad de la memoria.
Para la deduplicación de datos repetidos en distintos contenedores se utiliza el algoritmo FastCDC (Fast Content-Defined Chunking), que funciona dividiendo los datos en fragmentos de tamaño arbitrario y manteniendo un índice con hash de los fragmentos procesados.
Los fragmentos repetidos se almacenan una vez y se indexan conjuntamente para todas las capas FS, es decir, la deduplicación puede cubrir diferentes puntos de montaje (se puede lanzar una nueva capa FS basada en la existente y usar los fragmentos de datos que contiene durante la deduplicación).
La compilacion repetible de imágenes de contenedor se logra mediante la definición de una representación canónica del formato de imagen del contenedor. El montaje directo permite montar una imagen de contenedor OCI desde el almacenamiento compartido global sin desempaquetarlo primero, utilizando el hash de contenido del manifiesto del contenedor como identificador.
El soporte de montaje directo es una característica clave de puzzlefs y, junto con fs-verity, proporciona integridad de datos. Actualmente, puzzlefs se implementa como un sistema de archivos de espacio de usuario (FUSE), aun que, un controlador de sistema de archivos del kernel de solo lectura está en marcha.
El mecanismo fs-verity se puede utilizar para verificar la integridad de los datos en las condiciones de uso de un almacenamiento compartido que, al acceder a los archivos, verifica si los valores hash especificados en el índice binario corresponden al contenido real.
Sobre el lenguaje de programación, se menciona que se eligió el lenguaje Rust porque combina el alto rendimiento del código resultante con capacidades de memoria segura, lo que reduce el riesgo de vulnerabilidades causadas por problemas como el acceso a la memoria después de liberarla y las saturaciones de búfer. El uso de Rust para el módulo del kernel también hizo posible compartir código en los componentes del kernel y del espacio de usuario para crear una única implementación segura.
Finalmente, se menciona que otros objetivos del proyecto incluyen la construcción y el montaje de imágenes muy rápidos, la capacidad de usar una etapa intermedia opcional para la canonicalización de imágenes, los recorridos de árboles FS de estilo mtree opcionales cuando se usa una estructura en capas, cambios de estilo casync, la duplicación reducida, el soporte de montaje directo y las garantías de seguridad de la memoria, algunas inspiradas en el documento de diseño OCIv2, entre otras cosas más.
Cabe mencionar que hasta el momento la implementación de este sistema de archivos aún se encuentra en la etapa de prototipo, por lo que no se recomienda su uso ni implementación en entornos de producción, pero para los interesados deben saber que es compatible con la construcción con la rama del kernel de Linux rust-next.
Finalmente para los interesados en poder conocer más al respecto, deben saber que el código del proyecto está abierto bajo las licencias Apache 2.0 y MIT y puedes consultar los detalles de la nota en el siguiente enlace.