Вынос со скандалом Bcachefs из mainline‑ядра Linux в конце 2025 года (начиная с релиза 6.18) проект не похоронил. Напротив, это явно подстегнуло мейнтейнера к жесткой дисциплине. Спустя 7 месяцев проект перешел на DKMS‑модель и официально снял статус experimental.
Развернул тестовую ВМ в Proxmox, чтобы посмотреть на эксплуатационный UX: как ставится, как ведет себя при отказе дисков и стоит ли тащить в homelab или прод.
Дисклеймер. Это синтетические тесты, а не академический бенчмарк (на виртуалке поверх ZFS тестировать скорость — такое себе). Цель — проверить работу базовых функций, диагностику и поведение при аварии.
1. Установка и DKMS‑нюансы
Тест проводился на Ubuntu 26.04 с ядром 7.0.0-22-generic. Штатного модуля в ядре дистрибутива нет, так что идем в официальный репозиторий за DKMS:
# Добавляем репозиторий apt.bcachefs.org (unstable / bcachefs-tools-release) и затем ставим всю обвязкуsudo apt install bcachefs-tools bcachefs-kernel-dkms fio btrfs-progs
По итогу получаем собранный модуль (bcachefs.ko.zst версии 1.38.6), и dmesg ожидаемо сыплющий ворнингами про tainting kernel и verification failed. Ну это просто надо иметь ввиду — теперь вы живете на внешнем модуле, и при каждом обновлении ядра нужно будет пристально следить за DKMS.
bcachefs: loading out-of-tree module taints kernelbcachefs: module verification failed: signature and/or required key missing - tainting kernelbcachefs: filldir64 fastpath disabled: struct layout unverified for this kernel
2. Базовый single‑disk сценарий
Первый тест был максимально тупой и прямолинейный:
-
Создать ФС на одном диске.
-
Смонтировать.
-
Записать файл 1 GiB и 5000 мелких файлов.
-
Запустить usage/scrub.
-
Размонтировать и выполнить offline check.
Для Bcachefs:
sudo bcachefs format -f -L bcf_single /dev/sdbsudo mount -t bcachefs -o noatime /dev/sdb /mnt/bcfsudo bcachefs fs usage -h -a /mnt/bcfsudo bcachefs scrub /mnt/bcfsudo bcachefs fsck -n -f /dev/sdb
Для Btrfs:
sudo mkfs.btrfs -f -L btr_single /dev/sdcsudo mount -t btrfs -o noatime /dev/sdc /mnt/btrsudo btrfs filesystem usage -T /mnt/btrsudo btrfs scrub start -B /mnt/btrsudo btrfs check --readonly /dev/sdc

На этом этапе всё скучно, единственная практическая ценность тут — набор команд для создания ФС, может кому пригодится как шпаргалка.
Можно еще отдельно сказать про команды Bcachefs. Они непривычны, но в целом на удивление логичны: вместо mkfs.bcachefs используется bcachefs format, диагностика идёт через bcachefs fs usage, проверка через bcachefs fsck.
3. Сжатие
Для проверки сжатия использовал простой набор:
-
zero-512m.bin, 512 MiB нулей. -
random-256m.bin, 256 MiB случайных данных.
Bcachefs создавалась сразу с zstd:
sudo bcachefs format -f -L bcf_zstd --compression=zstd /dev/sdb
Btrfs монтировалась с compress=zstd:
sudo mount -t btrfs -o noatime,compress=zstd /dev/sdc /mnt/btr
У Bcachefs понравилась отдельная секция в fs usage:
Compression:type compressed uncompressedzstd 8.00M 512Mincompressible 256M 256M
Итоговое использование места:
Bcachefs - около 283 MiBBtrfs - около 274 MiB
Обе ФС отработали отлично (нули сжали, рандом пропустили). Разница в несколько мегабайт тут не имеет особого смысла.
Из интересного — у Bcachefs утилита fs usage выдает шикарную и очень наглядную статистику по сжатым/несжимаемым данным прямо в консоль.
4. Снапшоты
Снапшоты проверял простым бытовым сценарием:
-
Создать subvolume.
-
Записать
state.txtсо значениемoriginal. -
Создать read‑only snapshot.
-
В живом subvolume поменять файл на
changed. -
Прочитать файл из snapshot.
Bcachefs:
bcachefs subvolume create /mnt/bcf/subvbcachefs subvolume snapshot -r /mnt/bcf/subv /mnt/bcf/snap1
Btrfs:
btrfs subvolume create /mnt/btr/subvbtrfs subvolume snapshot -r /mnt/btr/subv /mnt/btr/snap1
Результат у обеих ФС одинаковый:
live=changedsnapshot=original
Здесь ноль сюрпризов. Снапшоты работают ровно так, как от CoW‑ФС и ожидаешь.
5. Производительность fio и мелкие файлы
Теперь к цифрам. Ещё раз: это синтетические тесты внутри одного сомнительного стенда.
Параметры fio:
single diskбез сжатияsequential read/write: bs=1M, size=2Grandom write: bs=4k, numjobs=4, iodepth=16, runtime=30
Первые три строки ниже — это fio. Создание и удаление 10 000 мелких файлов замерялись отдельно обычным shell‑сценарием: создание дерева файлов и последующий rm ‑rf этого дерева.
Результаты:

На этом стенде Bcachefs заметно быстрее на последовательной записи, random write 4K и создании мелких файлов. Btrfs, наоборот, быстрее на последовательном чтении и чуть быстрее удаляет дерево мелких файлов.
Само собой всё это автоматически не приводит нас к выводу, что Bcachefs быстрее Btrfs. Всё таки подложка в виде Proxmox/ZFS может сильно влиять на такие цифры. Но как лабораторный результат — как минимум любопытно.
Отдельный нюанс: во время нагрузки у Bcachefs в dmesg появилась строка:
bcachefs (sdb): bch2_journal_flush_seq stuck? Waited 10s for seq 32
После этого ФС нормально размонтировалась и прошла проверки. Но для эксплуатации это сообщение нельзя просто игнорировать. Его стоит отдельно разбирать при повторных тестах.
6. Multi‑device
Одна из причин вообще смотреть на Bcachefs — обещание функциональности уровня современных CoW‑ФС с более гибкой моделью устройств.
Bcachefs с двумя копиями данных и метаданных создаётся так:
bcachefs format -f -L bcf_raid1 --replicas=2 /dev/sdb /dev/sdc
После записи 512 MiB полезной нагрузки bcachefs fs usage показал ожидаемую репликацию:

Btrfs RAID1 создавался привычно:
mkfs.btrfs -f -d raid1 -m raid1 -L btr_raid1 /dev/sdb /dev/sdc
У него всё ожидаемо отображается через Data ratio: 2.00 и Metadata ratio: 2.00.
Нюанс в терминологии: у Bcachefs модель --replicas=2 читается проще. Мы описываем желаемое количество копий, а не выбираем отдельные RAID‑профили для data и metadata. Для админа это вполне приятная деталь.
7. Потеря диска на живую
Ну и само собой важная часть для любой multi‑device ФС нифига не красивая таблица fio, а поведение при отказе.
Сначала пробовал имитировать отказ изнутри гостевой ОС через /sys/block/*/device/delete и device/state=offline. В этой ВМ метод оказался ненадёжным: устройство либо оставалось видимым, либо состояние быстро возвращалось в running.
Поэтому финальный тест делал через QMP hot‑unplug на уровне Proxmox/QEMU. Постоянную конфигурацию ВМ не менял, удалял только live‑устройство.
Bcachefs
Сценарий:
-
Bcachefs на
/dev/sdbи/dev/sdc. -
Форматирование с
--replicas=2. -
Запись 256 MiB payload.
-
QMP
device_del scsi2, то есть удаление второго диска. -
Проверка чтения старого файла и запись нового файла.
После hot‑unplug /dev/sdc исчез из lsblk. Чтение и запись продолжили работать:
/mnt/bcf/payload.bin: OK-rw-rw-r-- 1 user user 20 ... /mnt/bcf/after-qmp-hotunplug.txt
Диагностика Bcachefs показала, что часть метаданных уже требует восстановления реплик:
undegraded -1x2x: 548M 3.50MPending reconcile:replicas: 0 1.75Mhigh_priority: 0 1.75M
В dmesg появились ожидаемые ошибки по удалённому устройству:
bcachefs: error writing btree node ... sdc io: BLK_STS_OFFLINEbcachefs (sdc): offline from block layerbcachefs: error writing btree node ... sdc io: BLK_STS_REMOVED
Практический вывод: ФС осталась рабочей, данные читались, новая запись прошла. При этом состояние явно деградировало и требует дальнейшего reconcile/восстановления. Собственно, именно это и хотелось увидеть от теста.
Btrfs
Для Btrfs аналогичный сценарий делал на другой паре дисков:
-
Btrfs RAID1 на
/dev/sddи/dev/sde. -
Так же запись 256 MiB payload.
-
QMP
device_del scsi4. -
Проверка чтения и запись нового файла.
После удаления /dev/sde ФС тоже продолжила работать:
/mnt/btr/payload.bin: OK-rw-rw-r-- 1 user user 20 ... /mnt/btr/after-qmp-hotunplug.txt
btrfs filesystem usage -T показал missing device:
WARNING: failed to get device size for /dev/sde: No such file or directoryDevice missing: 20.00GiB
В dmesg появились ошибки записи на удалённое устройство:
BTRFS error (device sdd): bdev /dev/sde errs: wr 1, rd 0, flush 0, corrupt 0, gen 0BTRFS warning (device sdd): lost super block write due to IO error on /dev/sde (-5)BTRFS error (device sdd): error writing primary super block to device 2
В этом конкретном сценарии обе ФС повели себя адекватно: RAID1-подобная конфигурация пережила потерю одного диска на живую, данные остались читаемыми, запись продолжилась.
8. Что там по UX
Понравилось в Bcachefs:
-
bcachefs fs usage -h -aочень информативен. -
Хорошо видно
data/metadata, compression, btreeи состояние устройств. -
Модель
--replicas=2читается проще, чем отдельные профили-d raid1 -m raid1. -
Снапшоты и subvolume‑команды выглядят логично.
-
Потерю одного устройства при репликации ФС пережила.
Минусы:
-
Вместо нормальной поставки в составе ядра — поставляется как DKMS‑модуль со всеми вытекающими (вообще надо было постараться настолько сильно выбесить мейнтейнеров ядра своим стилем разработки, чтоб тебя со скандалом вып*здили из mainline)
-
В
dmesgбыл warning проbch2_journal_flush_seq stuck. -
Сценарий возврата или замены диска после hot‑unplug надо тестировать отдельно.
У Btrfs главный плюс скучный, но объективно весомый: он давно есть в дистрибутивах, хорошо документирован, привычен и в принципе практически стабилен.
Итоги
-
Bcachefs после снятия experimental уже имеет смысл тестировать в homelab.
-
В базовых сценариях ФС отработала нормально: создание, монтирование, scrub/fsck, сжатие, снапшоты, multi‑device.
-
На этом стенде Bcachefs хорошо выступила на записи и мелких файлах, но это синтетические тесты.
-
Потерю одного диска при
--replicas=2Bcachefs пережила: данные читались, запись продолжалась, диагностика показала деградацию.
Если резюмировать, то основные вопросы пока не столько к самой ФС, сколько к эксплуатационной обвязке: DKMS, обновления ядра, загрузка модуля и восстановление после отказов.
ИМХО, для лаборатории, тестового NAS, домашнего стенда и удовлетворения инженерного любопытства — да, Bcachefs уже интересно гонять. Для продакшена или единственной копии важных данных — только после собственных аварийных тестов и с нормальными бэкапами.
ссылка на оригинал статьи https://habr.com/ru/articles/1051972/