International conference of developers
and users of free / open source software

ZFS на базе проекта «ZFS on Linux»

Александр Клыга, Minsk, Belarus

LVEE 2019

What is the project "openZFS"? It's concept evolution open source project "ZFS on Linux" in future.

Архитектура, лицензионные ограничения и перспективы развития файловой системы ZFS в рамках проекта openZFS

ZFS (Zettabyte File System) 1 — 128 битная файловая система была разработана двумя инженерами компании Sun Microsystems для хранения больших объемов данных (например, максимальный общим объемом тома может достигать 256 зеттабайт), с использованием концепции динамического распределения блоков из общего хранилища. В ней используется модель объектных транзакций на основе механизма копирования при записи (Copy-On-Write COW), поддерживается проверка целостности информации с возможность автоматического восстановления, создание снимков, обеспечение отказоустойчивости с помощью технологии RAID-Z. В состав ее компонентов включен менеджер логических томов для управления виртуальными абстракциями пулов хранения данных на базе физических устройств, с возможностью облегченного администрирования с использованием интерфейса командной строки. Дополнительные возможности определяются версией пула (ZFS Pool Version) и его реализацией в зависимости от дистрибутива операционной системы.

В 2006 году начаты работы по включению файловой системы ZFS в состав операционной системы (ОС) Linux, несмотря на проблемы лицензирования и архитектурной не совместимости ОС Solaris и Linux.

Проблемы лицензионной совместимости с платформой ОС Linux.

  1. Код ZFS распространяется под лицензией CDDL (Common Development and Distribution License), несовместимой с лицензией GPLv2 ядра Linux, что не дает возможность включения его в состав основной ветки ядра Linux, а изменение типа лицензии в силу исторических и иных причин уже невозможно.
  2. Официально все права на ZFS принадлежат компании Oracle, однако так как код ZFS распространяется под лицензией CDDL, порты для других операционных систем и платформ могут производиться без участия Oracle, что дает возможность делать собственную разработку на базе исходного проекта.

Решения проблемы лицензирования и реализации ZFS в ОС Linux.

Первым решением по поддержке ZFS в Linux стало разработка порта FUSE 2, данное решение было представлено в 2006 году и позволило реализовать локальную файловую систему хранения данных большой емкости в пространстве пользователя.

Вторым решением стало разработка нативного порта (native port) для Linux, старт данному проекту был дан в 2008 году, а возглавил его Брайан Белендорф вместе с сотрудниками Ливерморской национальной лаборатории. В мае 2010 года, для обхода проблемы лицензирования он предложил метод реализации ZFS для Linux в виде загружаемого модуля (под лицензией CDDL) поставляемого отдельно от ядра. При этом, что бы соответствовать требованиям лицензии GPLv2 модуль ZFS поставляется в виде исходных кодов и собирается в системе пользователя, например, с использованием DKMS (Dynamic Kernel Module Support) 3, непосредственно после установки пакета. Для дистрибутивов на базе RHEL/CentOS была добавлена возможность установки модуля ZFS в виде универсального kABI-tracking kmod пакета 4. В дальнейшим все наработки в данном направлении стали основой проекта “ZFS on Linux” (ZOL) 5.

В том же 2010 году было объявлено о закрытии проекта OpenSolaris, что стало поводом для создания ответвления (форка) в рамках которого были продолжены работы по развитию открытой спецификации ZFS.

Первый стабильный релиз ZFS для Linux на базе ZOL был представлен в 2013 году, вместе с проектом openZFS 6, основной задачей которого ставили гарантировать дальнейшую эволюцию ZFS, сосредоточить разработку в рамках единого вектора развития и создания кросс-платформенного решения, упрощающий использование ZFS в различных операционных системах.

Ключевым для развития ZFS на платформе Linux стал 2016 год, когда были опубликованы некоторые разъяснения по итогам анализа результатов исследования юристов компании Canonical о в лицензионной совместимости модуля ZFS и ядра Linux на предмет возможности его использования в дистрибутиве 7. Несмотря на неоднозначные результаты и последующие дискуссии с правозащитной организацией Software Freedom Conservancy (SFC), сначала компания компании Canonical включила модуль поддержки ZFS в состав своего дистрибутива Ubuntu, а затем разработчики Debian добавили его в репозитории проекта.

Решение проблемы архитектурной не совместимости ОС Solaris и Linux.

Архитектурно файловая система ZFS состоит их трех основных слоев:

  • «Interface Layer» (IL), основные компоненты «ZFS Emulated Volume» (ZVOL) и «ZFS POSIX Layer» (ZPL):
  • «Transactional Object Layer» (TOL), основной компонент «Data Management Unit» (DMU);
  • «Pooled Storage Layer» (PSL), основной компонент «Storage Pool Allocator» (SPA).

Четвертый компонент Layered Driver Interface (LDI) реализован только в ОС Solaris и представляет собой набор компонентов интерфейсов взаимодействия с физическими накопителями и реализации дополнительных функций обработки их отказов.

Поэтому в архитектуру ZFS (рисунок 1) были внесены изменения и вместо LDI был добавлен новый слой получивших название «Solaris Porting Layer» (SPL) в состав которого были включены реализации компонентов и вспомогательных утилит портированых из Solaris.

Рисунок 1. Архитектура ZFS для ОС Linux

Дополнительно был реализован еще один компонент IL включенный в состав ZFS в 2009 году “Lustre” позволяющий использовать ZFS в роли бэкенда для кластерных и сетевых файловых систем, например Lustre или pNFS (рисунок 2).

Рисунок 2. Дополнительный компонент “Lustre”.

Использование данного компонента позволяет упростить интеграцию распределенных и сетевых файловых систем с ZFS, однако, при этом она остается локальной файловой системой.

Возможности ZFS на базе проекта “ZFS on Linux”

Функциональные возможности ZFS на базе проекта “ZFS on Linux”:

  • режим multihost (MMP, Multi Modifier Protection);
  • расширенная система квот;
  • шифрование наборов данных;
  • раздельный выбор классов распределения блоков (allocation classes);
  • использование векторных процессорных инструкций для ускорения реализация RAIDZ и вычисления контрольных сумм;
  • поддержку хранения контрольных сумм с использованием более надёжных криптографических хэшей SHA-512, Skein и Edon-R;
  • защиту операций импорта пула в отказоусточивых конфигурациях;
  • поддержка больших dnode для оптимизации работы с метаданными;
  • дополнительные параметры (более 50) для тонкой настройки работы модуля ядра;
  • улучшенный инструментарий командной строки.

Дополнительные возможности определяются версией модуля и ядра дистрибутива ОС Linux.

Дальнейшее развитие ZFS в рамках проекта openZFS

До конца 2017 года основной вклад в развитие ZFS вносил проект “ZFS on Linux” совместно с компанией Delphix с использованием наработок основанных на оригинальном коде ZFS, импортированном из проекта OpenSolaris и расширенном улучшениями и исправлениями от сообщества Illumos.

Однако в 2018 году компания Delphix приняла решение о прекращении поддержки развития ZFS и переходе на использование кода проекта “ZFS on Linux” 8, что привело к стагнации проекта Illumos.

В конце 2018 года о намерении перейти на проект “ZFS on Linux” объявила команда разработчиков FreeBSD 9. Таким образом вся активность по развитию и сопровождению проектов связанных с открытыми реализациями ZFS на базе проекта openZFS сократилась до одного “ZFS on Linux”.

Новый релиз модуля ZFS для ядра Linux версии 0.8.0 был представлен 23 мая 2019 года, и включает в себя много изменений и дополнений 10. Однако, при этом необходимо учитывать, что реализация ZFS на базе проекта openZFS не обеспечивает полноценной совместимости с продуктами компании Oracle и развивается отдельно.

Ссылки:

1 ZFS Wikipedia ZFS

2 FUSE Модуль ядра FUSE

3 DKMS DKMS on GitHub

4 kABI-tracking kmod The ELRepo Blog

5 ZFS on Linux ZFS on Linux

6 Проект openZFS openZFS

7 ZFS Licensing and Linux Blog Dustin Kirkland

8 Delphix Blog Kickoff to The Future

9 FreeBSD The future of ZFS in FreeBSD

10 ZFS on Linux Release zfs-0.8.0

Abstract licensed under Creative Commons Attribution-ShareAlike 3.0 license

Back