lambutter 0.5: чтение btrfs без стандартной библиотеки Rust
lambutter 0.5: чтение btrfs без стандартной библиотеки Rust
В Debian появился пакет rust-lambutter 0.5.0-1 — библиотека, которая умеет читать файловую систему btrfs в окружениях, где нельзя использовать стандартную библиотеку Rust. Это нишевый, но важный инструмент для загрузчиков UEFI, встраиваемых систем и аварийного восстановления.
Что умеет библиотека
lambutter — аналог ext4-view для btrfs: чистая реализация на Rust, рассчитанная на работу без выделения памяти через std. По данным из README проекта, версия 0.5 открывает и читает обычные файлы, символические ссылки и содержимое каталогов на томах SINGLE, DUP, RAID1, RAID1C3 и RAID1C4 — как в корневом сабволюме, так и в выбранном по id или пути, с корректным переходом во вложенные сабволюмы, как это делает Linux при монтировании.
Поддерживается декодирование сжатых экстентов zstd, zlib и LZO. При этом RAID0/10/5/6, ZONED, RAID_STRIPE_TREE, REMAP_TREE, маркеры fscrypt и неизвестные несовместимые возможности библиотека отклоняет с типизированной ошибкой, а не пытается читать вслепую. Проверка контрольных сумм блоков данных и перечисление снапшотов пока не реализованы.
Как проверяли
Авторы приводят солидный набор проверок: 55 юнит-тестов на хосте, 15 фикстурных oracle-тестов на образах, записанных ядром Linux (включая сжатие, разреженные файлы, симлинки, экстенты и каталоги, пересекающие листья B-дерева), а также 5 фаззинг-обвязок на cargo-fuzz. Отдельно упоминается живая проверка на реальном разделе openSUSE Tumbleweed с редиректом сабволюма через Snapper — шесть прочитанных путей совпали с эталоном ядра байт в байт. Наконец, библиотека уже встроена в загрузчик LamBoot как нативный бэкенд btrfs и загружает openSUSE под живой прошивкой UEFI.
Что это значит
Для разработчиков загрузчиков и встраиваемых систем это означает, что btrfs перестаёт быть «недоступной» файловой системой в no_std-контексте. Раньше выбор часто сводился к ext4 или собственному минимальному парсеру; теперь появляется поддерживаемый вариант с тестами и понятными границами применимости. Для более широкой аудитории это ещё один пример того, как Rust заходит в системное программирование — туда, где раньше доминировал C. Подробности и код доступны в исходниках пакета.
Если вам интересно, как устроены файловые системы, загрузчики и системное программирование на Rust, узнайте больше — там разбираются подобные темы на понятных примерах.
📌 Чтобы не пропустить новые публикации, подписывайтесь там, где вам удобнее: Дзен или MAX.
💛 Если статья оказалась полезной, поддержите автора донатом.
Материал подготовлен на основе информации из открытых источников. Все права на исходные материалы принадлежат их авторам. Если вы являетесь правообладателем и возражаете против использования, свяжитесь с нами по адресу info@11st.press.