Cisco propone il file system PuzzleFS per il kernel Linux

Cisco ha proposto un nuovo file system, PuzzleFS, implementato come modulo per il kernel Linux, scritto in Rust. Il file system è progettato per essere utilizzato per ospitare contenitori isolati e continua a sviluppare le idee proposte nel file system Atomfs. L'implementazione è ancora in fase di prototipo, supporta la creazione con il ramo del kernel Linux Rust-next ed è aperta sotto le licenze Apache 2.0 e MIT.

Il progetto mira a superare le limitazioni che si presentano quando si utilizzano immagini contenitore nel formato OCI (Open Container Initiative). PuzzleFS risolve problemi quali l'archiviazione efficiente di dati duplicati, la capacità di montaggio diretto, la creazione di immagini ripetibili e la sicurezza della memoria.

Per deduplicare i dati che si ripetono in contenitori diversi viene utilizzato l'algoritmo FastCDC (Fast Content-Defined Chunking), che funziona dividendo i dati in frammenti di dimensione arbitraria e mantenendo un indice con gli hash dei frammenti elaborati. I frammenti ripetuti vengono archiviati una volta e indicizzati congiuntamente per tutti gli strati del file system, ad es. la deduplicazione può coprire diversi punti di montaggio (un nuovo livello FS può essere lanciato sulla base di uno esistente e utilizzare i frammenti di dati in esso contenuti durante la deduplicazione).

L'assemblaggio ripetitivo delle immagini del contenitore si ottiene definendo una rappresentazione canonica del formato dell'immagine del contenitore. Il montaggio diretto consente di montare un'immagine del contenitore OCI da un archivio condiviso globale senza prima decomprimerlo, utilizzando un hash dei contenuti dal manifest del contenitore come identificatore. Per verificare l'integrità dei dati quando si utilizza l'archiviazione condivisa, è possibile utilizzare il meccanismo fs-verity che, quando si accede ai file, controlla la corrispondenza degli hash specificati nell'indice binario con il contenuto effettivo.

È stato scelto il linguaggio Rust perché combina elevate prestazioni del codice risultante con funzionalità per lavorare in sicurezza con la memoria, riducendo così il rischio di vulnerabilità causate da problemi come l'accesso ad un'area di memoria dopo che è stata liberata e il superamento dei limiti del buffer. L'utilizzo di Rust per il modulo del kernel ha inoltre reso possibile la condivisione del codice tra i componenti del kernel e dello spazio utente per creare un'implementazione singola e sicura.

Altri obiettivi del progetto includono: creazione e montaggio molto rapidi delle immagini, la possibilità di utilizzare uno stadio intermedio opzionale per la canonicalizzazione delle immagini, la possibilità di passaggi completi dell'albero dei file in stile mtree quando si utilizza una struttura multistrato, imposizione in stile casync di modifiche e un’architettura facile da implementare.

Fonte: opennet.ru

Aggiungi un commento