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

в 18:02, , рубрики: 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-ключ, которым подписаны пакеты:

# cd /etc/yum.repos.d/
# wget http://yum.aclub.net/pub/linux/centos/6/umask-zfsonlinux/umask-zfsonlinux.repo
# rpm --import http://yum.aclub.net/pub/linux/centos/6/umask/RPM-GPG-KEY-umask

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

# rpm -i http://mirror.astpage.ru/epel/6/i386/epel-release-6-7.noarch.rpm

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

# yum install dkms gcc make kernel-devel

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

# yum install zfs spl

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

# chkconfig zfs on

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

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

# zpool create tank mirror /dev/sdc /dev/sdd

Пул 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 — это порт с его потенциальными проблемами и нюансами.

Вместо заключения

Разработчики zfsonlinux на вопрос, чем им можно помочь часто отвечают «просто начните использовать zfsonlinux», поэтому, надеюсь, что эта статья позволит кому-то без затруднений это сделать.

Автор: umask00

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js