Společnost Cisco navrhla nový souborový systém PuzzleFS, implementovaný jako modul pro jádro Linux, napsaný v jazyce Rust. Systém je určen pro využití v izolovaných kontejnerech a pokračuje ve vývoji konceptů navržených v systému Atomfs. Implementace je zatím ve stádiu prototypu, podporuje sestavování s větví jádra Linux rust-next a je dostupná na základě licencí Apache 2.0 a MIT.
Projekt si klade za cíl obcházet omezení, která vznikají při používání kontejnerových obrazů ve formátu OCI (Open Container Initiative). PuzzleFS řeší úkoly jako efektivní ukládání duplicitních dat, možnost přímého připojení, opakovanou sestavbu obrazů a bezpečné hospodaření s pamětí.
Pro deduplikaci opakujících se dat v různých kontejnerech je použit algoritmus FastCDC (Fast Content-Defined Chunking), který funguje prostřednictvím rozdělení dat na fragmenty libovolné velikosti a vedení indexu s hash hodnotami zpracovaných fragmentů. Opakující se fragmenty jsou uchovávány pouze jednou a společně indexovány pro všechny vrstvy souborového systému, tj. deduplikace může zasahovat i různé body připojení (nová vrstva souborového systému může být spuštěna na základě existující a použít v ní obsažené fragmenty dat při deduplikaci).
Opakovaná sestavba kontejnerových obrazů je dosažena definováním kanonického zobrazení formátu kontejnerových obrazů. Přímé připojení (direct-mount) umožňuje připojit kontejnerový obraz ve formátu OCI z globálního sdíleného úložiště bez předchozího rozbalení a jako identifikátor používá hash obsahu z manifestu kontejneru. Pro ověření integrity dat ve sdíleném úložišti může být použit mechanismus fs-verity, který při přístupu k souborům kontroluje shodu zadaných hash hodnot v binárním indexu s aktuálním obsahem.
Jazyk Rust byl zvolen proto, že kombinuje vysoký výkon výsledného kódu s možnostmi bezpečné práce s pamětí, což snižuje riziko vzniku zranitelností způsobených problémy, jako je přístup k oblasti paměti po jejím uvolnění a přetečení vyrovnávací paměti. Použití Rustu pro modul jádra také umožnilo sdílení kódu v jádře a komponentách běžících v uživatelském prostoru, což vedlo k vytvoření jednotné chráněné implementace.
Mezi další cíle projektu patří: velmi rychlé sestavení a montování obrazů, možnost použití volitelné mezipřístupové fáze pro kanonizaci (canonicalization) obrazů, nepovinnost používat plné průchody po FS stromě ve stylu mtree při použití vícestupňové struktury, aplikace změn ve stylu casync a jednoduchá implementace architektury.
Zdroj: opennet.ru
