Значительное обновление файловой системы Bcachefs

Кент Оверстрит (Kent Overstreet) представил в списке рассылки ядра Linux значительное обновление файловой системы Bcachefs, развиваемой с использованием технологий, уже опробованных при разработке Bcache (блочное устройство для кэширования доступа к медленным жестким дискам на быстрых SSD-накопителях). В файловой системе используется механизм Copy-on-Write (COW), при котором изменения не приводят к перезаписи данных — новое состояние записывается в новое место, после чего меняется указатель актуального состояния.

Особенностью Bcachefs является поддержка многослойного подключения накопителей, при котором хранилище компонуется из нескольких слоёв — к нижнему слою подключаются наиболее быстрые накопители (SSD), которые используются для кэширования часто используемых данных, а верхний слой образуют более ёмкие и дешёвые диски, обеспечивающие хранение менее востребованных данных. Между слоями может применяться кэширование в режиме отложенной записи (writeback).

Кроме типовых возможностей POSIX ФС, например xattrs и ACL, Bcachefs предоставляет доступ к таким расширенным функциям, как возможность подключения к разделу нескольких устройств, репликация (RAID), кэширование, прозрачное сжатие данных и верификация целостности данных и метаданных по контрольным суммам. Из пока не реализованных возможностей отмечается поддержка квот и снапшотов, возможность экспорта через NFS. Среди нерешённых проблем отмечается большое время монтирования, вызванное тем, что во время монтирования осуществляется обход всех inode, dirent-ов и extent-ов.

На данном этапе развития Bcachefs находится на стадии бета-версии, при этом стабильности и надёжности уделяется первичное внимание, но дисковый формат ещё окончательно не зафиксирован и может меняться в будущем. Большим плюсом Bcachefs является задействование в проекте уже отлаженных и проверенных временем технологий Bcache, что позволяет добиться изначально высокого уровня стабильности. Отмечается, что Bcachefs уже вполне пригоден для использования на ноутбуках и серверах, но так как ФС относительно новая рекомендовано регулярное создание резервных копий. По производительности Bcachefs опережает Btrfs и другие ФС на базе механизма Copy-on-Write, демонстрируя производительность, близкую к Ext4 и Xfs. Bcachefs также хорошо масштабируется и уже протестирована в работе хранилища, размером 50 Тб.

Ключевые улучшения в новой версии Bcachefs:

  • Полноценная поддержка шифрования всей ФС. Для шифрования применяется потоковый шифр ChaCha20 и алгоритм аутентификации сообщений (MAC) Poly1305, разработанные Дэниелом Бернштейном (Daniel J. Bernstein), Таней Ланге (Tanja Lange) и Питером Швабе (Peter Schwabe). ChaCha20 и Poly1305 можно рассматривать, как более быстрые и безопасные аналоги AES-256-CTR и HMAC. В отличие от реализации шифрования в Ext4, в Bcachefs не поддерживается шифрование отдельных частей ФС — зашифровано может быть только всё содержимое ФС. По производительности реализация шифрования в Bcachefs близка к dm-crypt, но, при этом, dm-crypt не поддерживает аутентифицированное шифрование;
  • Резервное копирование суперблоков, позволяющее всегда иметь резервную копию на случае повреждения основного суперблока;
  • Новый более компактный и расширяемый формат inode. В среднем в Bcachefs размер inode составляет 50–60 байт, что позволяет кэшировать все метаданны в ОЗУ;
  • Возможность подключения нескольких накопителей к одному разделу доведена до состояния, пригодного для использования. Улучшен инструментарий для управления накопителями из пространства пользователя. Обеспечена базовая поддержка репликации (RAID1/10), в том числе с возможностью перевода одного из дисков в offline без остановки работы ФС;
  • Реализация утилиты fsck для проверки и восстановления целостности ФС в пространстве пользователя. Ранее функциональность fsck была реализована на уровне ядра и могла вызываться только в момент монтирования. По сути, утилита fsck стала результатом работы по переносу частей Bcache в пространство пользователя, т.е. в утилите fsck представлен тот же код проверки, что ранее применялся на уровне ядра. Более того, почти весь код Bcachefs теперь может быть оформлен в виде библиотеки, работающей в пространстве пользователя. Данный код уже задействован в реализации команд «bcache dump» и «bcache migrate»;
  • Новая команда «bcache dump», позволяющая в отладочных целях сохранить дамп всех метаданных в форме образа в формате qcow2. Например, данную возможность можно использовать для создания копии метаданных для последующей отправки разработчикам ФС, в случае если fsck не может решить возникшую проблему;
  • Добавлена команда «bcache migrate», позволяющая на лету перенести содержимое существующей ФС в Bcachefs без потери старых данных. Метод основан на создании в старой ФС одного большого непрерывного файла, после чего на блочном устройстве создаётся раздел Bcachefs, использующий только блоки, выделенные для этого файла. После этого на новый раздел переносятся все данные из старой ФС. Далее можно примонтировать новый раздел вместо старого (используя опцию offset в команде mount) и убедиться, что все данные перенесены корректно, или одновременно примонтировать старую и новую ФС и сверить идентичность данных («rsync --itemize-changes»).

© OpenNet