Как использовать файловую систему ZFS в Linux. Файловая система ZFS — основа надежного и недорогого хранилища данных Поддержка со стороны операционных систем


Файловая система ZFS — основа надежного и недорого хранилища данных

На страницах проекта сайт была затронута тема организации файлового хранилища:

  • первая часть
  • вторая часть

В указанных статьях было упоминание о файловой системе ZFS , сейчас как и обещал, поговорим о ней подробнее.

Введение в ZFS

Аббревиатура ZFS получилось из словосочетания zettabyte file system, обозначая тем самым одну из самых современных и совершенных файлововых систем. Например, уже из названия следует, что это зетабайтная файловая система , если быть точнее, то данная FS поддерживает 256 квадриллионов зетабайт. Для справки — один зетабайт равен 1 073 741 824 терабайт!

Пусть простят меня читатели, но больших академических выкладок в данной статье не будет. Предлагаю сконцентрироваться непосредственно на практическом аспекте, а именно созданию отказоустойчивого и масштабируемого хранилища данных. Такие хранилища безусловно строятся при помощи технологий RAID массивов, а у файловой системы ZFS имеется свой штатный инструмент для работы с физическими дисками и организации их в RAID-Z массивы (аналог RAID5). При этом, в отличие от аналогичных технологий, данная FS самостоятельно восстанавливает поврежденные блоки и исправляет их на лету без вмешательства пользователя. RAID-Z постоянно проверяет контрольные суммы данных для поддержания их целостности и может идентифицировать блоки, требующие перекомпоновки. Это делается до того, как запрашиваемые данные попадают к пользователю.

К основным плюсам данной FS — практически неограниченное дисковое пространство и встроенные инструменты построения отказоустойчивых RAID-Z массивов, относится также и атомарная запись данных . Под этим термином понимается следующее — данные либо полностью записываются на диск, либо не записываются вовсе. Такая технология позволяет избежать проблем, которые возникают в случаях сбоев работы сети, подсистемы питания и отказа операционной системы.

Поддержка со стороны операционных систем

Изначально ZFS была разработана в недрах компании Sun Microsystems для операционной системы Solaris. Сейчас благодаря ряду проектов, данная файловая система стала доступной для других ОС. К ним относятся — помимо Solaris, еще и OpenSolaris, Apple Mac OS X 10.5, FreeBSD, Linux (через FUSE или отдельный модуль ядра (ZFS on Linux)). Выбор конкретной ОС для своего проекта или проще говоря, для файлового хранилища остается за вами. Наибольшее распространение получила FreeBSD и производная — NAS4Free.

Конструктивные особенности системы хранения

При организации хранилища данных приходится оценивать ряд моментов. Одни из самых насущных — сколько необходимо дискового пространства предоставить для пользователей и сервисов, а также какие имеются возможности расширения и масштабирования массива устройств хранения данных. Далее возникают более технические вопросы — сколько нужно дисков, какие контроллеры, материнские платы и конфигурацию RAID-Z нужно использовать. Ответить на данные вопросы нужно перед началом работ, поэтому остановимся на их рассмотрении более подробно.

  • Объем дискового пространства

Из потребностей и требований к объему создаваемого хранилища, определяется количество HDD , их модели, а также тип конфигурации RAID-Z. Сразу приведу несколько рекомендаций:

— максимальная надежность и производительность достигается при испольловании жестких дисков одной модели и производителя

— ОС не следует размещать в самом хранилище, лучше использовать отдельный HDD/USB-напопитель

— количество дисков должно соответствовать выбранной системе RAID-Z

  • Варианты RAID-Z

Существует несколько разновидностей RAID-Z массивов, но сейчас мы рассмотрим два наиболее практичных и популярны:

— raid-z1 — здесь используется для контроля четности один диск из пула (минимум дисков для организации данного вида массива — 3 шт). При выходе из строя одного диска, массив будет работать корректно, при его замене массив перестроится самостоятельно. При выходе из строя двух дисков — массив разрушается и данные восстановлению не подлежат.

— raid-z2 — в данном случае для контроля четности выделяется 2 диска (минимум дисков для такой конфигурации — 5 шт.). Эта система является более отказоустойчивой.

  • Жесткие диски

Как было сказано ранее — лучше всего использовать одинаковые диски одного производителя (объем, модель и т.п.). При этом, стоит учитывать один важный момент, который молодые специалисты упускают. Настоятельно рекомендуется приобретать на один диск больше, т.е. производить закупку по формуле n+1 количество дисков. Это снизит время простоя и риски потери информации при «заводском браке» или повреждении HDD при транспортировке, а также сократит время в будущем по замене неисправного жесткого диска. Стоит отметить, ZFS поддерживает «hot spare», т.е. можно выполнить конфигурирование пула и дисков так, что один из них будет использоваться для горячей замены (без остановки хранилища), в том числе и в автоматическом режиме. Также стоит понимать, что от количества жестких дисков зависит и скорость работы хранилища (за счет распределения нагрузки по дискам в моменты чтения и записи).

  • Другие компоненты системы

Исходя из требований к объему хранилища, стоит выбирать мат. платы, контроллеры, блоки питания и корпуса для серверов с возможность расширения. При организации хранилища корпоративного класса стоит использовать только MB и RAM с контролем четности (ECC)!

  • Масштабируемость системы

Как было сказано в предыдущем пункте — MB и корпуса серверов должны поддерживать установки дополнительных устройств. При этом, если создается хранилище начального или среднего класса (без серьезных требований к надежности и производительности системы), SATA-контроллеры могут стать узким местом.

Подведем итог

Файловая система ZFS имеет ряд уникальных возможностей по работе с HDD и организации их в отказоустойчивые и масштабируемые пулы данных. При этом, чтобы получить все преимущества данной FS, необходимо использовать как минимум два жестких диска.

Кратко перечислю основные преимущества и свойства ZFS:

  • встроенные инструменты для работы с разделами HDD и организации RAID-Z
  • нет привязки к оборудованию
  • нечувствительна к незапланированным отключениям электропитания
  • автоматическая подмена вышедших из строя HDD, исправление ошибок и перестроение RAID
  • поддерживаются огромные размеры томов, файлов, пулов, а также легкая масштабируемость хранилища
  • быстрое и удобное администрирование ZFS Pool’ов
  • при увеличении HDD повышается производительность хранилища
  • дедупликация и сжатие данных

К минусам данной файловой системы можно отнести:

  • высокие требования к ресурсам CPU и RAM
  • хранилища, используемые для важных корпоративных данных, должны быть построены при использовании ECC RAM.

Следующая статья будет практической — работа с дисками, создание и администрирование пулов данных.

Файловая система ZFS невероятно популярна. В результате многие в предприятии клянутся им и используют его для размещения триллионов байтов данных. Несмотря на свою популярность, пользователи Linux не смогут наслаждаться этим из коробки. Вместо этого те, кто хочет проверить это и использовать его в качестве основной файловой системы хранилища, должны будут установить его.

Установка ZFS немного отличается от других файловых систем, и в зависимости от того, что вы используете, может потребоваться небольшое ноу-хау. Если вы новичок в этой файловой системе, лучше всего идти по маршруту Ubuntu. Начиная с Ubuntu 16.04, Canonical упрощает работу с ZFS. Еще лучше, Ubuntu - безусловно самая безопасная реализация ZFS в Linux, с простой настройкой и процессом сборки, который, как известно, очень надежный (в то время как другие дистрибутивы Linux имеют высокий риск нарушения ZFS).

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

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

Настройка ZFS

Файловая система ZFS работает, объединяя множество разных жестких дисков вместе, чтобы создать один большой центр хранения. Это звучит слишком сложно, и это так. Тем не менее, результат - превосходное хранилище с большим пространством.

Создание новой файловой системы ZFS немного сложнее, чем просто открытие редактора разделов Gparted. Вместо этого вам нужно будет взаимодействовать с ним на уровне командной строки. В окне терминала запустите lsblk команда. Запуск команды «list block» выведет все накопители на вашем ПК Linux.

Пройдите и решите, какие жесткие диски использовать для вашего Z-пула, и помните имена. В этом учебнике наши три диска в пуле ZFS / DEV / SDB , / DEV / SDC и / DEV / SDD .

Затем вам нужно полностью обнулить жесткие диски, выбранные для Z-пула, чтобы у них больше не было данных. С использованием dd команду, перезапишите каждый из дисков. Это займет некоторое время.

Примечание: изменение / DEV / SDx с идентификатором диска, найденным с помощью lsblk команда (SDB И т.д.).

Sudo dd if = / dev / zero of = / dev / sdX bs = 8M

когда dd заканчивается, запускает FDISK команда. Запуск fdisk покажет много информации о жестких дисках, включая информацию о файловой системе для каждого. Просмотрите показания и убедитесь, что ни один из дисков, которые вы удалили, не имеет файловой системы. Этот шаг имеет решающее значение, поскольку ZFS не использует традиционный формат разбиения.

Суда FDISK-л

Если же линия индикатора FDISK считывание выглядит хорошо, безопасно создать новый Z-пул ZFS. Для базовой настройки Z-пула выполните следующие действия:

Sudo zpool create -f newzpool / dev / sdb dev / sdc / dev / sdd

Базовая установка позволит большинству пользователей удовлетворить свои потребности в хранилищах. Однако те, которые ценят свои данные и нуждаются в защите, не должны идти с такой базовой настройкой. Вместо этого подумайте о создании пула ZFS с RaidZ.

Использование RaidZ в сочетании с вашим ZFS-пулом гарантирует, что ваши данные будут избыточными, с множеством резервных копий. Чтобы создать пул ZFS с RaidZ, запустите:

Sudo zpool create -f newzpool raidz / dev / sdb dev / sdc / dev / sdd

Чтобы добавить файлы в новый пул хранения ZFS, откройте диспетчер файлов и перейдите в корень файловой системы. Поместите файлы внутри папки с именем ZFS Zpool.

Добавить диски в ZFS Zpool

ZFS предназначен для хранения большого количества данных, но это не значит, что ваши оригинальные диски не будут заполняться. Наступит время, когда потребуется больше места для хранения. К счастью, поскольку ZFS не использует разделы, добавление большего количества хранилища в систему прост.

В этом примере мы добавим еще два диска в Zpool (/ dev / sde и / dev / sdf).

Примечание: если ваша установка ZFS не использует RaidZ, удалите ее из команды.

Sudo zpool add -f newzpool raidz / dev / sde / dev / sdf

Удалить пул ZFS

Зачастую объемы ZFS ломаются и становятся непригодными. Когда это произойдет, вам может потребоваться удалить пул хранения. Чтобы удалить пул хранения, откройте терминал и используйте zfs destroy команда.

Sudo zpool уничтожить newzpool

Бег zpool уничтожить занимает довольно много времени, в зависимости от того, сколько данных находится в вашем пуле хранения. Вы узнаете, что Zpool полностью уничтожен, когда терминал снова используется.

Проверить статус ZFS

Быстрый способ проверить статус вашего Zpool с помощью статус zpool команда. С его помощью пользователи могут видеть базовое считывание тома ZFS, как он это делает и имеются ли какие-либо ошибки. Чтобы проверить статус, выполните следующую команду.

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

Попробуем ознакомиться с точкой зрения каждой из сторон, а также в причинах существования столь полярных оценок этой файловой системы. Но, прежде чем мы это сделаем, давайте хотя бы в общих чертах ознакомимся с её особенностями и свойствами:

  • 128-битная файловая система, что даёт возможность хранения практически неограниченных объёмов информации. На практике это значит, что ZFS теоретически может хранить объёмы информации, которые превышают сегодняшние технологические возможности, при условии использования текущего подхода к организации хранения данных;
  • Очень большое внимание уделяется целостности и надежности хранения, как пользовательских данных, так и метаданных ФС, для этого используются продвинутые алгоритмы хэширования;
  • Поддержка снапшотов (snapshot) и пулов хранения (storage pools), благодаря чему ZFS сочетает в себе возможности файловой системы и системы управления томами (новая концепция storage-пулов);
  • Отсутствие необходимости в fsck благодаря этой ФС;
  • Традиционно считается, что ZFS — это достаточно производительная файловая система. Впрочем, это утверждение иногда ставится под сомнение. Как минимум, конкретные цифры очень сильно зависят от типа задачи, на которой производится подобное сравнительное тестирование производительности;
  • Возможности для избирательного сжатия и/или шифрования отдельных файлов или файловых систем;
  • Поддержка автоматического распознавания и объединения (исключения) файлов-дубликатов;
  • ZFS не поддерживает квоты. Вернее сказать, её поддержка квот несколько своеобразна: понятие «выделение квоты» значит в терминологии ZFS то, что вы ограничиваете размер создаваемой файловой системы. Дизайн системы таков, что каждому пользователю ZFS следует выделять свою собственную файловую систему со всеми сопутствующими ограничениями;
  • Определенные проблемы создает не техническая особенность ФС — несовместимая с GPL лицензия на код (CDDL);
  • Чтобы показать инновационность ZFS не только в области технических решений, приведу, как пример, возможность управлять основными возможностями ФС через веб-интерфейс;
  • И , так как, повторюсь — ZFS чрезвычайно велик в своих возможностях и особенностях, и перечислить всех их здесь просто не представляется возможным.

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

Если добавить сюда её относительно зрелый возраст и очень хорошее состояние в плане стабильности кода — становятся понятны те бури эмоций, которые вызвали новости о публикация её кода под открытой лицензией, а также портирование этой инновационной ФС на такие популярные ОС, как FreeBSD, Linux, MacOS X.

Что касается резко отрицательных откликов на эту, вне всяких сомнений, уже знаменитую файловую систему, то они сводятся в основном к следующим тезисам. Один из ведущих разработчиков Linux, кстати, ответственный за поддержку её дисковой подсистемы, (Andrew Morton), разразился гневными обличениями ZFS в «чудовищном нарушении уровней реализации».

Эндрю Мортан , ведущий разработчик дисковой подсистемы ядра Linux

Некоторые другие разработчики присоединилась к его обвинениям в «жутком дизайне» ZFS, и на данный момент можно констатировать, что Андрея Мортана в адрес ZFS — «ужасное нарушение уровней дизайна » и «необоснованная мешанина из кода » — стали уже своего рода интернет-мемами, на которые заочно уже попытались ответить разработчики из Oracle, Linux, RedHat, FreeBSD и других известных проектов.

В качества ответа на эти выпады, ведущего разработчика ZFS (Jeff Bonwick):

«Все эти обвинения в нарушении дизайна уровней реализации файловой системы, оттого, что ZFS комбинирует в себе одновременно функциональность файловой системы, менеджера томов и программного RAID-контроллера. Я полагаю, что ответ на эту претензию будет зависеть от того, что понимать под обвинением „нарушает дизайн уровней“.

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

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

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

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

ZFS - это файловая система, объединенная с менеджером логических томов.. Файловая система выпускалась под открытой лицензией Common Development and Distribution License (CDDL). Она была предназначена для высокопроизводительных серверов, поэтому уже тогда поддерживала мгновенные снимки и клонирование данных. Но после покупки ее компанией Oracle, исходный код был закрыт, а сообщество создало форк последней доступной версии под именем OpenZFS. Именно эту файловую систему сейчас и можно установить и использовать.

Файловая система ZFS имеет обычные для таких файловых систем возможности. Это просто огромный размер одного раздела, и размер файла, поддерживается возможность хранения файлов на нескольких устройствах, проверка контрольных сумм для данных и шифрование на лету, а также запись новых данных в режиме COW, когда данные не переписываются, а пишутся в новое место, что позволяет делать мгновенные снапшоты.

Возможности очень похожи на Btrfs, но есть кое-какие отличия. В Btrfs можно посмотреть все файлы, измененные с момента последнего снапшота. Второе отличие, это отсутствие в Btrfs логических блоков zvol.

Установка ZFS

В последних версиях Ubuntu файловая система ZFS была добавлена в официальный репозиторий и в установочный диск. Поэтому для того, чтобы ее установить будет достаточно выполнить несколько команд:

sudo apt install -y zfs

В других дистрибутивах. например, CentOS или Fedora ситуация немного сложнее, сначала вам придется добавить официальный репозиторий, а затем установка zfs и самого набора утилит и модулей ядра:

sudo yum install http://download.zfsonlinux.org/epel/zfs-release.el7_3.noarch.rpm
$ sudo yum install zfs

Затем осталось включить загрузить модуль ядра с поддержкой этой файловой системы:

sudo modprobe zfs

Теперь файловая система установлена и готова к использованию. Дальше нам нужно выбрать разделы и создать на них файловые системы. Для настройки zfs используется утилита zpool, но для начала давайте рассмотрим ее синтаксис и возможности. Файловая система может быть расположена на нескольких разделах или жестких дисках, поэтому на уровне ядра формируется общий пул (куча), а к нему уже подключаются разделы. Тут можно провести аналогию с группой томов LVM.

Команда zpool

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

$ zpool команда параметры опции устройства

Как я уже сказал, параметры и опции для каждой команды свои, а в качестве устройства может указываться пул или физический раздел на жестком диске. Теперь рассмотрим основные команды и их предназначение, чтобы вы могли немного ориентироваться, а более детальные параметры разберем уже на примерах:

  • add - добавить раздел к существующему пулу;
  • attach - добавить раздел или жесткий диск к пулу файловой системы;
  • clean - очистить все ошибки дисков;
  • create - создать новый пул из физического раздела, на котором будут размещены виртуальные диски;
  • destroy - удалить пул разделов zfs;
  • detach - отключить физический раздел от пула;
  • events - посмотреть сообщения ядра, отправленные модулем zfs;
  • export - экспортировать пул для переноса в другую систему;
  • get - посмотреть параметры пула;
  • set - установить значение переменной;
  • history - отобразить историю команд zfs;
  • import - импортировать пул;
  • iostat - отобразить статистику ввода/вывода для выбранного пула zfs;
  • list - вывести список всех пулов;
  • offline/online - выключить/включить физическое устройство, данные на нем сохраняются, но их нельзя прочитать или изменить;
  • remove - удалить устройство из пула;
  • replace - перенести все данные со старого устройства не новое;
  • scrub - проверка контрольных сумм для всех данных;
  • status - вывести статус пула.

Это были все основные опции команды, которые мы будем использовать. Теперь рассмотрим примеры настройки zfs и управления разделами.

Как пользоваться ZFS

Настройка ZFS не очень сильно отличается от Btrfs, все базовые действия выполняются очень просто, вы сами в этом убедитесь.

Создание файловой системы

Сначала посмотрим есть ли уже созданные пулы ZFS. Для этого выполните такую команду:

Если вы устанавливаете эту файловую систему в первый раз, то здесь будет пустой список. Теперь создадим пул на основе существующего раздела, мы будем использовать раздел /dev/sda6

sudo zpool create -f pool0 /dev/sda6

Хотя вы можете использовать не только раздел, а целый диск. Теперь смотрим еще раз список пулов:

Затем смотрим состояние нашего пула с помощью команды status, здесь выводится больше подробной информации. Если у вас есть несколько дисков, вы можете настроить RAID массив, чтобы данные хранились не на одном разделе, а синхронно копировались на несколько, это может в несколько раз увеличить производительность.

sudo zpool create pool0 zraid /dev/sda /dev/sdb /dev/sdc

Обратите внимание, что диски должны иметь одинаковый раздел. Если вам не нужен RAID, вы можете настроить обычное зеркалирование на второй диск. Это увеличивает надежность хранения данных:

sudo zpool create pool0 mirror sda sdb

Теперь данные будут писаться на оба диска. Такую же вещь можно проделать с разделами, но здесь нет смысла, поскольку если жесткий диск накроется, то данные вы потеряете, а прироста производительности не увидите. Вы можете использовать даже файлы, для создания файловых систем.

Вы можете добавить новый жесткий диск или раздел к пулу:

sudo zpool attach pool0 /dev/sdd

Или удалить устройство из пула:

sudo zpool detach pool0 /dev/sdd

Чтобы удалить пул используйте команду destroy:

sudo zpool destroy pool0

Для проверки раздела на ошибки используйте команду scrub:

sudo zpool scrub pool0

Статистику использования пула можно посмотреть с помощью команды iostat:

sudo zpool iostat pool0

Файловые системы ZFS

Теперь нужно создать файловые системы на только что созданном пуле. Создадим три файловые системы, data, files и media. Для этого используется команда zfs:

sudo zfs create pool0/data
$ sudo zfs create pool0/files
$ sudo zfs create pool0/media

Монтирование ZFS

Точка монтирования для пула и для каждой созданной в нем файловой системы создается в корневом каталоге. Например, в нашем случае точки монтирования выглядят так:

Или можно использовать такую команду:

Чтобы размонтировать файловую систему для одного из созданных разделов используйте команду zfs umount:

sudo zfs umount /pool0/data

Затем можно ее обратно примонтировать:

sudo zfs mount pool0/data

Параметры файловой системы

Кроме всего прочего, вы можете настроить различные параметры файловой системы ZFS, например, можно изменить точку монтирования или способ сжатия. Вы можете посмотреть все текущие параметры для файловой системы или пула с помощью команды:

sudo zfs get all pool0/files

Сначала включим сжатие:

sudo zfs set compression=gzip pool0/files

Затем отключим проверку контрольных сумм:

sudo zfs set checksum=off pool0/files

Смотрим точку монтирования:

sudo zfs get mountpoint pool0/files

Затем установим свою:

sudo zfs set mountpoint=/mnt pool0/files

Теперь раздел будет монтироваться в /mnt, настройки можно изменить для каждого из разделов.

Снимки состояния ZFS

Снапшоты zfs или снимки состояния могут использоваться восстановления данных. Благодаря особенностям файловой системы снимки можно создавать мгновенно. Для создания снимка просто наберите:

sudo zfs snapshot pool0/files pool0/files@shot1

Для восстановления используйте:

sudo zfs rollback pool0/files@shot1

Посмотреть список снимков вы можете командой:

sudo zfs list -t snapshot

А удалить ненужный снимок:

sudo zfs destory pool0/files@shot1

Выводы

В этой статье мы рассмотрели как работает файловая система zfs, как выполняется настройка zfs и как ее использовать. Это очень перспективная файловая система, с огромным набором функций, которая способна сравняться, а в некоторых областях и обойти Btrfs. Надеюсь, эта информация была полезной для вас, если у вас остались вопросы, спрашивайте в комментариях!

ZFS должна быть классной, но меня немного бесит, что она словно застряла в прошлом - даже до того, как её признали крутой и лучшей файловой системой. Она негибкая, ей не хватает современной интеграции с флеш-памятью и она не поддерживается напрямую большинством операционных систем. Но я храню все свои ценные данные на ZFS, поскольку именно она обеспечивает наилучший уровень защиты для условий SOHO (малый офис/домашний офис). И вот почему.

Первая директива систем хранения: не возвращать неправильные данные!

Революция ZFS. Около 2006 года

С 2007 по 2010-й: ZFS пошла под откос

Но что-то ужасное случилось с ZFS на пути к её триумфу: судебные иски, проблемы с лицензиями и FUD - тактика психологической манипуляции от недоброжелателей.

Первые тучи появились в 2007 году, когда NetApp подала иск к Sun на основании того, что ZFS нарушает их патенты на WAFL. Sun ответила встречным иском в том же году - и юридические тяжбы затянулись. Хотя в ZFS определённо не было кода NetApp, но механизм копирования при записи в снапшоты был похож на WAFL, и некоторые из нас в индустрии обеспокоились, что иск NetApp повлияет на доступность открытых исходников ZFS. Этих рисков оказалось достаточно для Apple, чтобы отказаться от поддержки ZFS в Mac OS X 10.6 “Snow Leopard” прямо перед выпуском этой ОС.

Вот отличный блог о ZFS и Apple от Адама Левенталя, который работал над этим проектом в компании: ZFS: Apple’s New Filesystem That Wasn’t

Тогда Sun переживала трудные времена, и Oracle воспользовалась моментом для покупки компании. Это посеяло новые сомнения о будущем ZFS, поскольку Oracle известна как не большой любитель широкой общественной поддержки свободных проектов. А лицензия CDDL, которую Oracle применила к коду ZFS, признана несовместимой с GPLv2, которая используется в Linux, что делает невозможным использование ZFS в самой популярной в мире ОС для серверов.

Хотя проект OpenSolaris продолжился и после приобретения Oracle, а ZFS включили во FreeBSD, но это было в значительной степени за пределами корпоративного сектора. Конечно, NexentaStor и GreenBytes помогли продвинуть ZFS в корпоративном секторе, но недостаток поддержки серверов Sun со стороны Oracle тоже начал влиять на ситуацию.

Какие проблемы у ZFS сейчас?

OpenZFS практически не отличается от той файловой системы, что была десять лет назад.

Многие продолжают скептически относиться к дедупликации, которая требует много дорогой памяти. И я действительно имею в виду дорогой: практически каждый ZFS FAQ однозначно требует наличия памяти только ECC и минимум 8 ГБ. По моему собственному опыту с FreeNAS, для активного маленького сервера с ZFS подойдёт 32 ГБ, а это стоит $200-300 даже по сегодняшним ценам.

И ZFS так и по-настоящему не приспособился к флеш-памяти, которая сейчас используется повсеместно. Хотя флеш можно использовать для кэшей ZIL и L2ARC, это сомнительное преимущество для систем с достаточным количеством RAM, и у ZFS нет настоящей функции гибридного хранилища данных. Смехотворно, что в документации ZFS повсеместно упоминаются несколько гигабайт флеш-памяти SLC, когда на рынке уже есть многотерабайтные диски 3D NAND. И никто не говорит о NVMe, хотя это стандарт для высокопроизводительых ПК.

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

  • Заменить абсолютно все диски в пуле на диски большей ёмкости (что классно, но дорого).
  • Создать дисковую последовательность с другим набором дисков (что может привести к несбалансированной производительности, избыточности и куче других потенциально глупых ошибок).
  • Построить новый пул и перенести туда наборы данных командой zfs send (так поступаю я, хотя тут свои хитрости).

Кроме третьего способа, у вас нет возможности уменьшить пул ZFS. Хуже того, вы не можете изменить тип защиты данных без пересборки всего пула, в том числе добавить второй и третий диски чётности. FreeNAS добросовестно тратит огромное количество времени, пытаясь отговорить новичков от использования RAID-Z1 , и жалуется, если они всё равно выбирают такую схему.

Всё это может показаться мелкими, незначительными придирками, но в совокупности они субъективно отправляют ZFS в средние века, после использования Drobo, Synology или современных облачных систем хранения. С ZFS вам нужно «купить диски, много памяти, создать RAID-массив и никогда его больше трогать», что не совсем соответствует современному использованию систем хранения .

Какие варианты?

Наверное, я представил ZFS не совсем в выгодном свете. Когда-то она была революционной, но сейчас начинает проявлять ограничения и выпадать из контекста современного мира с флеш-хранением данных. Так есть ли альтернативы?

В Linux несколько приличных диспетчеров томов и файловых систем, а большинство используют LVM или MD и ext4. Спецов по файловым системам очень порадовала Btrfs, которая сочетает в себе функции диспетчера томов и файловой системы в стиле ZFS, но с дополнительной гибкостью за пределами того, на чём шлёпнулась ReiserFS. И Btrfs действительно могла бы стать «ZFS для Linux», но не так давно разработка споткнулась, после ужасного прошлогоднего бага с потерей данных с рейдах RAID 5 и 6, и больше о них почти ничего не слышно. Но я по-прежнему думаю, что через пять лет буду рекомендовать пользователям Linux использовать Btrfs, особенно с её мощным потенциалом для применения в контейнерах .

Для Windows компания Microsoft тоже собирается выкатить собственную файловую систему нового поколения ReFS с использованием деревьев B+ (похоже на Btrfs), с сумасшедшим масштабированием и функциями стойкости и защиты данных . В сочетании со Storage Spaces, у Microsoft будет жизнеспособная система хранения следующего поколения для Windows Server, которая может даже использовать SSD и 3D-XPoint как уровень или кэш.

И есть ещё Apple, которая по слухам несколько раз меняла систему хранения, до того как остановиться на APFS , которая вышла в этом году в macOS High Sierra. APFS во многом похожа на Btrfs и ReFS, хотя реализована совершенно иначе, с большей ориентацией на пользователя. Уступая в некоторых сферах (пользовательские данные не проверяются контрольной суммой и не поддерживается сжатие), APFS - именно та система, которая нужна для iOS и macOS. И APFS - это последний гвоздь в гроб идеи «ZFS на Mac OS X».

В каждой из трёх основных ОС теперь есть файловая система нового поколения (и диспетчер томов). В Linux есть Btrfs, в Windows - ReFS и Storage Spaces, а в macOS есть APFS. FreeBSD вроде бы сохранила приверженность ZFS, но это незначительная часть рынка. И каждая система корпоративного уровня уже продвинулась намного дальше того, что может делать ZFS и системы корпоративного уровня на базе ZFS от Sun, Nexenta и iXsystems.

Но ZFS по-прежнему намного превосходит старые файловые системы для домашнего пользователя. Из-за отсутствия проверки целостности, избыточности и восстановления после ошибок NTFS (Windows), HFS+ (macOS) и ext3/4 (Linux) абсолютно не подходят для долговременного хранения данных. И даже ReFS и APFS из-за отсутствия проверки целостности не подходят там, где потеря данных неприемлема.

Позиция автора: используйте ZFS (пока)

Грустно это признавать, но на 2017 год ZFS - лучшая файловая система для долговременного широкомасштабного хранения данных. Хотя иногда и сложно с ней работать (кроме FreeBSD, Solaris и специализированных устройств), но надёжность и проверенность делают ZFS единственным заслуживающим доверия инструментом для хранения данных за пределами корпоративных систем хранения. В конце концов, надёжное хранение данных - это единственное, что действительно должна делать файловая система