Перейти к содержимому

Справочная информация по ZFS

Поддержка ZFS была добавлена в Ubuntu 15.10 Wily как предварительный анонс технологии, а затем стала полностью поддерживаемой в Ubuntu 16.04 Xenial. Обратите внимание, что ZFS поддерживается только 64-битными архитектурами.

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

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

Виртуальные устройства ZFS (ZFS VDEV)

VDEV — это мета-устройство, которое представляет собой одно или несколько устройств. ZFS поддерживает 7 различных типов VDEV: * Файл — предварительно размеченный файл * Физическое устройство (HDD, SDD, PCIe NVME и т.д.) * Зеркало — стандартное зеркало RAID1 * Программные массивы ZFS raidz1, raidz2, raidz3 — «распределенные» массивы RAID с выделенным диском четности * Горячий резерв (Hot Spare) — горячий резерв для программного RAID-массива ZFS * Кэш — устройство для кэша чтения второго уровня (ZFS L2ARC) * Журнал — журнал регистрации намерений ZFS (ZFS ZIL)

VDEV динамически чередуются в ZFS. Устройство может быть добавлено в VDEV, но не может быть удалено из него.

Пулы ZFS

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

В следующем примере создается пул «pool-test» из трех физических устройств:

Чередование производится динамически, поэтому создается RAID-0 пул с нулевой избыточностью.

Примечание: если вы управляете множеством устройств, то можете их легко спутать, и, возможно, предпочтете имена /dev/disk/by-id/, которые часто используют серийные номера устройств. Приведенные здесь примеры не означают, что стоит использовать имена «sd_», они просто облегчают чтение.

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

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

Пример зеркального zpool размером 2 x 2

В следующем примере мы создадим zpool, содержащий VDEV из двух зеркальных устройств:

Далее мы добавим в пул еще один VDEV из двух зеркальных устройств:

В это примере:

  • /dev/sdc, /dev/sdd, /dev/sde, /dev/sdf — физические устройства
  • mirror-0, mirror-1 — VDEV’ы
  • mypool — имя пула

Есть множество вариантов организации VDEV’ов в zpool.

Пример zpool на базе единственного файла

В следующем примеры мы используем один двухгигабайтный файл как VDEV и создадим zpool из него одного:

В этом примере: * /home/user/example.img — VDEV на базе файла * pool-test — имя пула

RAID

ZFS предлагает различные варианты RAID:

VDEV’ы с чередованием

Эквивалент RAID0, без выделенного диска четности и без зеркалирования для пересборки данных. Не рекомендуется из-за риска потери данных при отказе устройства. Пример создания пула с чередованием из четырех VDEV’ов:

Зеркалированные VDEV’ы

Как и в RAID1, можно использовать 2 и более VDEV’ов. Для N VDEV’ов из строя может выйти N-1 прежде, чем будут утрачены данные. Пример создания зеркального пула из двух VDEV’ов:

Зеркальные VDEV’ы с чередованием

Как и RAID10 хорошо подходит для операций случайного чтения небольшими блоками. Создаются зеркальные пары, а затем данные записываются с чередованием поверх зеркальных копий. Пример создания зеркального пула размером 2 x 2:

или

RAIDZ

Как и RAID5, использует динамически изменяемый размер страйпа для блоков четности. Позволяет получить наибольший доступный объем от устройств, с контролем четности, но за счет некоторого снижения производительности. Допускается выход из строя одного диска без потери данных. Пример создания RAIDZ из четырех VDEV’ов:

RAIDZ2

Как и RAID6, с двумя контрольными суммами и сохранностью данных при выходе из строя двух устройств, при производительности близкой к RAIDZ. Пример создания пула с двойной четностью из пяти VDEV’ов:

RAIDZ3

При тройной четности допускается выход трех устройств из строя без потери данных, с производительностью на уровне RAIDZ2 и RAIDZ. Пример создания пула с тройной четностью из шести VDEV’ов:

Вложенный RAIDZ

Как RAID50 и RAID60 — это тома RAIDZ с чередованием. Показывает большую производительность, чем RAIDZ, но за счет снижения доступного объема. Пример 2 x RAIDZ:

Журнал регистрации намерений ZFS

Устройства ZIL (журнал регистрации намерений ZFS) могут быть добавлены в пул ZFS для ускорения записи при любом уровне ZFS RAID. Обычно для ZIL используется быстрый SSD. Теоретически, ZIL — это журнал, в который данные и метаданные заносятся перед тем как будут сброшены на диск транзакционной записью. Для ZIL можно использовать одни или несколько устройств.

К примеру, для добавления двух SSD в пул «mypool», используйте команду:

Кэширующие устройства ZFS

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

К примеру, для добавления кэширующего устройства в пул «mypool» используйте команду:

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

ZFS позволяет создать в пуле до 2^64 файлов систем. В следующем примере мы создадим две файловые системы в пуле «mypool»:

Для удаления файловой системы можно использовать команду:

Каждой файловой системе ZFS можно настроить отдельные параметры, например, установить квоту в размере 10 гигабайт:

Или добавить сжатие:

Моментальные снимки (снапшоты) ZFS

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

В следующем примере мы создадим снапшот файловой системы mypool/projects:

Мы можем посмотреть список снапшотов:

Давайте теперь «случайно» удалим все файлы, а затем выполним откат:

Удалить снапшот можно так:

Клоны ZFS

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

К примеру, для клонирования mypool/projects сначала создадим снапшот, а потом склонируем:

Передача и получение ZFS

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

Для примера, создадим снапшот и сохраним его в файл:

И вернем его обратно:

Репликация метаданных ZFS

При репликации метаданных создается больше избыточных копий метаданных, просто для повышения избыточности. В пуле с хранилищем из единственного устройства, реплицируемые метаданные распределяются по всему устройству, пытаясь поместить блоки хотя бы на 1/8 части диска. При наличии нескольких устройств в пуле, ZFS пытается распределить блоки с метаданными по отдельным VDEV’ам. Можно настроить от одной до трех копий. Для примера, настроим 3 копии в mypool/projects:

Дедупликация ZFS

ZFS dedup уберет блоки, которые идентичны существующим блокам, и вместо них будет использовать ссылку на существующий блок. Это освобождает место на устройстве, но за счет больших объемов оперативной памяти. Таблица дедупликации «in-memory» использует примерно по 320 байт на блок. Чем больше размер таблицы, тем медленнее становится запись.

Для примера, включим дедупликацию на mypool/projects:

Явная очистка данных в пуле ZFS

Для инициирования принудительной проверки целостности пула используется команда zfs scrub. Пример вызова явной очистки данных пула «mypool»:

Для проверки состояния явной очистки можно использовать zpool status:

Восстановление данных, простой пример

Представим, что у нас есть зеркальный zpool размером 2 x 2:

Теперь заполним его некоторыми данными и подсчитаем их контрольную сумму:

Теперь мы можем симулировать масштабную потерю данных путем заполнения одного из устройств VDEV нулями:

А сейчас инициируем явную очистку данных:

Проверим статус:

Далее, давайте удалим устройство из пула:

Выполним горячее извлечение и добавим новое:

Инициируем явную очистку для восстановления зеркала 2 x 2:

Сжатие данных ZFS

Как уже упоминалось ранее, ZFS позволяет автоматически сжимать данные. Учитывая мощность современных процессоров, это — полезная опция, так как уменьшенный размер данных означает, что меньше данных будут физически прочитаны и записаны, из чего следует более быстрые операции ввода/вывода. ZFS предоставляет широкий набор методов сжатия. По умолчанию используется lz4 (высокопроизводительная замена для lzjb), что дает более быстрые сжатие и распаковку по сравнению с lzjb при несколько большей степени сжатия. Для смены уровня компрессии можно использовать команду:

Или даже можно сменить тип сжатия:

Просмотр уровеня компрессии:

Самый безопасный выбор — это lz4, так как он значительно быстрее всех остальных вариантов при хорошей производительности.

Опубликовано вLinux

Ваш комментарий будет первым

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

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