Cisco heeft een nieuw bestandssysteem PuzzleFS geïntroduceerd, dat is geïmplementeerd als een module voor de Linux-kernel, geschreven in de programmeertaal Rust. Dit bestandssysteem is ontworpen voor het plaatsen van geïsoleerde containers en bouwt voort op de ideeën die zijn voorgesteld in het bestandssysteem Atomfs. De implementatie verkeert nog in de prototypefase, ondersteunt de build met de rust-next tak van de Linux-kernel en is open onder de Apache 2.0 en MIT licenties.
Het project is gericht op het omzeilen van beperkingen die optreden bij het gebruik van containerimages in het OCI-formaat (Open Container Initiative). PuzzleFS pakt uitdagingen aan zoals efficiënte opslag van duplicerende gegevens, de mogelijkheid tot direct monteren, herhaalbare builds van images en veilige omgang met geheugen.
Voor de deduplicatie van herhalende gegevens in verschillende containers wordt het FastCDC-algoritme (Fast Content-Defined Chunking) ingezet, dat werkt door gegevens op te splitsen in fragmenten van willekeurige grootte en het bijhouden van een index met hashes van de verwerkte fragmenten. Herhalende fragmenten worden één keer opgeslagen en samen geïndexeerd voor alle lagen van het bestandssysteem, wat betekent dat deduplicatie verschillende mountpunten kan omvatten (een nieuwe laag van het bestandssysteem kan worden gestart op basis van een bestaande laag en de daarin aanwezige gegevensfragmenten gebruiken voor deduplicatie).
Herhaalbare builds van containerimages worden bereikt door het definiëren van een canonieke weergave van het formaat van containerimages. Direct mounten maakt het mogelijk om een containerimage in OCI-formaat te monteren vanuit een wereldwijd gedeeld opslagmedium zonder deze vooraf te decomprimeren, gebruikmakend van de hash van de inhoud uit het manifest van de container als identificator. Voor het verifiëren van de integriteit van gegevens in een omgeving met een gemeenschappelijk opslagmedium kan het fs-verity-mechanisme worden toegepast, dat bij toegang tot bestanden de overeenstemming van de in de binaire index opgegeven hashes met de werkelijke inhoud controleert.
De programmeertaal Rust is gekozen vanwege de combinatie van hoge prestaties van de resulterende code en mogelijkheden voor veilige geheugenwerking, wat het risico op kwetsbaarheden vermindert die veroorzaakt kunnen worden door problemen zoals het aanspreken van geheugenruimten na vrijgave en bufferoverlopen. Het gebruik van Rust voor de kernelmodule heeft ook het delen van code in de kernel en componenten die in de gebruikersruimte draaien mogelijk gemaakt, voor de creatie van een enkele beveiligde implementatie.
Onder andere doelen van het project zijn: zeer snelle compilatie en montage van beeldbestanden, de mogelijkheid om een optionele tussenstap voor transformatie (canonicalization) van de beelden te gebruiken, de optionele noodzaak van volledige doorlopen van de FS-boom in mtree-stijl bij gebruik van een gelaagde structuur, aanbrengen van wijzigingen in casync-stijl en een eenvoudig te implementeren architectuur.
Bron: opennet.ru
