Composefs вместо развития отдельной ФС, будет использовать функциональность OverlayFS и EROFS

Доступен экспериментальный выпуск файловой системы Composefs 0.1.4, предназначенной для совместного хранения содержимого нескольких примонтированных дисковых образов. Проект развивает Александр Ларсон (Alexander Larsson), создатель Flatpak, работающий в компании Red Hat, с целью повышения эффективности монтирования образов контейнеров и размещения Git-подобного репозитория OSTree. Код проекта написан на языке Си и распространяется под лицензией GPLv2.

Изначально первый вариант Composefs представлял собой отдельную ФС, реализованную в форме модуля для ядра Linux. В выпуске 0.1.4 подход к разработке полностью пересмотрен и поддержка работы в виде модуля ядра прекращена. Так как во многом Composefs пересекается с уже существующим кодом в ядре, решено, что проще будет развивать Composefs в виде надстройке над уже присутствующими в ядре ФС OverlayFS и EROFS.

Подобный подход даст возможность получить уже необходимую функциональность через включения в ядро ряда патчей к данным ФС, без необходимости проходить длительный процесс рецензирования и согласования включения в основной состав ядра отдельной файловой системы. В текущем виде все требуемые от EROFS возможности уже присутствуют в ядре Linux, начиная с выпуска 5.15. В OverlayFS требуется добавление поддержки режима «data-only» для каталогов нижнего уровня и возможности сохранения хэшей fs-verity в расширенном атрибуте (xattr) overlay.metacopy. Перовое изменение уже принято в состав ветки ядра 6.5-rc1, а второе добавлено в ветку overlayfs-next и ожидает включения в выпуске 6.6. Более того, если пользователю не требуется проверка целостности, то можно уже сейчас использовать Composefs с имеющимися ядрами Linux.

Помимо набора изменений к 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.



Источник: http://www.opennet.ru/opennews/art.shtml? num=59460

©  OpenNet