Compania Cisco a lansat un nou sistem de fișiere, PuzzleFS, implementat ca un modul pentru nucleul Linux, scris în limbajul Rust. FS este proiectat pentru a fi utilizat în plasarea containerelor izolate și continuă dezvoltarea conceptelor propuse în FS Atomfs. Implementarea se află în prezent în stadiul de prototip, susține construcția cu ramura kernelului Linux rust-next și este deschisă sub licențele Apache 2.0 și MIT.
Proiectul are ca obiectiv ocolirea limitărilor care apar la utilizarea imaginilor containerelor în format OCI (Open Container Initiative). PuzzleFS abordează probleme precum stocarea eficientă a datelor duplicat, posibilitatea de montare directă, reconstruirea repetată a imaginilor și operarea sigură cu memoria.
Pentru deduplicarea datelor repetate în diferite containe, este utilizat algoritmul FastCDC (Fast Content-Defined Chunking), care funcționează prin împărțirea datelor în fragmente de dimensiuni variabile și menținerea unui index cu hash-uri ale fragmentelor procesate. Fragmentele repetate sunt stocate o singură dată și indexate în comun pentru toate straturile FS, astfel încât deduplicarea poate acoperi diferite puncte de montare (un nou strat FS poate fi pornit pe baza unuia existent și poate folosi fragmentele de date disponibile în acesta la deduplicare).
Reconstrucția repetată a imaginilor containerelor este realizată prin definirea unei reprezentări canonice a formatului imaginilor containerelor. Montarea directă (direct-mount) permite montarea unei imagini de container în format OCI dintr-un depozit global partajat fără a fi nevoie de despachetare prealabilă, utilizând ca identificator hash-ul conținutului din manifestul containerului. Pentru verificarea integrității datelor în condiții de utilizare a unui depozit comun, poate fi utilizat mecanismul fs-verity, care, la accesarea fișierelor, verifică concordanța hash-urilor specificate în indexul binar cu conținutul real.
Limbajul Rust a fost ales deoarece combină performanța ridicată a codului rezultat cu capacitățile de gestionare sigură a memoriei, ceea ce reduce riscul apariției vulnerabilităților cauzate de probleme precum accesul la zona de memorie după eliberare și depășirea limitelor buffer-ului. Utilizarea Rust pentru modulul kernel a permis, de asemenea, partajarea codului între kernel și componentele care funcționează în spațiul utilizatorului, pentru a crea o implementare sigură unificată.
Printre alte obiective ale proiectului se numără: compilarea și montarea rapidă a imaginilor, posibilitatea utilizării unei etape intermediare opționale pentru transformarea (canonicalization) imaginilor, opționalitatea trecerilor complete prin arborele sistemului de fișiere în stil mtree atunci când se folosește o structură multilayer, aplicarea modificărilor în stil casync și o arhitectură simplă de implementat.
Sursa: opennet.ro
