Компания Cisco представи новата файлова система PuzzleFS, реализирана като модул за ядрото на Linux, написан на Rust. ФС е проектирана за използване при разполагане на изолирани контейнери и продължава развитието на идеите, предложени в файловата система Atomfs. Реализацията все още е на етап прототип, поддържа сглобяване с клона на ядрото на Linux rust-next и е отворена под лицензите Apache 2.0 и MIT.
Проектът цели преодоляване на ограниченията, които възникват при използването на образи на контейнери във формат OCI (Open Container Initiative). PuzzleFS решава задачи като ефективно съхранение на дублирани данни, възможност за директно монтиране, повтарящо се сглобяване на образи и безопасна работа с паметта.
За дедупликация на повторящите се данни в различни контейнери се прилага алгоритъмът FastCDC (Fast Content-Defined Chunking), който работи чрез разделяне на данните на фрагменти с произволен размер и поддържане на индекс с хешове на обработените фрагменти. Повтарящите се фрагменти се съхраняват само веднъж и съвместно се индексират за всички слоеве на ФС, т.е. дедупликацията може да обхваща различни точки на монтиране (нов слой на ФС може да бъде стартиран на базата на съществуващ и да използва наличните в него фрагменти данни при дедупликацията).
Повтарящото се сглобяване на образи на контейнери се постига чрез определяне на канонично представяне на формата на образите на контейнери. Директното монтиране (direct-mount) позволява монтиране на образ на контейнер във формат OCI от глобално споделено хранилище без предварителна разпаковка, използвайки хеш на съдържанието от манефеста на контейнера като идентификатор. За верификация на целостта на данните в условия на използване на общо хранилище може да се приложи механизъмът fs-verity, който при достъп до файлове проверява съответствието на указаните в бинарния индекс хешове с фактическото съдържание.
Езикът Rust е избран заради синергията между високата производителност на генерирания код и възможностите за безопасна работа с паметта, което намалява риска от уязвимости, причинени от проблеми като достъп до паметта след нейното освобождаване и излизане извън границите на буфера. Използването на Rust за модула на ядрото също позволи споделяне на код между ядрото и компонентите, работещи в пространството на потребителя, за създаването на единна защитена реализация.
Сред другите цели на проекта: изключително бързо компилиране и монтиране на образи, възможността за използване на незадължителен междинен етап за преобразуване (канонизация) на образи, незадължителност на пълните обходи в дървото на файлова система по стил mtree при използване на многослойна структура, налагане на промени по стил casync и проста за реализиране архитектура.
Източник: opennet.ru
