Das Unternehmen Cisco hat ein neues Dateisystem namens PuzzleFS vorgestellt, das als Modul für den Linux-Kernel entwickelt wurde und in Rust geschrieben ist. Dieses Dateisystem ist für die Bereitstellung isolierter Container konzipiert und setzt die Ideen fort, die in dem Dateisystem Atomfs vorgeschlagen wurden. Derzeit befindet sich die Implementierung in der Prototyp-Phase, unterstützt die Kompilierung mit dem Kernel-Zweig rust-next und ist unter den Lizenzen Apache 2.0 und MIT verfügbar.
Das Projekt zielt darauf ab, die Einschränkungen zu umgehen, die bei der Verwendung von Container-Images im OCI-Format (Open Container Initiative) auftreten. PuzzleFS adressiert Herausforderungen wie die effiziente Speicherung von Duplikaten, die Möglichkeit der direkten Montage, wiederholbare Builds von Images und die sichere Handhabung des Speichers.
Für die Deduplizierung von wiederkehrenden Daten in verschiedenen Containern wird der Algorithmus FastCDC (Fast Content-Defined Chunking) eingesetzt, der durch die Aufteilung der Daten in Fragmente beliebiger Größe und die Führung eines Index mit Hashes der verarbeiteten Fragmente arbeitet. Wiederkehrende Fragmente werden einmal gespeichert und gemeinsam für alle Schichten des Dateisystems indexiert, d.h. die Deduplizierung kann verschiedene Einhängepunkte abdecken (eine neue Dateisystemschicht kann auf der Grundlage einer bestehenden laufen und die darin vorhandenen Datenfragmente bei der Deduplizierung verwenden).
Die wiederholte Erstellung von Container-Images erfolgt durch die Definition einer kanonischen Darstellung des Container-Image-Formats. Das direkte Mounting ermöglicht es, ein OCI-Container-Image aus einem globalen Shared Storage zu mounten, ohne es zuvor zu entpacken, und verwendet dabei den Inhalts-Hash aus dem Container-Manifest als Identifikator. Zur Überprüfung der Datenintegrität in Shared-Storage-Szenarien kann der fs-verity-Mechanismus eingesetzt werden, der beim Zugriff auf Dateien die im binären Index angegebenen Hashes mit dem tatsächlichen Inhalt vergleicht.
Die Programmiersprache Rust wurde gewählt, weil sie eine hohe Leistung des resultierenden Codes mit Möglichkeiten für sichere Speicherverwaltung kombiniert, wodurch das Risiko von Sicherheitsanfälligkeiten, verursacht durch Probleme wie den Zugriff auf Speicherbereiche nach deren Freigabe und Pufferüberläufe, verringert wird. Der Einsatz von Rust für das Kernel-Modul hat auch die gemeinsame Nutzung von Code im Kernel und in Benutzerspace-Komponenten ermöglicht, um eine einheitliche sichere Implementierung zu schaffen.
Zu den weiteren Zielen des Projekts gehören: eine sehr schnelle Erstellung und Montage von Images, die Möglichkeit, eine optionale Zwischenstufe zur Transformation (Kanonisierung) von Images zu nutzen, das Weglassen vollständiger Durchläufe im Dateibaum im mtree-Stil bei Verwendung einer schichtbasierten Struktur, das Überlagern von Änderungen im Stil von casync sowie eine einfach umsetzbare Architektur.
Quelle: opennet.ru
