Казалось бы, объединив в единую архитектуру менеджер логических томов и концепцию файловой системы, можно существенно упростить управление дисковым массивом. На этом тривиальном принципе в 2005 году крупным производителем ПО Sun Microsystems и была основана во многом прорывная файловая система ZFS, интегрированная первоначально в ОС Solaris.
Zettabyte File System или ZFS — новейшая транзакционная файловая система, работающая с использованием механизма copy-on-write и оперирующая одновременно на нескольких уровнях абстракции данных.
Сейчас это продолжающий развиваться безопасный, масштабируемый и чрезвычайно удобный в администрировании опенсорсный инструмент.
Файловая система и менеджер томов ZFS отличаются в первую очередь целостностью данных и рядом встроенных функций хранения:
ZFS предназначена для работы на одном сервере, потенциально с сотнями, если не тысячами подключенных накопителей. ZFS объединяет доступное хранилище и управляет всеми дисками как единым целым. Администратор может добавить в пул дополнительные накопители при необходимости повысить емкость. ZFS обладает высокой масштабируемостью и поддерживает работу с файлами размером до 16 эксбибайт.
ZFS сохраняет как минимум две копии метаданных каждый раз, когда данные записываются на диск. Метаданные включают в себя такую информацию, как:
Когда пользователь запрашивает доступ к файлу, алгоритм контрольной суммы выполняет вычисление, чтобы убедиться, что полученные данные соответствуют исходным битам, записанным на диск. Если контрольная сумма обнаруживает несоответствие, она помечает «битые» данные. В системах с зеркальным пулом хранения или RAID ZFS может получить верную копию с другого диска и восстановить поврежденную копию данных.
ZFS - это copy-on-write файловая система (или с механизмом копирования при записи), хотя Oracle называет используемый механизм еще как редирект при записи. Когда ZFS записывает данные на диск, они не перезаписывают данные на месте: ZFS записывает новый блок в другое место на диске и обновляет метаданные, чтобы оставить ссылку на вновь записанный блок, сохраняя при этом более старые версии данных.
Условная copy-on-write файловая система создает точную копию блока данных в отдельном месте перед перезаписью исходного блока, для чего ей необходимо прочитать предыдущее значение блока. Файловая система с механизмом copy-on-write требует для каждой записи данных выполнения трех операций ввода-вывода — чтения, изменения и записи. Система редиректа, напротив, при записи требует только одной операции ввода-вывода, что способствует повышению эффективности и производительности системы.
ZFS — файловая система, пользующаяся спросом для сетевых систем хранения, использующих Network File System поверх файловой системы, а также в средах виртуальных серверов. Другой распространенный сценарий развертывания — это распределенные файловые системы, как, например, General Parallel File System (GPFS) или Lustre поверх ZFS для привязки дополнительных серверных узлов. Пользователи OpenStack могут развернуть ZFS в качестве базовой файловой системы для блочного хранилища Cinder и хранилища объектов Swift.
Моментальные снимки. ZFS и OpenZFS могут создавать копии файловой системы в заданный момент времени буквально «на лету», поскольку система сохраняет все копии данных. Снимки представляют собой неизменяемые копии файловой системы, тогда как результаты клонирования системы можно изменять. Снапшоты интегрированы в загрузочные среды с ZFS на Solaris, что позволяет пользователям вернуться к любому состоянию системы, если что-то пойдет не так. Еще одно ключевое преимущество ZFS — это средство восстановления от программ-вымогателей.
Сжатие. Встроенный поддержка сжатия данных - ключевая функция в ZFS и OpenZFS, позволяющая уменьшить количество битов, необходимых для хранения данных. ZFS и OpenZFS поддерживают несколько алгоритмов сжатия. Пользователи при этом могут отключить эту опцию.
Дедупликация. Встроенная в ZFS и OpenZFS функция дедупликации данных обеспечивает эффективность хранения за счет устранения избыточных данных. Файловые системы находят повторяющиеся данные, просматривая контрольную сумму блока, который может различаться по размеру. Пользователи также могут отключать встроенную дедупликацию при желании.
Отправка и загрузка снимков ZFS. ZFS и OpenZFS позволяют отправить моментальный снимок файловой системы на другой узел сервера, что открывает для пользователя возможность сохранять данные в отдельную систему для таких целей, как резервное копирование или перенос данных в облачное хранилище.
Безопасность. ZFS и OpenZFS поддерживают делегированные разрешения и детализированные списки управления доступом для управления тем, кто может выполнять административные задачи. Пользователи могут настроить ZFS как доступную только для чтения, поэтому данные нельзя будет изменить. Oracle также поддерживает шифрование в ZFS на Solaris.
Массив дисков RAID-Z позволяет хранить одни и те же данные в нескольких местах для повышения отказоустойчивости и производительности. Система восстанавливает данные на утерянном диске, используя информацию, хранящуюся на других дисках системы. Подобно RAID 5, в ZFS RAID-Z распределяет информацию параллельно по каждому диску, чтобы система хранения могла функционировать даже в случае выхода из строя одного диска. Однако в случае с RAID-Z чередующиеся данные представляют собой блок динамического объема.
Хоть RAID-Z обычно и сравнивают с RAID 5, некоторые операции он выполняет иначе: так, например, в RAID-Z известен так называемый «write hole effect», когда система не может определить, какие данные или блоки были записаны на диск по причине сбоя питания или внезапного прекращения работы системы. Вендоры, использующие традиционный RAID, обычно решают эту проблему при помощи источника бесперебойного питания или специального оборудования.
RAID-Z2 поддерживает потерю двух устройств хранения, аналогично RAID 6, а RAID-Z3 может выдержать потерю трех устройств хранения. Пользователи могут объединять диски в группы, как в обычном массиве RAID. Например, система с двумя группами по шесть дисков, настроенная как RAID-Z3, может выдержать потерю трех дисков в каждой группе.
ZFS объединяет файловую систему и менеджер томов, поэтому пользователям не нужно использовать и изучать отдельные инструменты и наборы команд. ZFS бесплатно предлагает богатый набор функций и сервисов, так как он встроен в ОС Oracle — OpenZFS с открытым исходным кодом находится в свободном доступе. Файловую систему можно расширить, добавив диски в пул хранения. Традиционные файловые системы требуют изменения размера раздела диска для увеличения емкости, и пользователям зачастую требуется вспомогательный софт для управления томами.
Если распределенные файловые системы, в числе которых, например, GPFS и Lustre, можно масштабировать до нескольких серверов, то ZFS может работать только на одном сервере.
Богатый набор функций, предлагаемый ZFS, может усложнить использование и управление программным обеспечением. Такие функции, как встроенные алгоритмы контрольной суммы ZFS, могут потребовать дополнительной вычислительной мощности и негативно сказаться на производительности.
В сообществе Linux бытуют различные мнения о лицензировании в отношении распространения кода ZFS и бинарных модулей ядра. Например, производитель ПО Red Hat считает недопустимым распространять код, защищенный по CDDL, вместе с кодом, защищенным по общедоступной лицензии (GPL). Напротив, компания Canonical, распространяющая Ubuntu, пришла к выводу, что такой подход соответствует условиям лицензий CDDL и GPL.
ZFS — файловая система, поддерживаемая компанией Oracle, тогда как OpenZFS — система с открытым исходным кодом. Обе они имеют общие корни, но последние несколько лет развиваются в разных направлениях: и Oracle, и сообщество разработчиков ПО добавили расширения и значительно улучшили производительность ZFS и OpenZFS соответственно. Обновления Oracle ZFS являются собственностью компании и доступны только в технологиях Oracle, тогда как обновления кода OpenZFS с открытым исходным кодом находятся в свободном доступе.
Список улучшений, которые Oracle внес в ZFS с 2010 года, включает:
В числе обновлений OpenZFS, внесенных сообществом разработчиков ПО с открытым исходным кодом:
Проблема лицензирования по-прежнему оставляет без встроенной поддержки ZFS Linux системы, однако это можно решить модификацией ядра одним из двух способов: путем динамической генерации модуля либо сборкой модуля ядра в бинарном виде.
В каких же случаях в итоге следует прибегнуть к использованию ZFS, а когда стоит довольствоваться аппаратными решениями? Разберем на разных примерах.
Системный администратор среднего бизнеса тратит 20% своего времени на планирование, изменение, администрирование и ремонт дисковых массивов трех серверов. С ZFS это время сокращается вдвое.
Опытный пользователь имеет четырехдисковую рабочую станцию RAID-5. Вычисления четности делают настройку довольно медленной из-за большого количества операций записи небольших файлов. В итоге он переходит на ZFS и замечает прирост в производительности, поскольку вместо избыточных вычислений небольшие файлы просто зеркалируются.
У другого системного администратора есть диск, который частично вышел из строя. Наличие двух копий тома файловой системы позволит ему восстановить некоторые из своих последних личных данных, не рискуя их потерять безвозвратно.
Еще один пользователь настроил 18-дисковый массив SAS для работы в зеркальном режиме, каждая группа из девяти дисков содержит одну ветвь RAIDZ2. На одном из дисков отказала механика внутри гермоблока. Он удаленно деактивирует диск, заменяет его новым, активирует этот диск, а затем использует команду ZFS zpool replace для замены неисправного диска. ZFS автоматически восстанавливает данные на этом диске с нулевым временем простоя и минимальным влиянием на передачу данных или производительность массива.