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. Das Dateisystem ist fĂŒr den Einsatz in isolierten Containern gedacht und baut auf den Ideen auf, die in dem Dateisystem Atomfs prĂ€sentiert wurden. Die Implementierung befindet sich derzeit in der Prototyp-Phase, unterstĂŒtzt den Build mit dem Linux-Kernel rust-next und ist unter den Lizenzen Apache 2.0 und MIT frei zugĂ€nglich.
Das Projekt zielt darauf ab, die EinschrÀnkungen zu umgehen, die beim Einsatz von Container-Images im OCI-Format (Open Container Initiative) auftreten. PuzzleFS löst Probleme wie die effiziente Speicherung redundanter Daten, die Möglichkeit des direkten Mountens, wiederholte Builds von Images und eine sichere Handhabung des Speichers.
Zur Deduplication von redundanten Daten in verschiedenen Containern wird ein Algorithmus namens FastCDC (Fast Content-Defined Chunking) verwendet, der die Daten in Fragmente beliebiger GröĂe aufteilt und einen Index mit Hashwerten der bearbeiteten Fragmente fĂŒhrt. Wiederholte Fragmente werden einmal gespeichert und gemeinsam fĂŒr alle Schichten des Dateisystems indiziert, d.h. die Deduplication kann verschiedene Mount-Punkte abdecken (eine neue Schicht des Dateisystems kann auf Basis einer bestehenden gestartet werden und die darin enthaltenen Fragmente bei der Deduplication verwenden).
Die wiederholte Erstellung von Container-Images wird durch die Definition einer kanonischen Darstellung von Container-Image-Formaten erreicht. Das direkte Mounten (direct-mount) ermöglicht es, ein OCI-Container-Image aus einem globalen gemeinsam genutzten Speicher zu mounten, ohne es vorher entpacken zu mĂŒssen, und verwendet als Identifikator den Hash des Inhalts aus dem Manifest des Containers. Zur ĂberprĂŒfung der DatenintegritĂ€t in einer gemeinsamen Speicherumgebung kann der Mechanismus fs-verity eingesetzt werden, der bei Zugriff auf Dateien die Ăbereinstimmung der im binĂ€ren Index angegebenen Hashes mit dem tatsĂ€chlichen Inhalt ĂŒberprĂŒft.
Die Programmiersprache Rust wurde gewĂ€hlt, weil sie hohe LeistungsfĂ€higkeit des resultierenden Codes mit sicheren Speicherfunktionen kombiniert, was das Risiko von Schwachstellen verringert, die durch Probleme wie den Zugriff auf Speicher nach dessen Freigabe und PufferĂŒberlĂ€ufe verursacht werden. Der Einsatz von Rust im Kernel-Modul ermöglicht zudem die gemeinsame Nutzung von Code zwischen dem Kernel und Benutzerspace-Komponenten, um eine einheitliche sichere Implementierung zu schaffen.
Zu den weiteren Zielen des Projekts gehören: extrem schnelles Erstellen und Einbinden von Abbildungen, die Möglichkeit, eine optionale Zwischenstufe zur Umwandlung (Canonicalization) von Abbildungen zu verwenden, die Nichtverpflichtung zu vollstĂ€ndigen DurchlĂ€ufen des Dateisystems in mtree-Stil bei Verwendung einer schichtbasierten Struktur, die Anwendung von Ănderungen im casync-Stil und eine einfach zu implementierende Architektur.
Quelle: opennet.ru
