Кент Оверстрит (Kent Overstreet), автор входящей в состав ядра Linux
системы кэширования блочных устройств на SSD-накопителях BCache, в своём выступлении на конференции LSFMM 2023 (Linux Storage, Filesystem, Memory Management & BPF Summit) обобщил результаты работы по продвижению файловой системы Bcachefs в основной состав ядра Linux и рассказал о планах по дальнейшему развитию данной ФС. В мае для рецензирования и включения в основной состав ядра Linux был предложен обновлённый набор патчей с реализацией ФС Bcachefs. ФС Bcachefs развивается уже около 10 лет. О готовности рецензирования реализации Bcachefs перед включением в состав ядра было объявлено ещё в конце 2020 года и в текущем варианте патчей учтены выявленные при прошлом рецензировании замечания и недоработки.
Целью разработки Bcachefs является достижение уровня XFS в производительности, надёжности и масштабируемости, предоставляя при этом дополнительные возможности, свойственные Btrfs и ZFS, такие как включение в раздел нескольких устройств, многослойные раскладки накопителей, репликация (RAID 1/10), кэширование, прозрачное сжатие данных (режимы LZ4, gzip и ZSTD), срезы состояния (снапшоты), верификация целостности по контрольным суммам, возможность хранения кодов коррекции ошибок Рида—Соломона (RAID 5/6), хранение информации в зашифрованном виде (используются ChaCha20 и Poly1305). По производительности Bcachefs опережает Btrfs и другие ФС на базе механизма Copy-on-Write, и демонстрирует скорость работы, близкую к Ext4 и XFS.
Из последних достижений в разработке Bcachefs отмечается стабилизация реализации снапшотов, доступных на запись. По сравнению с Btrfs снапшоты в Bcachefs теперь значительно лучше масштабируются и лишены проблем, свойственных Btrfs. На практике работа снапшотов опробована при организации резервного копирования MySQL. В Bcachefs также проведена большая работа по улучшению масштабируемости – файловая система хорошо зарекомендовала себя при тестировании в хранилищах, размером 100 ТБ, и в ближайшее время ожидается внедрение Bcachefs в хранилище размером 1 ПБ. Добавлен новый режим nocow для отключения механизма “copy-on-write” (nocow).
В течение лета планируют довести до стабильного состояния реализацию кодов коррекции ошибок и RAIDZ, а также решить проблемы с высоким потреблением памяти при восстановлении и проверки ФС утилитой fsck.
Из планов на будущее упоминается желание использовать при разработке Bcachefs язык Rust. По мнению автора Bcachefs он любит программировать, а не отлаживать код, и теперь безумно писать код на языке Си, когда появился лучший вариант. Rust уже задействован в Bcachefs в реализации некоторых утилит, запускаемых в пространстве пользователя. Более того, вынашивается идея постепенно полностью переписать Bcachefs на Rust, так как использование этого языка существенно экономит время на отладку.
Что касается продвижения Bcachefs в основной состав ядра Linux, то процесс принятия может затянуться из-за достаточной большого размера изменений (2500 патчей и около 90 тысяч строк кода), который трудно рецензировать. Для ускорения рецензирования некоторые разработчики предложили разбить серию пачей на более мелкие и логически разделённые части. В процессе обсуждения некоторые участники также обратили внимание на развитие проекта одним разработчиком и опасность того, что код может остаться без сопровождения, в случае если с его разработчиком что-то случиться (к проекту проявляют интерес два сотрудника Red Hat, но их работа пока ограничивается исправлением ошибок).
Bcachefs развивается с использованием технологий уже опробованных при разработке блочного устройства Bcache, предназначенного для кэширования доступа к медленным жёстким дискам на быстрых SSD-накопителях (входит в ядро, начиная с выпуска 3.10).
В Bcachefs используется механизм Copy-on-Write (COW), при котором изменения не приводят к перезаписи данных – новое состояние записывается в новое место, после чего меняется указатель актуального состояния.
Особенностью Bcachefs является поддержка многослойного подключения накопителей, при котором хранилище компонуется из нескольких слоёв – к нижнему слою подключаются наиболее быстрые накопители (SSD), которые используются для кэширования часто используемых данных, а верхний слой образуют более ёмкие и дешёвые диски, обеспечивающие хранение менее востребованных данных. Между слоями может применяться кэширование в режиме отложенной записи (writeback). Накопители можно динамически добавлять и отсоединять от раздела без остановки использования файловой системы (данные мигрируют автоматически).