Cisco presenta el sistema de archivos PuzzleFS para el kernel de Linux

Cisco ha propuesto un nuevo sistema de archivos, PuzzleFS, implementado como módulo para el kernel de Linux, escrito en Rust. El sistema de archivos está diseñado para usarse para alojar contenedores aislados y continúa desarrollando las ideas propuestas en el sistema de archivos Atomfs. La implementación aún se encuentra en la etapa de prototipo, admite la compilación con la rama del kernel de Linux Rust-next y está abierta bajo las licencias Apache 2.0 y MIT.

El proyecto tiene como objetivo superar las limitaciones que surgen al utilizar imágenes de contenedores en formato OCI (Open Container Initiative). PuzzleFS resuelve 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 deduplicar datos que se repiten en diferentes 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 hashes de los fragmentos procesados. Los fragmentos repetidos se almacenan una vez y se indexan conjuntamente para todas las capas del sistema de archivos, es decir, la deduplicación puede cubrir diferentes puntos de montaje (se puede iniciar una nueva capa de FS basada en una existente y utilizar los fragmentos de datos que contiene durante la deduplicación).

El ensamblaje repetitivo de imágenes de contenedores se logra mediante la definición de una representación canónica del formato de imagen del contenedor. El montaje directo le permite montar una imagen de contenedor OCI desde un almacenamiento compartido global sin descomprimirla primero, utilizando un hash del contenido del manifiesto del contenedor como identificador. Para verificar la integridad de los datos cuando se utiliza el almacenamiento compartido, se puede utilizar el mecanismo fs-verity, que, al acceder a los archivos, verifica la correspondencia de los hashes especificados en el índice binario con el contenido real.

Se eligió el lenguaje Rust porque combina un alto rendimiento del código resultante con capacidades para trabajar de forma segura con la memoria, lo que reduce el riesgo de vulnerabilidades causadas por problemas como el acceso a un área de memoria después de haber sido liberada y el desbordamiento de los límites del búfer. El uso de Rust para el módulo del kernel también hizo posible compartir código entre el kernel y los componentes del espacio de usuario para crear una implementación única y segura.

Otros objetivos del proyecto incluyen: creación y montaje de imágenes muy rápido, la capacidad de utilizar una etapa intermedia opcional para la canonicalización de imágenes, la opción de pases completos de árbol de archivos estilo mtree cuando se utiliza una estructura multicapa, imposición estilo casync de cambios y una arquitectura fácil de implementar.

Fuente: opennet.ru

Añadir un comentario