Zfs linux как использовать

Обновлено: 08.07.2024

Допускаете ли вы возможность того, что можете не сделать своевременно резервную копию важных файлов или папки и по какой-то роковой случайности можете их потерять? Возможна ли ошибочная команда «rm -rf» в вашей музыкальной библиотеке? Могут ли у вас быть повреждены основные системные файлы виртуальной машины? Люди не совершенны и все способны на ошибки, так что, чем скорее вы перейдете на ZFS, тем скорее сможете перестать беспокоиться о безвременной утрате драгоценных данных.

Установка и настройка ZFS в Linux очень проста для большинства дистрибутивов.

Arch или Manjaro linux

Более подробную информацию можно найти на Arch Wiki

Debian

В Debian начало использования ZFS происходит с добавления в файл /etc/apt/sources.list следующего репозитория:

Далее устанавливаем ZFS:

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

Ubuntu

Начиная с Xenial, Ubuntu включает в себя модуль ядра ZFS. Все, что вам следует сделать, это добавить пользовательские инструменты и перезагрузиться:

Fedora

Если верить ZFSOnLinux Wiki, то пользователи Fedora могут установить ZFS используя следующие простые команды:

Эти команды добавят ZoL репозиторий и установят ZFS.

Gentoo

Будучи source-based дистрибутивом, ZFS на Gentoo не требует DKMS. Чтобы установить его, сначала убедитесь, что у вашего ядра есть поддержка сжатия Deflate. В «make menuconfig» включите его:

Затем разрешите использовать git-версии ZFS, выполнив следующие команды с правами root:

После чего установите и активируйте ZFS:

Creating a ZFS “partition”

Теперь, когда вы установили поддержку файловой системы, вам нужно создать пул. Пулы могут быть очень сложными, охватывая многие диски и предлагая избыточность. Однако в этом примере будет использоваться один раздел без избыточности. Во-первых, требуется пустой раздел. ZFS в Linux можно использовать в качестве корневой файловой системы, но это не рекомендуется. Поэтому перераспределите другой диск, используя привычный вам инструмент управления разделами, например, GParted. Если вы изменяете размер корневой файловой системы, чтобы освободить место, вам понадобится Live образ, например, GParted Live Disk.

После разбивки и перераспределения создадим новый zpool:

Устанавливаем ZFS в Linux. Установка и настройка

Использование ZFS в Linux

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

Чтобы удалить снэпшот выполните:

Для удаления клона выполните:

Одним из интересных вариантов использования ZFS в Linux является виртуализация. Сохранение файла образа VM в датасете позволяет легко откатываться и клонировать с минимальными потерями в производительности.

Статья является переводом с английского статьи Ryan El Kochta: ZFS Configuration on Linux – Setup and Basics

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

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

Что такое ZFS?

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

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

Установка ZFS

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

sudo apt install -y zfs

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


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

sudo modprobe zfs

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

Команда zpool

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

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

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

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

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

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

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

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

sudo zpool list


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

sudo zpool create -f pool0 /dev/sda6


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

sudo zpool list


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

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


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

Чтобы размонтировать файловую систему для одного из созданных разделов используйте команду 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 широко используется для хранения данных, любителями NAS и другими гиками, которые предпочитают иметь собственные резервированные системы, а не уповать на облачные.

Что такое ZFS и для чего я могу ее использовать?

Z file system - это свободный менеджер логических томов с открытым исходным кодом, разработанный в компании Sun Microsystems для операционной системы Solaris. Некоторые самые привлекательные его возможности:

Неограниченная масштабируемость

Максимальная целостность

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

Объединение дисков

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

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

Установка ZFS

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

Solaris и FreeBSD могут поставляться с уже установленной ZFS и готовы к ее использованию.

Если у вас какой-либо другой дистрибутив, проверьте сайт zfsonlinux.org и кликните свой дистрибутив в списке "Packages", чтобы получить инструкции по установке ZFS.

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

Инсталляция займет определенное время, но после ее окончания запустите команду

чтобы убедиться, что установка проведена корректно. Вы должны получить вывод типа:

Инсталляция

Мы используем свежую установку Ubuntu server с одним жестким диском.

файловая система

Настройка ZFS

А теперь давайте подключим к компьютеру еще шесть жестких дисков.

Эта команда показала нам шесть дисков, которые мы установили. На данных момент использовать их невозможно, так как они неразмечены.

подключенные диски

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

zpool create - это команда, используемая для создания нового пула данных, -f позволяет игнорировать возникающие ошибки (например, если диски уже содержат данные), geek1 - имя создаваемого пула, /dev/sdb /dev/sdc /dev/sdd - жесткие диски, которые мы помещаем в пул.

После создания пула вы можете просмотреть его с помощью команд df или sudo zfs list:

пул

Как вы можете видеть, /geek1 уже смонтирован и готов к использованию.

Если вы хотите посмотреть, какие три диска включены в пул, это можно сделать с помощью команды sudo zpool status:

статус пула

Итак, мы создали динамический пул объемом 9 ТБ (фактически это RAID 0). Если вы не знакомы с этими понятиями, представьте, что в /geek1 мы моздали файл размером 3 Кб. При этом автоматически 1 Кб будет записан на sdb, 1 Кб на sdc и 1 Кб на sdd. В результате при считывании этого файла каждый диск будет считывать свой фрагмент одновременно, то есть скорость чтения утроится. Но плохая новость в том, что если хоть один из дисков выйдет из строя, мы потеряем весь файл.

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

Пул удален. Теперь давайте задействуем наши три диска для создания пула RAID-Z, который является значительно улучшенной версией RAID 5, так как он позволяет избежать потери данных с помощью копирования при записи. RAID-Z требует как минимум трех жестких дисков и является компромиссом между RAID 0 и RAID 1. В RAID-Z также имеете повышенную скорость чтения за счет чередования блоков, но при этом обеспечивается безопасность путем параллельного распределения данных. Если один из дисков в вашем пуле откажет, просто замените его и ZFS восстановит все данные на основе информации распределенной на других дисках. К потере данных может привести только одновременный выход из строя двух дисков. Для еще большей надежности вы можете использовать RAID 6 (RAID-Z2 в случае ZFS) с двойным распределением данных.

Для создания пула мы используем ту же команду zpool create, но задаем тип raidz:

создание пула

Теперь команда df -h показывает, что наш пул размером 9 ТБ уменьшился до 6 Тб, так как 3 Тб используются для параллельного распределения данных. С помощью команды zpool status мы можем выяснить, что наш пул теперь относится к типу RAID-Z.

Чтобы убедиться, насколько просто расширить пул, давайте добавим в него остальные три диска (еще 9 ТБ):

Данный справочник является переводом данной статьи. Авторы перевода: Евгений Ратников и Сгибнев Михаил. Огромное им спасибо за проделанную работу!

Данная информация представлена в интернете на множестве ресурсов. Оригинальная статья оформлена в виде таблицы, я же оформлю ее в привычном для моего блога формате — в формате пошагового обучения.

В любом случае не забывайте про страницы справки по командам работы с ZFS.

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

Работа с пулом ZFS

Теперь создадим простой пул без избыточности, затем проверим его размер и использование.

Созданы пул автоматически монтируется в каталог /myzfs

Посмотрим более детальную информацию о нашем хранилище.

Из вывода видно, что в пул включены два диска. Пул без избыточности (не mirror и не RAIDZ).

Теперь попробуем удалить только что созданный пул. Должны же мы это уметь.

Попробуем снова создать пул типа MIRROR (зеркало), но на этот раз попытаемся включить в него диски разного размера. Zpool не даст нам этого сделать. Чтобы безоговорочно создать такой пул, используйте опцию -f, но в этом случае помните — размер зеркала будет равен объему наименьшего диска.

Создать зеркалируемое (MIRROR) хранилище можно на двух и более устройствах. Сколько устройств в пуле типа MIRROR — столько у нас есть одинаковых копий данных.

Вместо зеркалирования можно использовать массивы RAID. Для этого необходимо создавать пул типа raidz вместо mirror. Подробнее в хендбуке.

Давайте теперь исключим один из дисков из пула. Так как этот диск относится к зеркалу (MIRROR), то при его исключении никаких проблем не возникает.

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

А что будет, если попытаемся удалить, а не исключить устройство из пула? Zpool сообщит нам о том, что устройство не может быть удалено. Для начала его нужно отключить.

Теперь давайте попробуем добавить диск горячей замены (hot spare) к нашему пулу.

А теперь удалим его из пула.

Теперь попробуем отключить один из дисков. Пока диск отключен, на него не будет производиться запись и с него не будет производиться чтение. Если использовать параметр -t, то при перезагрузке сервера диск вернется в состояние онлайн автоматически.

Обратите внимание на состояние пула: DEGRADED

Теперь включим этот диск.

Состояние пула снова ONLINE.

В данный момент в нашем пуле два диска: disc1 и disc2. Также в системе имеется диск disc3, но он не подключен к пулу. Предположим, что disc1 вышел из строя и его нужно заменить на disc3.

Периодически для исправления ошибок необходимо выполнять процедуру чистки (scrubbing) для пулов типа MIRROR или RAID-Z. Данная процедура находит ошибки в контрольных суммах и исправляет их. Также восстанавливаются сбойные блоки.

Данная операция слишком ресурсоемка! Следует выполнять ее только во время наименьшей нагрузки на пул.

Если необходимо перенести пул в другую систему, то его необходимо сначала экспортировать.

А затем импортировать в новой системе.

Если ключ -d не указать, то команда ищет /dev/dsk. Так как в данном примере мы используем файлы, необходимо указать директорию с файлами используемыми хранилищем.

Обновление версии пула. Показать версию используемого пула. Флаг -v показывает возможности, поддерживаемые данным пулом. Используйте флаг -a, чтобы обновить все доступные пулы до новейшей из них версии. Обновленные пулы больше не будут доступны из систем, на которых работают более старые версии.

Если нужно получить статистику по операциям ввода/вывода пулов, выполняем команду.

Работа с файловой и другими системами ZFS

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

Создадим файловую систему в нашем пуле. Затем проверим автомонтирование новой файловой системы.

Получить список файловых систем ZFS можно следующей командой.

В данный момент в нашем пуле имеется одно зеркало, в которое входят два диска: disc2 и disc3

Давайте попробуем расширить наш пул. Попытаемся добавить к нему disc1

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

Добавим к пулу новое зеркало, состоящее из дисков: disc1 и disc5

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

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

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

Давайте зарезервируем для файловой системы /myzfs/colin место в пуле, равное 20 Мб. Остальные файловые системы, заполняя пул, в любом случае оставят для этой файловой системы 20 Мб места.

Теперь для файловой системы /myzfs/colin2 установим квоту в 20 Мб. Это означает, что данная файловая система не сможет занять в пуле более 20 Мб, даже если пул будет полностью свободным.

Также для файловой системы /myzfs/colin2 включим сжатие. Сжатие достаточно эффективно работает на уровне ZFS практически без потерь производительности (конечно же, при условии, что производительности сервера достаточно). Вместо compression=on можно использовать compression=gzip.

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

Точно так же в одну команду ресурс можно сделать доступным по протоколу SMB. Что пользователям ОС Windows наверняка пригодится.

Для повышения надежности (если у вас обычный пул, без избыточности), можно использовать следующую опцию файловой системы.

Теперь в файловой системе будет храниться по две копии каждого блока. Это имеет смысл, если пул без избыточности (mirror / raidz).

Snapshots (снепшоты или снимки состояния)

Создать снепшот файловой системы очень просто. Давайте создадим снепшот для файловой системы myzfs/colin и назовем его test.

Если появится необходимость отката к снепшоту, достаточно выполнить одну команду.

Снэпшот можно подмониторовать, как обычно. Например так.

Даже можно клонировать файловую системы из снепшота в новую файловую систему.

Теперь давайте удалим наши файловые системы /myzfs/colin и /myzfs/colin2

Сперва удалим пустую файловую систему /myzfs/colin2

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

Удаление невозможно, т.к. у файловой системы имеется дочерний объект. Можно воспользоваться параметром -r чтобы удалить файловую систему вместе со всеми дочерними объектами рекурсивно.

Мы можем отключить снепшот от /myzfs/colin и оставить его дочерним только для /myzfs/colin3

Теперь сделанный ранее снепшот для /myzfs/colin стал дочерним объектом /myzfs/colin3. Таким образом у файловой системы /myzfs/colin больше нет дочерних объектов и ее можно без труда разобрать (удалить).

Если вдруг понадобиться переименовать ранее созданную файловую систему или снепшот, то можно воспользоваться следующими командами.

Снова вернемся к пулам

Получить полную информацию о пулах можно следующим образом.

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

Чтобы принудительно удалить пул, используйте параметр -f (не выполняйте это сейчас. Пул нам еще понадобится далее)

Отключить файловую систему от пула можно следующим образом.

Подключить файловую систему к пулу вот так.

Снепшот можно сделать и на удаленный ресурс (или другое место в локальной системе).

В данном случае снепшот передан zfs receive на локальном узле (в демонстрационных целях). В реальной ситуации таким образом можно сделать снепшот на другой узел сети.

Zpool ведет собственную историю всех команд. Посмотреть историю можно следующим образом.

Ну вот. Основные команды для работы с пулами ZFS усвоены.

Теперь можно удалить сам пул и файлы. Они нам больше не пригодятся.

ZFS — Справочник команд: 2 комментария

Всё хорошо и наглядно, спасибо! Но что происходит при команде zpool export myzfs?

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

Читайте также: