ZFS на базе проекта «ZFS on Linux»
LVEE 2019
Архитектура, лицензионные ограничения и перспективы развития файловой системы 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.
- Код ZFS распространяется под лицензией CDDL (Common Development and Distribution License), несовместимой с лицензией GPLv2 ядра Linux, что не дает возможность включения его в состав основной ветки ядра Linux, а изменение типа лицензии в силу исторических и иных причин уже невозможно.
- Официально все права на 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
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