Работа с файловой системой ZFS в Ubuntu Linux

Основы создания, монтирования и создания снимков

HELP-ME-24.COM (Freelance Team), Черноусов Антон
Изображение к статье про работу с файловой системой ZFS в Ubuntu Linux

В Linux существует не так много файловых систем с полноценной поддержкой Snapshot-ов

Про одну из файловых систем с поддержкой снимков под названием Btrfs я уже подробно рассказывал, но применял я ее с некоторой опаской так как умудрялся ее "убить" на нескольких проектах и откатывался к использованию родной родных файловых систем семейства ext3/4, а механизм снимков реализовывал методами LVM (абсолютно неудобная система). Файловую систему Btrfs периодически объявляют, то стабильной, то вообще говорят, что снимают с разработки и это не вызывает к ней прилива доверия.

Основным конкурентом Btrfs (которая производится казалось бы самим Oracle), существует файловая система судя по описанию с полностью аналогичным функционалом. Кстати, как выяснилось ZFS старше Btrfs (ZFS 2005-ый год, а BTRFS 2010-ый год) хотя реализация ZFS для Linux считается готовой к промышленному применению с 2013-го года.


Реализация ZFS в Ubuntu Linux

Создаем и монтируем файловую систему

Во вступлении к статье, я конечно же написал о предполагаемых достоинствах этой файловой системы, но у нее есть и один существенный недостаток, а именно большие требования по оперативной памяти рекомендуемой для стабильной работы, а именно рекомендуется как минимум 2 гб оперативной памяти.
Следовательно ZFS подойдет не для всех применений и это необходимо учитывать. Начнем мы как обычно с установки пакетов которые потребуются нам для поддержки этой файловой системы в Ubuntu Linux (мы используем версию 16.04.3):
# apt install zfsutils-linux
Основным отличием от типовых файловых систем семейства ext3/4 является прежде всего, то что файловая система создается не на разделе жесткого диска, а сначала создается пул из дисков или разделов и в этой идеологии ZFS ближе к LVM, чем к обычным файловым системам.

Создание пула накопителей LVM
Хотя пул можно инициировать и из одного раздела при помощи команды:
# zpool create lxc-pool /dev/vdb1
Вы можете использовать несколько накопителей:
# zpool create test-pool /dev/sdb /dev/sdc 
Обратите внимание, что при подключении нескольких накопителей вы создаете аналог дискового массива 0, а для создания зеркала можете воспользоваться командой:
# zpool create test-pool mirror /dev/sdb /dev/sdc 
В пул аналогично дисковому массиву можно добавлять и удалять накопители при помощи этой же команды, но с параметрами attach и detach (или replace для замены вышедшего из строя диска). Логика расчета дискового пространства доступного в пуле аналогична расчету для массивов. При использовании ZFS можно использовать кэш-диск используя SSD накопитель для ускорения работы.

Создание файловой системы ZFS
Этот момент оказался для меня немного неожиданным, так как во первых, в случае ZFS вы можете создавать не только тома, но и субтома (это мы уже видели в Btrfs), а во вторых созданные разделы монтируются отдельным демоном.
Для создания файловой системы в пуле используется команда:
# zfs create lxc-pool/lxc-storage
Причем на пуле вы можете создать практически неограниченное количество файловых систем, а получить информацию о их текущем состоянии вы можете при помощи команды:
# zfs list
В результате выполнения вы получите сведения о файловых системах на всех пулах:
NAME                   USED  AVAIL  REFER  MOUNTPOINT
lxc-pool               104K   386G    19K  /lxc-pool
lxc-pool/lxc-backup     19K   386G    19K  /lxc-pool/lxc-backup
lxc-pool/lxc-storage    19K   386G    19K  /lxc-pool/lxc-storage
Обратите внимание, что для всех "файловых систем" используется единое пространство пула, а для "ограничения размеров" раздела ему назначается квота:
#  zfs set quota=50G lxc-pool/lxc-storage
Аналогично btrfs мы можете использовать компрессию и даже задействовать режим дедупликации файлов (его кстати на btrfs так и не реализовали). Для активации режима сжатия данных используется команда:
# zfs set compression=on lxc-pool/lxc-storage
Дедупликация соответственно:
# zfs set dedup=on lxc-pool/lxc-storage
В общих чертах с созданием файловой системы ZFS мы разобрались, для более подробных сведений обратитесь к документации, а мы переходим к монтированию файловой системы ZFS.

Монтирование файловой системы ZFS
Небольшим сюрпризом при моем знакомстве с файловой системой ZFS стало, то что ее оказалось не обязательно прописывать в /etc/fstab для монтирования при загрузке. У нее есть отдельный демон отвечающий за монтирование, а точку монтирования вам показывает рассмотренная ранее команда zfs list:
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
lxc-pool 110K 386G 19K /lxc-pool
lxc-pool/lxc-backup 19K 386G 19K /lxc-pool/lxc-backup
lxc-pool/lxc-storage 19K 50.0G 19K /lxc-pool/lxc-storage
Естественно, что такое расположение точек монтирования меня мягко говоря не устраивает и мне хотелось бы сменить каталог монтирования. Сделать это как оказалось довольно просто:
# zfs set mountpoint=/opt/lxc-backup lxc-pool/lxc-backup
Но самое главное, это то, что вы можете отключить этот режим и вернуться к использованию теплого и лампового /etc/fstab и для этого установите точку монтирования в режим legacy при помощи команды:
# zfs set mountpoint=legacy demo/media
И добавьте соответствующую запись в /etc/fstab:
tank/media  /export/media  zfs  defaults  0  0
На этом мы закончим обзорную инструкцию в мир ZFS. Файловая система выглядит рабочей с большой историей и даже используется у коллег в продакшн, но я пока потестирую ее на тестовых машинах и посмотрим достаточно ли она устойчива.

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий