Разработчик (и) | OpenZFS Проект |
---|---|
Реализован | 2013; 7 лет назад (2013 г.) |
Структуры | |
Содержимое каталога | Расширяемая хэш-таблица |
Пределы | |
Макс. размер тома | 256 триллионов йобибайт (2 байта) |
Макс. размер файла | 16 эксбибайт (2 байта) |
Макс. количество файлов |
|
Макс. длина имени файла | 255 ASCII символов (меньше для стандартов многобайтовых символов, таких как Unicode ) |
Features | |
Forks | Да (называется «расширенными атрибутами», но они являются полноценными потоками) |
Атрибуты | POSIX |
Разрешения файловой системы | ACL POSIX, NFSv4 |
Прозрачное сжатие | Да |
Прозрачное шифрование | Да |
Дедупликация данных | Да |
Копирование при записи | Да |
Другие | |
Поддерживаемые операционные системы | Illumos дистрибутивы, FreeBSD и его производные, macOS, ZFS в Linux через модуль ядра, Microsoft Windows |
Repository | github.com / openzfs / zfs |
Формирование | 2013; 7 лет назад (2013) |
---|---|
Продукты | Файловая система OpenZFS |
Родительская организация | Программное обеспечение в общественных интересах |
Веб-сайт | openzfs.org |
OpenZFS - это платформа хранения с открытым исходным кодом, которая включает в себя функции традиционного fil esystems и менеджер томов. Он включает защиту от повреждения данных, поддержку больших объемов хранения, эффективное сжатие данных, моментальные снимки и клоны с копированием при записи, непрерывная проверка целостности и автоматическое восстановление, шифрование, удаленная репликация с отправкой и получением ZFS и RAID-Z. Одноименный проект OpenZFS объединяет разработчиков платформ illumos, Linux, FreeBSD и macOS, а также широкий круг компаний на ежегодном саммите разработчиков OpenZFS.
Среди членов-основателей OpenZFS - Мэтт Аренс., один из главных архитекторов ZFS. Проект OpenZFS является производной с открытым исходным кодом от проекта Oracle ZFS. Начиная с 2019 года OpenZFS (на некоторых платформах, таких как FreeBSD ) постепенно превращается в основанную на ZFS в Linux, которая развивалась быстрее, чем другие варианты OpenZFS, и содержит новые функции, еще не перенесенные на эти другие версии. Объединенная кодовая база будет включать ряд новых функций и улучшений производительности, и ее предлагается называть OpenZFS 2.0.
Файловая система ZFS была первоначально разработана Sun Microsystems для операционной системы Solaris. Исходный код ZFS был выпущен в 2005 году под Общей лицензией на разработку и распространение (CDDL) как часть операционной системы OpenSolaris, а затем был перенесен на другие операционные системы и среды.
Ниже приводится список ключевых событий в разработке ZFS и ее различных реализаций, которые привели к созданию OpenZFS в качестве зонтичного проекта:
Поскольку FSF заявлял о юридической несовместимости CDDL и GPL в 2005 году, Sun реализация файловой системы ZFS не была не использовался в качестве основы для разработки ядра Linux модуля, он не был объединен с основной веткой ядра Linux и дистрибутивами Linux. не включал его как предварительно скомпилированный модуль ядра. В качестве обходного пути FUSE, фреймворк, позволяющий файловым системам работать в пользовательском пространстве, использовался в Linux в качестве разделительного уровня, для которого не действуют проблемы с лицензированием, хотя и с набор собственных проблем, в том числе снижение производительности. Однако апрельский выпуск Ubuntu 16.04 LTS от апреля 2016 года включает ZFS для Linux с лицензией CDDL в качестве модуля ядра, который поддерживается как отдельный проект, за пределами Linux. основная линия ядра, заявившая о совместимости с лицензией.
В выпускной версии Mac OS X 10.5 ZFS была доступна в режиме только для чтения из командной строки, в которой отсутствует возможность создавайте zpools или пишите им. Перед выпуском 10.5 Apple выпустила «ZFS Beta Seed v1.1», который разрешал доступ для чтения и записи и создание zpools; однако сообщалось, что установщик для «ZFS Beta Seed v1.1» работает только с версией 10.5.0 и не обновлялся для версии 10.5.1 и выше. В августе 2007 года Apple открыла проект ZFS на своем веб-сайте Mac OS Forge. На этом сайте Apple предоставила исходный код и двоичные файлы своего порта ZFS, который включает доступ для чтения и записи, но установщик не был доступен до тех пор, пока его не создал сторонний разработчик. В октябре 2009 года Apple объявила о закрытии проекта ZFS в Mac OS Forge. Это означает, что их собственный хостинг и участие в ZFS были прекращены. Никаких объяснений дано не было. В конце концов Apple выпустила юридически обязательную, основанную на CDDL, часть исходного кода своей последней публичной бета-версии ZFS под кодовым названием «10a286». Полная поддержка ZFS когда-то рекламировалась как функция Snow Leopard Server (Mac OS X Server 10.6). Однако к моменту выпуска операционной системы все ссылки на эту функцию были удалены со страницы ее функций. Apple пока не комментирует упущение.
Версия исходного кода Apple «10a286» и версии ранее выпущенных исходных кодов и двоичных файлов были сохранены, а в проекте MacZFS была принята новая разработка для возобновления его разработки в другом месте. По состоянию на июль 2012 года в MacZFS реализованы zpool версии 8 и ZFS версии 2, начиная с выпуска Solaris за октябрь 2008 года. Дополнительную историческую информацию и комментарии можно найти на веб-сайте MacZFS и в разделе часто задаваемых вопросов.
OpenSolaris 2008.05, 2008.11 и 2009.06. ZFS в качестве файловой системы по умолчанию. Существует более десятка сторонних дистрибутивов.
OpenIndiana использует OpenZFS с флагами функций, как это реализовано в Illumos. ZFS версии 28 использовалась до версии 151a3.
При обновлении с OpenSolaris snv_134 до OpenIndiana и Solaris 11 Express можно также обновлять и отдельно загружать Solaris 11 Express в том же пуле ZFS.
OpenZFS в OSX (сокращенно O3X) - это реализация ZFS для macOS. O3X находится в стадии активной разработки, тесно связанной с ZFS в Linux и реализацией ZFS от Illumos, при этом поддерживая совместимость флагов функций с ZFS в Linux. O3X реализует zpool версии 5000 и включает уровень переноса Solaris (SPL), изначально написанный для MacZFS, который был дополнительно усовершенствован за счет включения уровня управления памятью на основе распределителей illumos kmem и vmem. O3X является полнофункциональным, поддерживает сжатие LZ4, дедупликацию, ARC, L2ARC и SLOG.
MacZFS - бесплатное программное обеспечение, обеспечивающее поддержку ZFS в macOS. Стабильная унаследованная ветка предоставляет пул ZFS до версии 8 и файловую систему ZFS версии 2. Ветка разработки, основанная на ZFS в Linux и OpenZFS, предоставляет обновленные функции ZFS, такие как ZFS zpool версии 5000 и флаги функций.
Запатентованная реализация ZFS (Zevo) была доступна бесплатно от GreenBytes, Inc., включая файловую систему ZFS версии 5 и пул ZFS версии 28. Zevo предложила ограниченный набор функций ZFS в ожидании дальнейшей коммерческой разработки; он был продан Oracle в 2014 году с неизвестными планами на будущее.
Эдвард О'Каллаган начал первоначальный перенос ZFS на DragonFlyBSD.
Порт ZFS для NetBSD был запущен как часть 2007 Google Summer of Code, а в августе 2009 года код был объединен с исходным деревом NetBSD.
Павел Якуб Давидек перенес ZFS на FreeBSD, и она является частью FreeBSD с версии 7.0. Сюда входит zfsboot, который позволяет загружать FreeBSD непосредственно с тома ZFS.
Реализация ZFS в FreeBSD полностью функциональна; единственные отсутствующие функции - это ядро сервер CIFS и iSCSI, но последний может быть добавлен с помощью внешних пакетов. Samba может использоваться для предоставления CIFS-сервера пользовательского пространства.
FreeBSD 7-STABLE (к которой относятся обновления серии версий 7.x) использует zpool версии 6.
FreeBSD 8 включает в себя значительно обновленную реализацию ZFS и версию zpool. 13 поддерживается. Поддержка zpool версии 14 была добавлена в ветку 8-STABLE 11 января 2010 г. и включена в выпуск FreeBSD 8.1. zpool версии 15 поддерживается в выпуске 8.2. Ветка 8-STABLE получила поддержку zpool версии v28 и zfs версии 5 в начале июня 2011 года. Эти изменения были выпущены в середине апреля 2012 года с FreeBSD 8.3.
FreeBSD 9.0-RELEASE использует пул ZFS версии 28.
FreeBSD 9.2-RELEASE - первая версия FreeBSD, использующая новую реализацию на основе «флагов функций», таким образом, версия Pool 5000.
MidnightBSD, операционная система для настольных ПК, производная от FreeBSD, поддерживает пул устройств хранения данных ZFS версии 6 начиная с версии 0.3-RELEASE. Это было получено из кода, включенного в FreeBSD 7.0-RELEASE. Обновление пула хранения 28 выполняется в 0.4-CURRENT и основано на исходных кодах 9-STABLE вокруг кода FreeBSD 9.1-RELEASE.
TrueOS (ранее известный as PC-BSD) - это дистрибутив FreeBSD для настольных ПК, унаследовавший его поддержку ZFS.
FreeNAS, встроенное хранилище с открытым исходным кодом сетевое хранилище ( NAS) на основе FreeBSD, имеет ту же поддержку ZFS, что и FreeBSD, и PC-BSD.
, встроенное сетевое хранилище с открытым исходным кодом Распределение (NAS) на основе FreeBSD.
pfSense, маршрутизатора на базе BSD с открытым исходным кодом, поддерживает ZFS, включая установку и загрузку в пулы ZFS, как версии 2.4.
XigmaNAS (ранее NAS4Free), встроенный дистрибутив с открытым исходным кодом сетевое хранилище (NAS) на основе FreeBSD, имеет то же Поддержка ZFS как FreeBSD, пул хранения ZFS версии 5000. Этот проект является продолжением проекта серии FreeNAS 7.
Основанный на ядре FreeBSD, Debian GNU / kFreeBSD имеет поддержку ZFS из ядра. Однако требуются дополнительные пользовательские инструменты, хотя можно использовать ZFS в качестве корневой файловой системы или / boot, и в этом случае необходимая конфигурация GRUB выполняется установщиком Debian, начиная с выпуска Wheezy.
По состоянию на 31 января 2013 г. доступная версия ZPool - 14 для выпуска Squeeze и 28 для выпуска Wheezy-9.
Хотя файловая система ZFS поддерживает Linux Операционные системы на основе возникают трудности у разработчиков дистрибутива Linux, желающих обеспечить встроенную поддержку ZFS в своих продуктах из-за потенциальной юридической несовместимости между CDDL лицензия, используемая кодом ZFS, и лицензия GPL, используемая ядром Linux. Чтобы включить поддержку ZFS в Linux, необходимо скомпилировать и загрузить в ядро загружаемый модуль ядра , содержащий лицензированный CDDL код ZFS. Согласно Free Software Foundation, формулировка лицензии GPL юридически запрещает распространение полученного продукта как производной работы, хотя эта точка зрения вызвала некоторые разногласия.
Один из возможных способов обхода несовместимости лицензирования был опробован в 2006 году с экспериментальным переносом кода ZFS в систему Linux FUSE. Файловая система работала полностью в пользовательском пространстве вместо того, чтобы быть интегрированной в ядро Linux, и поэтому не рассматривалась как производная от ядра. Этот подход был функциональным, но имел значительные потери в производительности по сравнению с интеграцией файловой системы в качестве собственного модуля ядра, работающего в пространстве ядра. По состоянию на 2016 год проект ZFS on FUSE, похоже, не функционирует.
Родной порт ZFS для Linux, созданный Ливерморской национальной лабораторией (LLNL), был выпущен в марте 2013 года после следующих ключевых событий:
По состоянию на август 2014 г. ZFS в Linux использует пул OpenZFS с номером версии 5000, что указывает на то, что поддерживаемые функции определены с помощью флагов функций. Эта версия пула - неизменный номер, который, как ожидается, никогда не будет конфликтовать с номерами версий, предоставленными Oracle.
Другой собственный порт для Linux был разработан KQ InfoTech в 2010 году. Этот порт использовался внедрение zvol Ливерморской национальной лаборатории в качестве отправной точки. В январе 2011 года было объявлено о выпуске, поддерживающем zpool v28. В апреле 2011 года компания KQ Infotech была приобретена sTec, Inc., и их работа над ZFS прекратилась. Исходный код этого порта можно найти на GitHub.
Работа KQ InfoTech в конечном итоге была интегрирована в собственный порт LLNL ZFS для Linux.
Хотя несовместимость лицензий может возникнуть при распространении скомпилированных двоичных файлов, содержащих код ZFS, по общему мнению, это не влияет на распространение самого исходного кода. В Gentoo настройка корневой файловой системы ZFS хорошо документирована, и необходимые пакеты могут быть установлены из ее репозитория пакетов. Slackware также предоставляет документацию по поддержке ZFS, как в качестве модуля ядра, так и когда встроены в ядро.
Вопрос о совместимости лицензии CDDL с лицензией GPL вновь возник в 2015 году, когда дистрибутив Linux Ubuntu объявил о своем намерении сделать предварительно скомпилированные бинарные модули ядра OpenZFS доступными для конечных пользователей непосредственно из официальных репозиториев пакетов дистрибутива. В 2016 году Ubuntu объявила, что юридическая проверка привела к выводу, что предоставление поддержки ZFS через бинарный модуль ядра не является нарушением положений лицензии GPL. Другие, такие как Закон о свободе программного обеспечения, последовали заключению Ubuntu, в то время как FSF и SFC повторили свою противоположную точку зрения.
Ubuntu 16.04 LTS («Xenial Xerus»), выпущенный 21 апреля, 2016, позволяет пользователю устанавливать двоичные пакеты OpenZFS прямо из репозиториев программного обеспечения Ubuntu. По состоянию на 2019 год против Canonical не было подано никаких юридических возражений относительно распространения этих пакетов.
По состоянию на 2019 год Ubuntu поддерживает экспериментальную установку ZFS в качестве корневой файловой системы, начиная с версии 19.10 («Eoan Ermine»), для поддержки сосуществования почти чистой ОС ZFS с GRUB и другими операционными системами на тот же диск.
Попытка переноса ZFS с открытым исходным кодом была предпринята в 2010 году, но после перерыва в разработке более одного года в 2012 году была прекращена. В октябре 2017 года было объявлено о новом переносе OpenZFS Йорген Лундман на Саммите разработчиков OpenZFS.
Ниже приводится список портов и вилок ZFS с открытым исходным кодом:
С ZFS в Oracle Solaris: по мере появления новых функций номера версий пула и файловой системы увеличиваются для обозначения формата и доступных функций. Для функций, доступных в определенных версиях файловой системы, требуется определенная версия пула.
Распределенная разработка OpenZFS включает флаги функций и пул версии 5000, неизменное число, которое, как ожидается, никогда не будет конфликтовать с версией числа, предоставленные Oracle. Устаревшие номера версий все еще существуют для версий пула 1–28, что подразумевается версией 5000. Illumos использует для этой цели пул версии 5000. Будущие изменения формата на диске включаются / отключаются независимо с помощью флагов функций.
Последний FOSS стабильный выпуск |
Номер версии пула ZFS | Дата выпуска | Существенные изменения |
---|---|---|
5000 | OpenZFS | Неизменяемая версия пула для обозначения того, что пул указывает новые функции после пула версии 28, используя флаги функций ZFS, а не путем увеличения версии пула |
Первоначально номера версий пула и файловой системы были увеличены по мере появления новых функций, чтобы обозначить формат файловой системы на диске и доступные функции. Это хорошо работало, когда разработку ZFS контролировала одна организация, и эта схема управления версиями все еще используется с ZFS в Oracle Solaris.
В более распределенной разработке Модель с одним номером версии далеко не идеальна, поскольку все реализации OpenZFS должны согласовывать все изменения в формате файловой системы на диске. Решение, выбранное OpenZFS, заключалось в том, чтобы представить флаги функций в виде новой системы управления версиями , которая помечает изменения формата на диске уникальными именами и поддерживает как полностью независимые изменения формата, так и изменения формата, которые зависят друг от друга. Пул можно перемещать и использовать между реализациями OpenZFS, если все флаги функций, используемые пулом, поддерживаются обеими реализациями.
В OpenZFS версия пула постоянно установлена на 5000, что означает, что пул указывает новые функции путем установки или снятия флажков функций ZFS, а не путем увеличения версии пула. Число 5000 было выбрано, потому что ожидается, что оно никогда не будет конфликтовать с номерами версий, указанными Oracle. Устаревшие номера версий все еще существуют для версий пула 1-28. Будущие изменения формата на диске включаются / отключаются независимо с помощью этих флагов функций.
Устаревшие номера версий все еще существуют для версий пула 1-28 и подразумеваются версией пула 5000; первоначальное предложение заключалось в использовании 1000 в качестве версии для пула. Будущие изменения формата на диске включаются и отключаются независимо с помощью флагов функций.
Флаги функций отображаются как свойства пула в соответствии со следующими правилами схемы именования:
Например, [email#160;protected] : async_destroy - допустимое имя свойства, и его можно было бы сократить до [email#160;protected] _destroy.
Каждая функция пула может находиться в отключенном, активном или активном состоянии. Отключенные функции - это те функции, которые не будут использоваться, и изменения формата на диске производиться не будут; в результате такие функции обратно совместимы. Включенные функции - это те, которые будут использоваться, изменения формата на диске еще не производились, но программное обеспечение может вносить изменения в любое время; такие функции по-прежнему обратно совместимы. Активные функции - это те, которые внесли обратно несовместимые изменения дискового формата в пул.
Когда включена какая-либо функция пула, устаревшая версия пула автоматически обновляется до 5000, а также включаются любые другие обязательные функции. По умолчанию новые пулы создаются со всеми поддерживаемыми функциями. В общем, состояние функции может быть изменено с активного обратно на включенное, отменяя выполненные таким образом изменения формата на диске и снова делая пул совместимым со старой реализацией OpenZFS; однако для некоторых функций это может быть невозможно.
Изменения формата на диске могут быть связаны либо с функциями для записи, либо с функциями для чтения. Первые - это функции, которые реализация OpenZFS должна поддерживать для возможности записи в пул, в то время как поддержка таких функций не является обязательной для открытия пула в режиме только для чтения. Последние - это функции, которые реализация OpenZFS должна поддерживать, чтобы иметь возможность читать из пула или просто открывать его, потому что открытие пула невозможно без фактического чтения из него.
Например, Функция async_destroy добавляет новую структуру данных на диске для отслеживания освобожденных наборов данных, но реализации OpenZFS не нужно знать об этой структуре данных для доступа к пулу в режиме только для чтения. Кроме того, запись в пул, в котором некоторые функции находятся в активном состоянии, невозможна с помощью реализации OpenZFS, которая не поддерживает те же функции.
Список флагов функций и поддерживаемые ими операционные системы доступны в разделе Open -ZFS.org Веб-сайт
Исторически OpenZFS реализовывалась как базовый код ZFS, и каждая команда разработчиков операционной системы приспосабливала его к своим проектам. В некоторых случаях это приводило к стагнации и расхождению функций и командных строк, поскольку в разных операционных системах разрабатывались разные функции и исправления ошибок, часто для одной платформы, а не для всех платформ. Со временем разработка новых функций сместилась с Illumos на Linux. Затем эти новые функции и исправления необходимо было перенести в Illumos, прежде чем их можно будет повторно перенести на FreeBSD. Но это было сложно, потому что версия для Linux также включала в себя множество мелких изменений, которые было трудно отделить друг от друга.
В 2018 году было решено, что разработка OpenZFS будет пересмотрена, чтобы исправить эти проблемы. Вместо того, чтобы пытаться импортировать все изменения Linux на другие платформы по частям, весь код ZFS Linux будет «развернут» в целом, при этом другие платформы будут основаны на более активно разрабатываемой версии Linux. Широкий спектр портированных и новых функций, включая многие давно желанные улучшения, также будет развернут или перенесен на разные платформы, а будущие изменения будут обсуждаться на разных платформах перед внедрением. В планы входили соответствующие уровни переноса для предотвращения внедрения кода Linux, GPL или Linux-KPI shim на другую платформу ядра.
Функции в процессе или перенос для OpenZFS 2.0 является длинным и включает:
Викискладе есть медиафайлы на OpenZFS. |