После почти двух лет разработки представлен релиз ZFS on Linux 0.8.0, реализации файловой системы ZFS, оформленной в виде модуля для ядра Linux. Работа модуля проверена с ядрами Linux c 2.6.32 по 5.1. Готовые установочные пакеты в ближайшее время будут подготовлены для основных дистрибутивов Linux, включая Debian, Ubuntu, Fedora, RHEL/CentOS. Модуль ZFS on Linux уже входит в состав дистрибутивов Debian, Ubuntu, Gentoo, Sabayon Linux и ALT Linux.
В рамках ZFS on Linux подготовлена реализация компонентов ZFS, связанных как с работой файловой системы, так и с функционированием менеджера томов. В частности, реализованы компоненты: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) и ZPL (ZFS POSIX Layer). Дополнительно проектом обеспечена возможность использования ZFS в качестве бэкенда для кластерной файловой системы Lustre. Наработки проекта основаны на оригинальном коде ZFS, импортированном из проекта OpenSolaris и расширенном улучшениями и исправлениями от сообщества Illumos. Проект развивается при участии сотрудников Ливерморской национальной лаборатории по контракту с Министерством энергетики США.
Код распространяется под свободной лицензией CDDL, которая несовместима с GPLv2, что не позволяет добиться интеграции ZFS on Linux в состав основной ветки ядра Linux, так как смешивание кода под лицензиями GPLv2 и CDDL недопустимо. Для обхода данной лицензионной несовместимости было решено распространять продукт целиком под лицензией CDDL в виде отдельно загружаемого модуля, который поставляется отдельно от ядра. Стабильность кодовой базы ZFS on Linux оценивается как сопоставимая с другими ФС для Linux.
Основные изменения:
- Добавлена встроенная поддержка шифрования хранимых данных на уровне файловой системы и разделов. По умолчанию для шифрования используется алгоритм aes-256-ccm. Для загрузки ключей шифрования предложена команда «zfs load-key»;
- Реализована возможность передачи шифрованных данных при выполнении команд «zfs send» и «zfs receive’. При указании опции «-w» уже зашифрованные в пуле данные передаются в другой пул как есть, без промежуточной дешифровки. При подобном копировании данные остаются защищены ключом отправляющей стороны, что позволяет использовать данный режим для резервного копирования на не заслуживающие доверия системы (в случае компрометации получателя, без ключа атакующий не сможет получить доступ к данным);
- Добавлена поддержка удаления первичных накопителей из пула хранения, подсоединённых как по отдельности, так и в составе зеркала. Удаление осуществляется командой «zpool remove». В процессе удаления данные с исключаемого накопителя копируются на остающиеся в пуле первичные накопители;
- Добавлена команда «zpool checkpoint» для сохранения текущего состояния пула с возможностью отката дальнейших изменений на сохранённый момент времени (создаётся снапшот всего пула). Представленная возможность может оказаться полезной в процессе выполнения потенциально опасных сложных административных работ, в обычных условиях приводящих к необратимым изменениям (например, активация флагов новой функциональности ZFS или очистка данных);
- Добавлена команда «zpool trim», позволяющая информировать используемые в пуле накопители о секторах, которые больше не используются. Применение операции TRIM даёт возможность повысить эффективность работы SSD-накопителей и предотвратить деградацию их производительности. Для включения непрерывного фонового процесса передачи команд TRIM предложено новое свойство «autotrim»;
- Добавлена команда «zpool initialize» для инициализации всего нераспределённого дискового пространства, что позволяет обеспечить его мгновенную готовность к использованию, без снижения производительности при первом доступе (например, при размещении виртуализированных хранилищ, таких как VMware VMDK);
- Добавлена поддержка аккаунтинга и квот на уровне проекта, дополняющих ранее доступные квоты на уровне пользователя и группы. По сути проекты — это отдельное пространство объектов, связанных с отдельным идентификатором (project ID). Привязка определяется через операцию ‘chattr -p’ или через наследование атрибутов. Для управления проектами представлены команды «zfs project» и «zfs projectspace», позволяющие управлять созданием проектов и задавать для них лимиты дискового пространства;
- Добавлена возможность создания Lua-скриптов для автоматизации различных работ с ZFS. Скрипты запускаются в специальных изолированных окружениях при помощи команды «zpool program»;
- Реализована новая библиотека pyzfs, предоставляющая стабильный API для администрирования ZFS из приложений на языке Python. Библиотека является обвязкой над libzfs_core и предоставляет идентичный набор функций, но применяет более близкие для Python типы;
- Обеспечена совместимость утилит arcstat, arcsummary и dbufstat с Python 3. Утилиты arcstat.py, arc_summary.py и dbufstat.py переименованы в варианты без расширения «.py»;
- Добавлена поддержка интерфейса ядра Linux Direct IO (O_DIRECT), позволяющего обращаться к данным без буферизации и в обход кэша;
- Представлены оптимизации производительности:
- Ускорена работа команд «scrub» и «resilver» за счёт разбиения на две фазы (выделена отдельная фаза для сканирования метаданных и определения расположения блоков с данными на диске, что позволяет выполнить дальнейшую проверку с использованием последовательного чтения данных);
- Добавлена поддержка классов размещения данных (Allocation classes), позволяющих включать в пул относительно небольшие SSD-накопители и использовать их для хранения только определённых типов часто используемых блоков, таких как метаданных, данные DDT и мелкие блоки с файлами;
- Увеличена производительность команд для администрирования, таких как «zfs list» и «zfs get», за счёт кэширования необходимых для их работы метаданных;
- Добавлена поддержка распараллеливания операций выделения блоков через запуск отдельных процессов «allocator» для каждой группы metaslab. На обычных системах отмечается прирост производительности на уровне 5-10%, но на крупных (8 128 GB SSD, 24 core NUMA, 256 GB ОЗУ) прирост операций выделения блоков может достигать 25%;
- Добавлена возможность отложенного выполнения команды «resilver» (перестроение распределения данных с учётом изменения конфигурации накопителей) — если при запуске новой операции ещё не отработала предыдущая, то новый обработчик начнёт выполняться только после окончания работы предыдущего;
- В журнал ZIL (ZFS Intent Log) внесены оптимизации, позволяющие создавать и обрабатывать блоки при наличии блоков, ещё обрабатываемых хранилищем;
- Сокращено время регистрации разделов (zvol) в системе. Когда пул содержит большое число разделов они теперь становятся доступны сразу после выполнения «zpool import»;
- Добавлена поддержка аппаратного ускорения вычисления хэшей SHA256 и операций шифрования AES-GSM c использованием чипов с поддержкой технологии Intel QAT (Quick Assist Technology). Добавлена поддержка средств аппаратного ускорения чипсета Intel C62x и CPU Atom C3000.