У пользователей 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