Итак, что же такое ZFS? Zettabyte File System – это транзакционная файловая система корпоративного уровня, совмещающая лучшие функции диспетчера томов с файловой системой «зеттабайтного масштаба». Она использует уникальные механизмы, благодаря которым безопасность и надёжность хранения данных выходит на новый уровень. Компания Sun Microsystems начала работу над продуктом ещё в 2001 и выпустила его в 2005 году как часть операционной системы OpenSolaris. Затем компания-разработчик была поглощена корпорацией Oracle, разработка OpenSolaris была прекращена, однако ZFS продолжила своё самостоятельное развитие в виде проекта с открытым исходным кодом и приобрела популярность, поскольку является удобной, масштабируемой и надёжной системой управления данными.


ZFS on Linux


Архитектура пула

Постараемся более подробно разобраться в основных особенностях ZFS и их реализации в качестве фундамента сетевых накопителей QSAN. Первое, что выделяет ZFS на фоне других файловых систем, – это концепция пулов хранения для управления физическим хранилищем. Исторически файловые системы создавались в расчёте на работу с одним физическим носителем. Чтобы работать сразу с несколькими устройствами и обеспечивать избыточность данных, в индустрии были разработаны диспетчеры томов. Они используют преимущества объединенных дисков и предоставляют файловым системам одно логическое устройство, чтобы не пришлось изменять фундаментальную архитектуру. Эта конструкция добавила дополнительный уровень сложности и в конечном итоге простимулировала усовершенствование файловых систем, поскольку типичные их представители были не способны контролировать физическое размещение данных на виртуализированных томах.

ZFS полностью исключает необходимость внешнего управления томами. Вместо этого ZFS сама объединяет дисковые устройства в пул хранения, который может занимать весь доступный объём и состоять из неограниченного количества групп, аналогичных классическим режимам RAID. Подобный подход предоставляет пользователям сетевых накопителей QSAN необходимую гибкость, а также открывает некоторые функциональные возможности. Например, функция автоматического распределения по уровням становится доступна именно благодаря нескольким группам дисков в системе, органично объединенных ZFS.

Расширение пула

Режим создания дисковых массивов с выделением ёмкостей одного, двух или трех дисков для обеспечения контроля чётности и отказоустойчивости носит название RAID-Z. Он имеет отличия по сравнению со своими «классическими» аналогами RAID 5 и 6. Каждый блок данных имеет динамическую длину, потенциальная вероятность повреждения данных при записи (т.н. Write hole) отсутствует, а при восстановлении повреждённого массива реплицируются только занятые блоки, что значительно ускоряет процесс.

Однако не обошлось без недостатков. Дисковые массивы, создаваемые средствами файловой системы ZFS, не имеют возможности живой миграции на другие уровни, и в связи с этим не могут быть расширены путем увеличения количества дисков. Расширить доступное файловой системе дисковое пространство предлагается двумя способами: заменить все диски отказоустойчивого массива на более ёмкие с промежуточными перестроениями, либо создать новый массив, добавив его ёмкость к общему пространству пула.

Снапшоты – снимки файловой системы

Ещё одна особенность файловой системы ZFS – это её принадлежность к так называемым транзакционным системам. В таких файловых системах управление данными осуществляется при помощи механизма "копирование при записи" – операции изменения данных никогда не перезаписывают старые блоки, а создают новые. Подобный подход гарантирует невозможность повреждения файловой системы в результате отключения электропитания или полного отказа системы, так как в случае сбоев во время записи старая информация будет фиксирована и данные не будут повреждены.

Особенность работы механизма "копирование при записи" приводит нас к другой интересной возможности ZFS, а именно снимкам, или снапшотам, – копиям файловой системы, доступным только для чтения. Поскольку старые, неиспользуемые блоки не удаляются, снимки позволяют быстро и легко зафиксировать состояние системы и в случае необходимости откатиться к нему, или найти и скопировать старые версии файлов и папок. Изначально снимки не занимают дополнительного пространства пула, но по мере накопления изменений снапшоты начинают занимать место из-за ссылок на старые данные, что также может препятствовать освобождению пространства. На накопителях QSAN можно тонко настроить расписание и максимальное количество снимков для каждого отдельного тома или блочного LUN-устройства, а при помощи технологии репликации скопировать всё содержимое снапшота на другое хранилище XCubeNAS.

На этом арсенал встроенных возможностей системы ZFS, призванных обеспечивать безопасность информации, не заканчивается. Помимо выше перечисленного консистентность данных поддерживает алгоритм проверки контрольных сумм. В отличие от многих файловых систем с их контролем целостности на уровне ведения журнала изменений, ZFS создает контрольную сумму при каждой записи новой информации и проверяет соответствие данных при каждом чтении. Если при проверке будут обнаружены повреждённые блоки, система ZFS предпримет попытки самовосстановления данных. Благодаря тесной интеграции с диспетчером томов, некорректные блоки данных восстанавливают исходную последовательность на повреждённом участке из других резервных копий отказоустойчивого массива.

Масштабирование при помощи полок

Рассматривая отличительные особенности СХД QSAN при использовании ZFS, нельзя не отметить масштабируемость, предлагаемую данными системами. Поскольку ZFS является 128-разрядной файловой системой, её теоретические ограничения настолько огромны, что на текущем уровне развития технологий кажутся недостижимыми. Для примера приведем некоторые цифры. Максимальный размер файла может быть порядка 18 миллионов терабайт, а общий объём данных может составлять 256 квадриллионов (1015) зеттабайт (миллиард терабайт)! Такие гигантские объёмы информации действительно сложно даже представить, не говоря уже о практической реализации подобного проекта. Один из ведущих разработчиков файловой системы ZFS – Джефф Бонвик – в своём блоге привёл занимательные расчёты, исходя из которых следует: для заполнения 128-разрядного пула потребуется больше энергии, чем нужно для вскипания мирового океана. В современных реалиях накопители QSAN серии XCubeNAS могут предложить лишь малую часть от теоретически возможного предела – при подключении восьми дополнительных полок и использовании 12Тб дисков, общий объем сырой емкости пула может достигать 2,5Пб.

На сегодняшний день проект с открытым исходным кодом «ZFS on Linux» активно развивается, улучшая имеющийся функционал и предлагая новые уникальные возможности. Некоторые из них, такие как сжатие при помощи алгоритма LZ4, уже являются рекомендуемыми, и активируются системой по умолчанию. А другие, например, дедупликация, рекомендуется использовать только в случае явной необходимости ввиду роста операционных расходов. В любом случае, тяжёлые времена для файловой системы ZFS, наступившие после поглощения компании Sun Microsystems, остались позади, продукт уже является стабильным и уже включён в штатные репозитории многих Linux дистрибутивов.

Подводя итог, хочется отметить, что многие специалисты называют ZFS лучшим решением для надёжного и длительного хранения больших объёмов данных. И с ними сложно не согласиться, набор встроенных технологий и возможностей, призванных обеспечить сохранность информации, действительно впечатляет. И хотя ZFS не является универсальным средством на все случаи жизни, она заслуженно занимает свое место в нише программных решений для хранения корпоративных данных.