Доступен экспериментальный выпуск файловой системы Composefs 0.1.4, предназначенной для совместного хранения содержимого нескольких примонтированных дисковых образов. Проект развивает Александр Ларсон (Alexander Larsson), создатель Flatpak, с целью повышения эффективности монтирования образов контейнеров и размещения Git-подобного репозитория OSTree. Код проекта написан на языке Си и распространяется под лицензией GPLv2.
Изначально первый вариант Composefs представлял собой отдельную ФС, реализованную в форме модуля для ядра Linux. В выпуске 0.1.4 подход к разработке полностью пересмотрен и поддержка работы в виде модуля ядра прекращена. Так как во многом Composefs пересекается с уже существующим кодом в ядре, решено, что проще будет развивать Composefs в виде надстройки над уже присутствующими в ядре ФС OverlayFS и EROFS.
Подобный подход даст возможность получить необходимую функциональность через включения в ядро ряда патчей к OverlayFS, без необходимости проходить длительный процесс рецензирования и согласования включения в основной состав ядра отдельной файловой системы. В текущем виде все требуемые от EROFS возможности уже присутствуют в ядре Linux, начиная с выпуска 5.15. В OverlayFS требуется добавление поддержки режима “data-only” для каталогов нижнего уровня и возможности сохранения хэшей fs-verity в расширенном атрибуте (xattr) overlay.metacopy. Первое изменение уже принято в состав ветки ядра 6.5-rc1, а второе добавлено в ветку overlayfs-next и ожидает включения в выпуске 6.6. Более того, если пользователю не требуется проверка целостности, то можно уже сейчас использовать Composefs со штатными ядрами Linux, не дожидаясь включения патчей к OverlayFS.
Помимо набора изменений к OverlayFS проектом Composefs развивается загружаемый в пространстве пользователя FUSE-модуль composefs-fuse, инструментарий для создания и монтирования ФС из пространства пользователя (mkcomposefs, mount.composefs) и формат образов (используются монтируемые образы erofs и расширенные атрибуты overlayfs). Так как проект основывается на уже готовых компонентах ядра, его стабильность оценивается как пререлиз – первый стабильный релиз планируется выпустить после принятия в ядро оставшихся патчей к OverlayFS.
Базовая функциональность Composefs сводится к построению многослойных ФС, в которых произвольные деревья ФС в режиме только для чтения накладываются поверх штатных ФС Linux, выступаюзщих в качестве нижнего слоя. От уже существующих похожих файловых систем, таких как SquashFS и EROFS, Composefs отличает поддержка совместного хранения содержимого разных образов и наличие функций для проверки подлинности читаемых данных. В Composefs применяется модель хранения с адресацией на основе содержимого, т.е. первичным идентификатором является не имя файла, а хэш от содержимого файла. Подобная модель обеспечивает дедупликацию и позволяет хранить только одну копию одинаковых файлов, встречающихся в разных примонтированных разделах.
Образы контейнеров содержат множество типовых системных файлов и в случае применения Composefs каждый из этих файлов будет совместно использован всеми примонтированными образами, без применения трюков, таких как проброс при помощи жёстких ссылок. При этом общие файлы не только хранятся в виде одной копии на диске, но и обходятся одной записью в страничном кэше, что даёт возможность экономить как дисковую, так и оперативную память.
Для экономии дисковой памяти данные и метаданные в Composefs разделены и при монтировании отдельно указывается бинарный индекс, в котором содержатся все метаданные файловой системы, имена файлов, права доступа и другие сведения. Индексы с метаданными создаются для каждого образа ФС и хранится в отдельном файле в формате EROFS. По сути образ контейнера представляет собой монтируемый в loopback-режиме образ EROFS, в котором присутствуют только метаданные. Непосредственно файлы всех монтируемых образов хранятся в общем базовом каталоге в обычной ФС (ext4, xfs, btrfs) и связываются с образом при помощи расширенного атрибута rusted.overlay.redirect, на базе которого OverlayFS находит необходимые файлы по хэшу содержимого.
Для верификации содержимого отдельных файлов и всего образа в условиях общего хранения применяется механизм fs-verity, который при обращении к файлам проверяет соответствие указанных в бинарном индексе хэшей с фактическим содержимым – если злоумышленник внесёт изменение в файл в базовом каталоге или данные повредятся в результате сбоя, то подобная сверка выявит расхождение.
Поддержка Composefs уже интегрирована в git-подобное хранилищеOSTree и поддерживается, начиная с выпуска OSTree 2023.4. Для включения в состав OSTree также переданы патчи, позволяющие выполнять проверку достоверности образов, используя цифровые подписи ed25519, что позволяет применять проверки, применяемые при загрузке в режиме UEFI Secure Boot, не только к ядру и initrd, но и ко всему пользовательскому окружению. Изменения для поддержки Composefs также подготовлены для библиотеки storage, что позволит использовать Composefs для хранения образов контейнеров в Podman.