Открыть сервис

Btrfs-progs

Btrfs-progs — это набор системных утилит командной строки для управления файловой системой Btrfs (B-tree File System) в операционных системах семейства Linux. Данный пакет предоставляет инструменты для создания, проверки целостности, настройки, восстановления и мониторинга разделов Btrfs, а также для выполнения операций с подтомами (subvolumes), снапшотами (snapshots), RAID-массивами и сжатием данных. Btrfs-progs является официальным и основным средством администрирования файловой системы Btrfs, разрабатываемым её авторами.

История

Разработка Btrfs началась в 2007 году в компании Oracle под руководством Криса Мейсона (Chris Mason), ранее работавшего над файловой системой ReiserFS. Первая стабильная версия ядра Linux с поддержкой Btrfs появилась в 2009 году (версия 2.6.29). Параллельно с ядром развивался набор утилит пользовательского пространства, который получил название btrfs-progs. Изначально он включал лишь базовые команды для форматирования и монтирования. По мере усложнения файловой системы (добавление RAID, сжатия, дедупликации, квот) расширялся и функционал утилит.

На протяжении 2010-х годов btrfs-progs активно дорабатывался, в том числе для поддержки новых возможностей Btrfs, таких как:

  • Btrfs send/receive (2012) — для инкрементального резервного копирования.
  • Free space tree (2014) — для улучшения управления свободным пространством.
  • RAID 5/6 (2015) — хотя позже были выявлены проблемы с надёжностью.
  • Zstd compression (2017) — поддержка современного алгоритма сжатия.
  • Rescue mode (2018) — расширенные инструменты восстановления.

В 2020-х годах разработка сосредоточена на стабилизации кода, улучшении проверки целостности (scrub, check) и поддержке новых версий ядра. Наиболее значимые релизы: 5.0 (2020), 5.10 (2021), 6.0 (2022), 6.3 (2023). Проект является открытым (лицензия GPL v2) и поддерживается сообществом, а также компаниями Oracle, Facebook (Meta — организация признана экстремистской и запрещена в РФ), SUSE и Red Hat.

Состав пакета

Пакет btrfs-progs включает несколько десятков утилит, которые можно разделить на группы по назначению.

Основные утилиты

КомандаНазначение
mkfs.btrfsСоздание файловой системы Btrfs на устройстве или нескольких устройствах (для RAID).
btrfsГлавная управляющая утилита, вызывающая подкоманды (например, btrfs subvolume, btrfs device, btrfs filesystem).
btrfsckПроверка целостности и восстановление файловой системы (аналог fsck).
btrfs-imageСоздание образа файловой системы для диагностики (без данных).
btrfs-convertКонвертация существующей файловой системы ext2/3/4 в Btrfs.
btrfstuneНастройка параметров суперблока (например, включение CRC32C).
btrfs-find-rootПоиск корневого узла дерева при повреждении суперблока.
btrfs-select-superПереключение между резервными копиями суперблока.
btrfs-map-logicalОтображение логических адресов на физические.
btrfs-zero-logСброс журнала транзакций (аварийное восстановление).

Вспомогательные утилиты

  • fsck.btrfs — обёртка для вызова btrfsck (совместимость с системными скриптами).
  • btrfs-device — управление устройствами (добавление, удаление, замена).
  • btrfs-filesystem — просмотр статистики, дефрагментация, изменение размера.
  • btrfs-subvolume — создание, удаление, снапшоты подтомов.
  • btrfs-qgroup — управление квотами на группы подтомов.
  • btrfs-receive / btrfs-send — инкрементальное копирование между подтомами.
  • btrfs-scrub — проверка целостности данных и метаданных.

Устройство и принципы работы

Btrfs-progs взаимодействует с файловой системой через системные вызовы ядра Linux (ioctl) и прямой доступ к блочным устройствам. В отличие от многих других файловых систем, Btrfs использует копирование при записи (Copy-on-Write, CoW), что накладывает особенности на работу утилит.

Структура данных

Btrfs организует данные в B-деревья (B-tree). Основные деревья:

  • Chunk tree — отображение логических адресов на физические.
  • Extent tree — управление блоками данных.
  • Root tree — корневые узлы подтомов.
  • Csum tree — контрольные суммы (CRC32C, xxhash, sha256).
  • Free space treeинформация о свободном пространстве.

Утилиты btrfs-progs, особенно btrfsck, должны корректно обрабатывать эти деревья, что делает их одними из самых сложных инструментов проверки файловых систем.

Подтома и снапшоты

Подтом (subvolume) — это изолированная часть файловой системы, которая может быть смонтирована отдельно. Снапшот — это копия подтома, созданная по принципу CoW. Btrfs-progs предоставляет команды для их создания и управления:

  • btrfs subvolume create /path
  • btrfs subvolume snapshot /source /dest
  • btrfs subvolume delete /path

Снапшоты могут быть как read-only, так и read-write. Read-only снапшоты используются для резервного копирования через btrfs send.

RAID и управление устройствами

Btrfs поддерживает программный RAID уровней 0, 1, 10, 5, 6, а также профили single и dup (дублирование метаданных). Утилиты btrfs-progs позволяют:

  • Добавлять и удалять устройства в многодисковом томе.
  • Конвертировать профили (например, с single на RAID1).
  • Заменять вышедшие из строя диски.
  • Балансировать данные между устройствами.

Команда btrfs device управляет физическими носителями, а btrfs balance перераспределяет данные и метаданные.

Применение

Btrfs-progs используется в следующих сценариях:

Администрирование серверов и NAS

Btrfs часто применяется в системах хранения данных (NAS) благодаря поддержке снапшотов, сжатия и RAID. Утилиты btrfs-progs позволяют:

Рабочие станции и встраиваемые системы

На десктопах Btrfs используется в дистрибутивах openSUSE, Fedora (по умолчанию с 2020 года), а также в некоторых сборках Ubuntu. Btrfs-progs позволяет:

  • Создавать снапшоты перед обновлениями системы (например, через snapper).
  • Включать сжатие (zstd, lzo, zlib) для экономии места на SSD.
  • Дефрагментировать файлы (btrfs filesystem defrag).
  • Изменять размер тома на лету.

Восстановление данных

Btrfs-progs включает инструменты для аварийного восстановления:

  • btrfs rescue — набор команд для восстановления после сбоев (например, btrfs rescue zero-log для сброса повреждённого журнала).
  • btrfs restore — извлечение файлов с повреждённой файловой системы без её монтирования.
  • btrfs check --repair — автоматическое исправление некоторых ошибок (требуется осторожность, так как может привести к потере данных).

Критика и ограничения

Несмотря на широкую функциональность, btrfs-progs имеет ряд недостатков и критических замечаний:

  • Сложность и нестабильность утилиты btrfsck. В отличие от fsck.ext4, btrfsck долгое время считался экспериментальным. В версиях до 5.0 он мог повреждать файловую систему при попытке исправления. Даже в современных версиях рекомендуется использовать --repair только на резервных копиях.
  • Проблемы с RAID 5/6. Реализация RAID 5 и 6 в Btrfs имеет известные дефекты (потеря данных при отказе диска), и утилиты btrfs-progs не могут их полностью устранить. Разработчики не рекомендуют использовать эти уровни для критически важных данных.
  • Отсутствие некоторых функций. Например, до сих пор нет полноценного инструмента для дефрагментации с учётом CoW (дефрагментация может нарушать снапшоты). Также отсутствует встроенная поддержка шифрования на уровне файловой системы (используется LUKS).
  • Производительность. Некоторые операции, такие как btrfs balance или btrfs check, могут быть медленными на больших томах (несколько терабайт) из-за необходимости сканирования B-деревьев.
  • Совместимость с ядром. Btrfs-progs должен быть совместим с версией ядра, на которой он запускается. Использование утилит из более нового пакета со старым ядром может привести к ошибкам.

Интересные факты

  • Btrfs-progs является одним из немногих наборов утилит, который включает инструмент для конвертации ext2/3/4 в Btrfs без переформатирования (btrfs-convert). Однако обратная конвертация не поддерживается.
  • Команда btrfs filesystem usage предоставляет детальную статистику использования пространства, включая распределение по профилям RAID, что удобно для мониторинга.
  • Пакет btrfs-progs активно используется в проекте Snapper (инструмент управления снапшотами), который является стандартным в openSUSE и Fedora.
  • В 2021 году в btrfs-progs была добавлена поддержка контрольных сумм SHA-256, что повышает устойчивость к битовым ошибкам (bit rot).

Источники

  • Официальная документация Btrfs: btrfs.wiki.kernel.org
  • Исходный код btrfs-progs: git.kernel.org/pub/scm/linux/kernel/git/kdave/btrfs-progs.git
  • Btrfs Wiki: «Btrfs-progs» (раздел «Man pages»)
  • LWN.net: «Btrfs: the next generation filesystem for Linux» (2008)
  • Kernel Newbies: Linux 2.6.29 (2009)
  • Документация дистрибутива openSUSE: «Btrfs and snapper»

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →