zfs linux что это

zfsonlinux — легко и просто

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

У пользователей Linux с некоторых пор появилась возможность использовать ZFS не прибегая к FUSE, т.е. в ядре.

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

Помимо прочего, код ZFS не может быть включен в дерево исходных кодов ядра Linux, как уже многие знают, из-за несовместимости лицензии CDDL с GPL, а это очень сильно повлияло на проникновение ZFS на Linux-системы.

Но с недавних пор развитие проекта zfsonlinux, разработчики которого портировали код ZFS из Solaris в виде модулей ядра для Linux, достигло такой точки развития, при которой можно использовать ZFS в Linux без особых усилий и с достаточным уровнем стабильности.

Как именно воспользоваться zfsonlinux (на примере rhel/centos/scientific linux 6) можно узнать в статье далее.

Немного слов о.

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

Судя по моему опыту и по спискам рассылки (люди там пишут, что используют ZFS и всё работает без проблем) zfsonlinux не падает и не ломает всё, а работает как этого и ожидали начавшие его использовать.

Для ознакомления с проектом zfsonlinux (или как его ещё называют в списках рассылки — zol) рекомендуется изучить материалы сайта zfsonlinux.org и материалы по ZFS, которых в изобилии хватает в google.

После рассмотрения сайта проекта можно заключить о следующем:
— zfsonlinux серьёзно нацелен на использование совместно с файловой системой Lustre;
— в материалах сайта упоминается LLNL;
— whois домена zfsonlinux.org тоже ссылается на эту национальную лабораторию США;
— проектом занимаются для серьёзных целей серьёзные люди (не шантрапа какая-то 🙂 ).

На момент написания статьи тарболлы проекта zfsonlinux имеют версию 0.6.0-rc11 и они были опубликованы 17-го сентября 2012 года.

Для использования ZFS потребуются пакеты zfs-modules-dkms-0.6.0-rc11.noarch и spl-modules-dkms-0.6.0-rc11.noarch, которые содержат исходные коды модулей ZFS и SPL (Solaris Porting Layer). Данные модули будут автоматически собраны и установлены с помощью системы DKMS.

Так же потребуются собранные под архитектуру x86_64 пакеты zfs-0.6.0-rc11.src.rpm и spl-0.6.0-rc11.src.rpm, которые содержат userspace-утилиты для работы с ZFS (zfs, zpool) и другие компоненты, необходимые в пространстве пользователя (udev-правила, например). К сожалению разработчики проекта не предоставляют бинарных сборок данных пакетов, поэтому при необходимости следует вооружиться rpmbuild/mock и собрать пакеты самостоятельно (что я и сделал — см. далее).

Быстро и просто

Для быстрого развёртывания сервера с ZFS под мои нужды я сделал yum-репозиторий, который содержит все необходимые пакеты.

Итак, чтобы получить сервер с ZFS в дистрибутивах RHEL / CentOS / Scientific Linux (речь только о 6-й версии (!)), необходимо выполнить следующее.

Установить репозиторий и импортировать мой публичный GPG-ключ, которым подписаны пакеты:

Зайти на страницу проекта EPEL и взять оттуда ссылку на пакет epel-release последней версии, затем установить этот пакет:

Установить DKMS и необходимые для сборки модулей ядра пакеты:

Наконец, установить пакеты zfs и spl, которые в зависимостях требуют установки пакетов zfs-modules-dkms и spl-modules-dkms (установка займёт 5-10 минут (конечно, зависит от мощности сервера), т.к. при установке будут скомпилированы модули):

Включить сервис zfs, который подгружает модули и монтирует все ZFS-партиции (по умолчанию этот сервис и так в состоянии автоматического запуска, но если вдруг что-то изменится, то этот шаг не будет пропущен):

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

Теперь можно создать первый пул:

Пул tank будет автоматически смонтирован в каталог /tank.

ZFS готова к использованию!

ZFS vs. BTRFS

В действительности под мои задачи «сполна» (вроде как 🙂 ) подходит и BTRFS:
— есть компрессия;
— поддержка raid1 (впоследствии потребовались функции raidz из ZFS);
— наличие в el6 (technology preview).

Но:
— BTRFS нестабильна и всё ещё не признана стабильной в mainline kernel (мои опыты примерно год назад на el6 исключили возможность применения данной файловой системы для моих задач — в основном одни баги и глюки);
— в BTRFS всё ещё нет дедупликации;
— в BTRFS нет поддержки ничего, кроме mirror, stripe, stripe + mirror;
— ZFS считается в Solaris стабильной достаточно давно;
— ZFS выглядит более зрело (субъективно, пожалуй), даже несмотря на то, что zfsonlinux — это порт с его потенциальными проблемами и нюансами.

Источник

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

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

Что такое ZFS?

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

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

Установка ZFS

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

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

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

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

Команда zpool

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

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

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

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

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

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

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

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

Затем смотрим состояние нашего пула с помощью команды 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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

sudo zpool iostat pool0

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

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

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

Файловые системы готовы, дальше рассмотрим монтирование zfs.

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

sudo zfs umount /pool0/data

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

sudo zfs mount pool0/data

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

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

sudo zfs get all pool0/files

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

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

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

sudo zfs snapshot pool0/files pool0/files@shot1

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

sudo zfs rollback pool0/files@shot1

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

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

sudo zfs destory pool0/files@shot1

Выводы

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

Источник

ZFS — лучшая файловая система (пока)

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

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

В своих статьях о FreeNAS я настойчиво повторял, что «ZFS — самая лучшая файловая система», но если вы посмотрите мои сообщения в социальных медиа, то станет ясно, что мне она на самом деле не совсем нравится. Я пришёл к выводу, что такое противоречие требует объяснения и контекста, так что рискнём потревожить фанатов ZFS и сделаем это.

Когда ZFS впервые появилась в 2005 году, она была абсолютно своевременной, но она застряла там до сих пор. Разработчики ZFS сделали много правильных вещей, объединив лучшие функции диспетчера томов с файловой системой «зеттабайтного масштаба» в Solaris 10:

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

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

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

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

И есть ещё 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 единственным заслуживающим доверия инструментом для хранения данных за пределами корпоративных систем хранения. В конце концов, надёжное хранение данных — это единственное, что действительно должна делать файловая система. Все мои важные данные сразу идут в ZFS, от фотографий до музыки, от фильмов до офисных файлов. Ещё нескоро я доверюсь чему-нибудь кроме ZFS!

Источник

Основы ZFS: система хранения и производительность

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это

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

Ну что ж, сегодня самый подходящий день для знакомства с ZFS, любознательные читатели. Просто знайте, что по скромной оценке разработчика OpenZFS Мэтта Аренса, «это действительно сложно».

Но прежде чем мы доберемся до цифр — а они будут, обещаю — по всем вариантам восьмидисковой конфигурации ZFS, нужно поговорить о том, как вообще ZFS хранит данные на диске.

Zpool, vdev и device

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Эта диаграмма полного пула включает в себя три вспомогательных vdev’а, по одному каждого класса, и четыре для RAIDz2

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Обычно нет причин создавать пул из несоответствующих типов и размеров vdev — но если хотите, ничто не мешает вам это сделать

Чтобы действительно понять файловую систему ZFS, нужно внимательно посмотреть на её фактическую структуру. Во-первых, ZFS объединяет традиционные уровни управления томами и файловой системы. Во-вторых, она использует транзакционный механизм копирования при записи. Эти особенности означают, что система структурно очень отличается от обычных файловых систем и RAID-массивов. Первый набор основных строительных блоков для понимания: это пул хранения (zpool), виртуальное устройство (vdev) и реальное устройство (device).

zpool

Пул хранения zpool — самая верхняя структура ZFS. Каждый пул содержит одно или несколько виртуальных устройств. В свою очередь, каждое из них содержит одно или несколько реальных устройств (device). Виртуальные пулы — это автономные блоки. Один физический компьютер может содержать два или более отдельных пула, но каждый полностью независим от других. Пулы не могут совместно использовать виртуальные устройства.

Избыточность ZFS находится на уровне виртуальных устройств, а не на уровне пулов. На уровне пулов нет абсолютно никакой избыточности — если какой-либо накопитель vdev или специальный vdev теряется, то вместе с ним теряется и весь пул.

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

Есть распространённое заблуждение, что «полосы данных» (страйпы) ZFS записываются через весь пул. Это неверно. Zpool — вовсе не забавный RAID0, это скорее забавный JBOD со сложным изменчивым механизмом распределения.

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

Механизм определения утилизации, встроенный в современные методы распределения записи ZFS, может уменьшить задержку и увеличить пропускную способность в периоды необычно высокой нагрузки — но это не карт-бланш на невольное смешивание медленных HDD и быстрых SSD в одном пуле. Такой неравноценный пул всё равно будет работать со скоростью самого медленного устройства, то есть как будто он целиком составлен из таких устройств.

Каждый пул хранения состоит из одного или нескольких виртуальных устройств (virtual device, vdev). В свою очередь, каждый vdev включает одно или несколько реальных устройств. Большинство виртуальных устройств используются для простого хранения данных, но существует несколько вспомогательных классов vdev, включая CACHE, LOG и SPECIAL. Каждый из этих типов vdev может иметь одну из пяти топологий: единое устройство (single-device), RAIDz1, RAIDz2, RAIDz3 или зеркало (mirror).

RAIDz1, RAIDz2 и RAIDz3 — это особые разновидности того, что олды назовут RAID двойной (диагональной) чётности. 1, 2 и 3 относятся к тому, сколько блоков чётности выделено для каждой полосы данных. Вместо отдельных дисков для обеспечения чётности виртуальные устройства RAIDz полуравномерно распределяют эту чётность по дискам. Массив RAIDz может потерять столько дисков, сколько у него блоков чётности; если он потеряет ещё один, то выйдет из строя и заберет с собой пул хранения.

В зеркальных виртуальных устройствах (mirror vdev) каждый блок хранится на каждом устройстве в vdev. Хотя наиболее распространённые двойные зеркала (two-wide), в зеркале может быть любое произвольное количество устройств — в больших установках для повышения производительности чтения и отказоустойчивости часто используются тройные. Зеркало vdev может пережить любой сбой, пока продолжает работать хотя бы одно устройство в vdev.

Одиночные vdev по своей сути опасны. Такое виртуальное устройство не переживёт ни одного сбоя — и если используется в качестве хранилища или специального vdev, то его сбой приведёт к уничтожению всего пула. Будьте здесь очень, очень осторожны.

Виртуальные устройства CACHE, LOG и SPECIAL могут быть созданы по любой из вышеперечисленных топологий — но помните, что потеря виртуального устройства SPECIAL означает потерю пула, поэтому настоятельно рекомендуется избыточная топология.

device

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

Диски — магнитные или твёрдотельные — являются наиболее распространёнными блочными устройствами, которые используются в качестве строительных блоков vdev. Однако подойдёт любой девайс с дескриптором в /dev — так что в качестве отдельных устройств можно использовать целые аппаратные RAID-массивы.

Простой raw-файл является одним из самых важных альтернативных блочных устройств, из которых может быть построен vdev. Тестовые пулы из разреженных файлов — очень удобный способ проверять команды пула и смотреть, сколько места доступно в пуле или виртуальном устройстве данной топологии.

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Можете создать тестовый пул из разреженных файлов всего за несколько секунд — но не забудьте потом удалить весь пул и его компоненты

Допустим, вы хотите поставить сервер на восемь дисков и планируете использовать диски по 10 ТБ (

9300 ГиБ) — но вы не уверены, какая топология лучше всего соответствует вашим потребностям. В приведённом выше примере мы за считанные секунды строим тестовый пул из разреженных файлов — и теперь знаем, что RAIDz2 vdev из восьми дисков по 10 ТБ обеспечивает 50 ТиБ полезной ёмкости.

Ещё один особый класс устройств — SPARE (запасные). Устройства горячей замены, в отличие от обычных устройств, принадлежат всему пулу, а не одному виртуальному устройству. Если какой-то vdev в пуле выходит из строя, а запасное устройство подключено к пулу и доступно, то оно автоматически присоединится к пострадавшему vdev.

После подключения к пострадавшему vdev запасной девайс начинает получать копии или реконструкции данных, которые должны быть на отсутствующем устройстве. В традиционном RAID это называется восстановлением (rebuilding), а в ZFS это «восстановление избыточности» (resilvering).

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

Наборы данных, блоки и секторы

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

Набор данных (dataset)

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Когда мы впервые создаём набор данных, он показывает всё доступное пространство пула. Затем мы устанавливаем квоту — и меняем точку монтирования. Магия!

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Zvol — это по большей части просто набор данных, лишённый своего слоя файловой системы, который мы заменяем здесь совершенно нормальной файловой системой ext4

Набор данных ZFS примерно аналогичен стандартной смонтированной файловой системе. Как и обычная файловая система, на первый взгляд он кажется «просто ещё одной папкой». Но также, как и у обычных монтируемых файловых систем, у каждого набора данных ZFS собственный набор базовых свойств.

Блоки

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Файл представлен одним или несколькими блоками. Каждый блок хранится на одном виртуальном устройстве. Размер блока обычно равен параметру recordsize, но может быть уменьшен до 2^ashift, если содержит метаданные или небольшой файл.

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Мы действительно, действительно не шутим по поводу огромного ущерба производительности, если установить слишком маленький ashift

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

Если не определено иное, то текущий размер записи по умолчанию равен 128 КиБ. Это своего рода непростой компромисс, в котором производительность будет не идеальной, но и не ужасной в большинстве случаев. Recordsize можно установить на любое значение от 4K до 1M (с дополнительными настройками recordsize можно установить ещё больше, но это редко бывает хорошей идеей).

Любой блок ссылается на данные только одного файла — вы не можете втиснуть два разных файла в один блок. Каждый файл состоит из одного или нескольких блоков, в зависимости от размера. Если размер файла меньше размера записи, он сохранится в блоке меньшего размера — например, блок с файлом 2 КиБ займёт только один сектор 4 КиБ на диске.

Если файл достаточно велик и требует несколько блоков, то все записи с этим файлом будут иметь размер recordsize — включая последнюю запись, основная часть которой может оказаться неиспользуемым пространством.

Секторы

Последний, самый базовый строительный блок — сектор. Это наименьшая физическая единица, которая может быть записана или считана с базового устройства. В течение нескольких десятилетий в большинстве дисков использовались секторы по 512 байт. В последнее время большинство дисков настроено на сектора 4 КиБ, а в некоторых — особенно SSD — сектора 8 КиБ или даже больше.

ZFS запрашивает у операционной системы подробную информацию о каждом блочном устройстве, когда оно добавляется в новый vdev, и теоретически автоматически устанавливает ashift должным образом на основе этой информации. К сожалению, многие диски лгут о своём размере сектора, чтобы сохранить совместимость с Windows XP (которая была неспособна понять диски с другими размерами секторов).

Механизм копирования при записи

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Если обычной файловой системе нужно перезаписать данные — она изменяет каждый блок там, где он находится

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Файловая система с копированием при записи записывает новую версию блока, а затем разблокирует старую версию

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
В абстрактном виде, если игнорировать реальное физическое расположение блоков, то наша «комета данных» упрощается до «червя данных», который перемещается слева направо по карте доступного пространства

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Теперь мы можем получить хорошее представление, как работают снапшоты копирования при записи — каждый блок может принадлежать нескольким снапшотам, и сохранится до тех пор, пока не будут уничтожены все связанные снапшоты

Механизм копирования при записи (Copy on Write, CoW) — фундаментальная основа того, что делает ZFS настолько потрясающей системой. Основная концепция проста — если вы попросите традиционную файловую систему изменить файл, она сделает именно то, что вы просили. Если вы попросите файловую систему с копированием при записи сделать то же самое, она скажет «хорошо» — но соврёт вам.

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

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

Копирование при записи в ZFS происходит не только на уровне файловой системы, но и на уровне управления дисками. Это означает, что ZFS не подвержена пробелу в записи (дыре в RAID) — феномену, когда полоса успела только частично записаться до сбоя системы, с повреждением массива после перезагрузки. Здесь полоса пишется атомарно, vdev всегда последователен, и Боб — твой дядя.

ZIL: журнал намерений ZFS

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Система ZFS обрабатывает синхронные записи особым образом — она временно, но немедленно сохраняет их в ZIL, прежде чем позже записать их на постоянной основе вместе с асинхронными записями

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Обычно данные, записанные на ZIL, больше никогда не считываются. Но это возможно после сбоя системы

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
SLOG, или вторичное LOG-устройство, — это просто специальный — и, желательно, очень быстрый — vdev, где ZIL может храниться отдельно от основного хранилища

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
После сбоя все грязные данные в ZIL воспроизводятся — в данном случае ZIL находится на SLOG, так что они воспроизводятся именно оттуда

Существует две основные категории операций записи — синхронные (sync) и асинхронные (async). Для большинства рабочих нагрузок подавляющее большинство операций записи являются асинхронными — файловая система позволяет агрегировать их и выдавать пакетами, уменьшая фрагментацию и значительно увеличивая пропускную способность.

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

ZFS обрабатывает синхронные записи иначе, чем обычные файловые системы — вместо того, чтобы немедленно заливать их в обычное хранилище, ZFS фиксирует их в специальной области хранения, которая называется журнал намерений ZFS — ZFS Intent Log, или ZIL. Хитрость в том, что эти записи также остаются в памяти, будучи агрегированными вместе с обычными асинхронными запросами на запись, чтобы позже быть сброшенными в хранилище как совершенно нормальные TXG (группы транзакций, Transaction Groups).

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

Если происходит сбой ZFS — сбой операционной системы или отключение питания — когда в ZIL есть данные, эти данные будут считаны во время следующего импорта пула (например, при перезапуске аварийной системы). Всё, что находится в ZIL, будет считано, объединено в группы TXG, зафиксировано в основном хранилище, а затем отсоединено от ZIL в процессе импорта.

Один из вспомогательных классов vdev называется LOG или SLOG, вторичное устройство LOG. У него одна задача — обеспечить пул отдельным и, желательно, гораздо более быстрым, с очень высокой устойчивостью к записи, устройством vdev для хранения ZIL, вместо хранения ZIL на главном хранилище vdev. Сам ZIL ведёт себя одинаково независимо от места хранения, но если у vdev с LOG очень высокая производительность записи, то синхронные записи будут происходить быстрее.

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

Снапшоты

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

Когда в активной файловой системе перезаписывается запись, ZFS сначала записывает новую версию блока в неиспользуемое пространство. Затем отсоединяет старую версию блока от текущей файловой системы. Но если какой-то снапшот ссылается на старый блок, он всё равно остается неизменным. Старый блок фактически не будет восстановлен как свободное пространство, пока все снапшоты, ссылающиеся на этот блок, не будут уничтожены!

Репликация

zfs linux что это. Смотреть фото zfs linux что это. Смотреть картинку zfs linux что это. Картинка про zfs linux что это. Фото zfs linux что это
Моя библиотека Steam в 2015 году занимала 158 ГиБ и включала 126 927 файлов. Это довольно близко к оптимальной ситуации для rsync — репликация ZFS по сети была «всего лишь» на 750% быстрее.

Как только вы поймёте, как работают снапшоты, будет несложно уловить суть репликации. Поскольку снапшот — это просто дерево указателей на записи, из этого следует, что если мы делаем zfs send снапшота, то мы отправляем и это дерево, и все связанные с ним записи. Когда мы передаём этот zfs send в zfs receive на целевой объект, он записывает как фактическое содержимое блока, так и дерево указателей, ссылающихся на блоки, в целевой набор данных.

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

Встроенное сжатие

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

Если рассмотреть фрагмент данных в середине файла, который начинает свою жизнь как мегабайт нулей от 0x00000000 и так далее — его очень легко сжать до одного сектора на диске. Но что произойдёт, если мы заменим этот мегабайт нулей на мегабайт несжимаемых данных, таких как JPEG или псевдослучайный шум? Неожиданно этому мегабайту данных потребуется не один, а 256 секторов по 4 КиБ, а в этом месте на диске зарезервирован только один сектор.

У ZFS нет такой проблемы, так как изменённые записи всегда записываются в неиспользуемое пространство — исходный блок занимает только один сектор 4 КиБ, а новая запись займёт 256, но это не проблема — недавно изменённый фрагмент из «середины» файла был бы записан в неиспользуемое пространство независимо от того, изменился его размер или нет, поэтому для ZFS это вполне штатная ситуация.

Встроенное сжатие ZFS отключено по умолчанию, и система предлагает подключаемые алгоритмы — сейчас среди них LZ4, gzip (1-9), LZJB и ZLE.

ARC — кэш адаптивной замены

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

Хотя собственный кэш не лишён своих проблем — ZFS не может реагировать на новые запросы о выделении памяти так же быстро, как ядро, поэтому новый вызов malloc() на распределение памяти может потерпеть неудачу, если ему потребуется оперативная память, занятая в настоящее время ARC. Но есть веские причины использовать собственный кэш, по крайней мере сейчас.

Все известные современные ОС, включая MacOS, Windows, Linux и BSD, для реализации кэша страниц используют алгоритм LRU (Least Recently Used). Это примитивный алгоритм, который поднимает кэшированный блок «вверх очереди» после каждого чтения и вытесняет блоки «вниз очереди» по мере необходимости, чтобы добавить новые промахи кэша (блоки, которые должны были быть прочитаны с диска, а не из кэша) вверх.

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

ARC — гораздо менее наивный алгоритм, который можно рассматривать как «взвешенный» кэш. После каждого считывании кэшированного блока он становится немного «тяжелее» и его становится труднее вытеснить — и даже после вытеснения блок отслеживается в течение определённого периода времени. Блок, который был вытеснен, но затем должен быть считан обратно в кэш, также станет «тяжелее».

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

Заключение

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

В следующей части мы рассмотрим фактическую производительность пулов с зеркальными vdev и RAIDz, друг по сравнению с другом, а также по сравнению с традиционными RAID-топологиями ядра Linux, которые мы исследовали ранее.

Сначала мы хотели рассмотреть только основы — сами топологии ZFS — но после такого будем готовы говорить о более продвинутой настройке и тюнинге ZFS, включая использование вспомогательных типов vdev, таких как L2ARC, SLOG и Special Allocation.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *