Btrfs (B-tree FS, «Better FS» или «Butter FS», где FS - file system, англ. файловая система) — файловая система для Linux, основанная на структурах B-деревьев и работающая по принципу «копирование при записи» (copy-on-write). Опубликована корпорацией Oracle в 2007 году под лицензией GNU General Public License.
История Основной автор BTRFS — Крис Мэйсон (Chris Mason). Одной из первоначальных целей разработки этой файловой системы было создать замену ZFS, использование которой в Linux было затруднено лицензионными ограничениями, и создать файловую систему без недостатков, присущих более ранним файловым системам для Linux. Также Мэйсон указывал одной из целей разработки создание простого интерфейса управления файловой системой.
Изначально планировалось выпустить Btrfs v1.0 и зафиксировать формат хранения в конце 2008 года, однако релиз был выпущен только 12 июня 2010 года LKML: Christian Kujau: [PATCH] Remove EXPERIMENTAL flag from Btrfs.
Btrfs включена в основную ветвь ядра Linux с версии 2.6.29-rc в статусе экспериментальной ФС. Проведённая Phoronix в 2010 году оценка производительности показала, что Btrfs с включённым режимом сжатия иногда опережает по производительности Ext4.
Возможности
В 2008 году один из разработчиков () сообщал, что Btrfs имеет ряд решений, впервые появившихся в ReiserFS, но при этом не поддерживает некоторые базовые функции.
Список возможностей системы по состоянию на 2011 год: Проверка целостности без размонтирования; Доступные для записи снимки (); Динамическое выделение индексных дескрипторов inode (нет ограничения на максимальное количество файлов в файловой системе); Добавление и удаление устройств хранения при смонтированной файловой системе (накопители и разделы легко подключаются в Btrfs и заменяются или удаляются при необходимости); Поддержка сложных многодисковых конфигураций RAID — уровней 0, 1, 5, 6 и 10 (реализовано, но 5 и 6 на то время не считались стабильными), а также реализация различных политик избыточности на уровне объектов файловой системы — то есть возможно назначить, к примеру, в планах было реализовать зеркалирование для какого-либо каталога или файла. Сжатие (LZO, zlib, zstd — реализовано, предлагались патчи для LZ4 и Snappy); Подтома (); Эффективное клонирование файловой системы и создание инкрементальных архивов; Дефрагментация смонтированной файловой системы. Журналирование с копированием при записи. Лимиты (отдельно для каждого подтома или группы подтомов, по фактически занимаемому месту или по «официальному») Контроль целостности блоков данных и метаданных с помощью контрольных сумм. Зеркалирование метаданных даже в конфигурации с одним накопителем (отключается на SSD). Полностью распределённое блокирование. Поддержка ACL.
Выбор хеш-алгоритма для контроля целостности данных и метаданных (CRC-32). Начиная с версии 5.5 реализованы: , SHA256, BLAKE2B. Поддержка NFS (пока неполная). Флаги совместимости, необходимые для изменения дискового формата в новых версиях Btrfs с сохранением совместимости со старыми. Резервные копии суперблока, по крайней мере по одной на устройство. Гибридные пулы (в планах) — btrfs старается перемещать наиболее используемые данные на самое быстрое устройство, вытесняя с него «залежавшиеся» блоки, эта политика хорошо согласуется с моделью использования SSD-накопителей совместно с дисковыми. Балансировка данных между устройствами в Btrfs возможна сразу после добавления диска к пулу, отдельной командой, а не только постепенно, в процессе использования (как это реализовано в ZFS). Диски для горячей замены, поддержка которых появилась и в ZFS (в планах). Офлайн-дедупликация (в примонтированном виде, но после окончания записи — ядро 3.12 и новее), в перспективе — дедупликация будет осуществляться во время записи файла.
Несмотря на то, что Btrfs изначально не способна вести себя как распределённая (сетевая) файловая система, в 2009 году компания Oracle принялась за реализацию сетевого протокола файловой системы CRFS, который спроектирован и оптимизирован как раз под Btrfs.
В ранних версиях поддерживалась миграция с файловых систем ext3 и ext4 и обратно (до момента обновления), но начиная с версии ядра 4.0 использование функции не рекомендовано в связи с потенциальной опасностью потери данных.
Создание файла подкачки в Btrfs возможно с марта 2019 года (Linux kernel 5.0), файл при этом создается с флагом nocow и должен располагаться на одном накопителеРелиз ядра Linux 5.0 — opennet 04.03.2019 «Добавлена возможность размещения раздела подкачки в файлах внутри ФС Btrfs…».
Недостатки Нельзя использовать снимки () LVM и копии тома, сделанные с помощью dd, так как у них будут одинаковые UUID, что может привести к записи не в ту копию и повреждению всех данных; вместо использования LVM и dd в Btrfs необходимо использовать специальные утилиты Btrfs по управлению подтомами и механизм работы со снимками.
В связи с использованием по умолчанию техники копирования при записи, при большом количестве перезаписей случайных фрагментов файлов может возникать значительная фрагментация; решением может стать отключение COW (возможно только для новых и пустых каталогов/файлов).
Примечания
Литература
Ссылки
Категория:Журналируемые файловые системы Категория:Файловые системы Oracle Категория:Linux