Cisco propose le système de fichiers PuzzleFS pour le noyau Linux

Cisco a proposé un nouveau système de fichiers, PuzzleFS, implémenté en tant que module pour le noyau Linux, écrit en Rust. Le système de fichiers est conçu pour être utilisé pour héberger des conteneurs isolés et continue de développer les idées proposées dans le système de fichiers Atomfs. L'implémentation est encore au stade du prototype, prend en charge la construction avec la branche du noyau Linux rust-next et est ouverte sous les licences Apache 2.0 et MIT.

Le projet vise à contourner les limitations qui surviennent lors de l'utilisation d'images de conteneurs au format OCI (Open Container Initiative). PuzzleFS résout des problèmes tels que le stockage efficace des données en double, la capacité de montage direct, la création d'images reproductibles et la sécurité de la mémoire.

Pour dédupliquer les données répétées dans différents conteneurs, l'algorithme FastCDC (Fast Content-Defined Chunking) est utilisé, qui fonctionne en divisant les données en fragments de taille arbitraire et en maintenant un index avec les hachages des fragments traités. Les fragments répétitifs sont stockés une seule fois et indexés conjointement pour toutes les couches du système de fichiers, c'est-à-dire la déduplication peut couvrir différents points de montage (une nouvelle couche FS peut être lancée sur la base d'une couche existante et utiliser les fragments de données qu'elle contient lors de la déduplication).

L'assemblage répétitif d'images de conteneur est réalisé grâce à la définition d'une représentation canonique du format d'image de conteneur. Le montage direct vous permet de monter une image de conteneur OCI à partir d'un stockage partagé global sans la décompresser au préalable, en utilisant un hachage du contenu du manifeste du conteneur comme identifiant. Pour vérifier l'intégrité des données lors de l'utilisation du stockage partagé, le mécanisme fs-verity peut être utilisé, qui, lors de l'accès aux fichiers, vérifie la correspondance des hachages spécifiés dans l'index binaire avec le contenu réel.

Le langage Rust a été choisi car il combine les hautes performances du code résultant avec des capacités permettant de travailler en toute sécurité avec la mémoire, ce qui réduit le risque de vulnérabilités causées par des problèmes tels que l'accès à une zone mémoire après sa libération et le dépassement des limites de la mémoire tampon. L'utilisation de Rust pour le module du noyau a également permis de partager du code entre les composants du noyau et de l'espace utilisateur afin de créer une implémentation unique et sécurisée.

Les autres objectifs du projet incluent : la construction et le montage très rapides d'images, la possibilité d'utiliser une étape intermédiaire facultative pour la canonisation des images, la possibilité de passer une arborescence de fichiers complète de style mtree lors de l'utilisation d'une structure multicouche, l'imposition de style casync. de changements et une architecture facile à mettre en œuvre.

Source: opennet.ru

Ajouter un commentaire