zfsonlinux — легко и просто
У пользователей 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/5/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 минут (конечно, зависит от мощности сервера), т.к. при установке будут скомпилированы модули):
Включить сервис zfs, который подгружает модули и монтирует все ZFS-партиции (по умолчанию этот сервис и так в состоянии автоматического запуска, но если вдруг что-то изменится, то этот шаг не будет пропущен):
На этом шаге система готова к использованию 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», поэтому, надеюсь, что эта статья позволит кому-то без затруднений это сделать.
Устанавливаем ZFS в Linux. Установка и настройка
Допускаете ли вы возможность того, что можете не сделать своевременно резервную копию важных файлов или папки и по какой-то роковой случайности можете их потерять? Возможна ли ошибочная команда «rm -rf» в вашей музыкальной библиотеке? Могут ли у вас быть повреждены основные системные файлы виртуальной машины? Люди не совершенны и все способны на ошибки, так что, чем скорее вы перейдете на ZFS, тем скорее сможете перестать беспокоиться о безвременной утрате драгоценных данных.
Установка и настройка ZFS в Linux очень проста для большинства дистрибутивов.
Arch или Manjaro linux
У пользователей Arch есть несколько вариантов установки ZFS. Так пакет AUR «zfs-dkms» целесообразен, если вы хотите использовать ветвь ядра LTS. Если нет, то другие два варианта — «zfs-linux-git» и «zfs-linux». Первый пакет, как видно из названия, собран из репозитория ZFS Git и, как следствие, будет получать обновления для более новых ядер намного быстрее. Последнее иногда отстает и порой блокирует обновления ядра ядра на вашем компьютере.
Как правило, лучше использовать «zfs-linux-git», поскольку обновления ядра будут очень быстрыми. Скомпилируйте его следующей командой:
yaourt -S zfs-linux-git # для пользователей yaourt pacaur -S zfs-linux-git # для пользователей pacaur sudo systemctl enable zfs.target sudo systemctl enable zfs-import-cache sudo systemctl enable zfs-mount sudo systemctl enable zfs-import.target
Более подробную информацию можно найти на Arch Wiki
Debian
В Debian начало использования ZFS происходит с добавления в файл /etc/apt/sources.list следующего репозитория:
deb http://mirrors.kernel.org/debian/ stretch main contrib
sudo apt update sudo apt install linux-headers-$(uname -r) zfs-dkms
Apt автоматически включает службы systemd, поэтому все, что вам останется сделать, это перезагрузить машину.
Ubuntu
Начиная с Xenial, Ubuntu включает в себя модуль ядра ZFS. Все, что вам следует сделать, это добавить пользовательские инструменты и перезагрузиться:
sudo apt install zfsutils-linux
Fedora
Если верить ZFSOnLinux Wiki, то пользователи Fedora могут установить ZFS используя следующие простые команды:
sudo dnf install http://download.zfsonlinux.org/fedora/zfs-release$(rpm -E dist).noarch.rpm gpg --quiet --with-fingerprint /etc/pki/rpm-gpg/RPM-GPG-KEY-zfsonlinux sudo dnf install kernel-devel zfs
Эти команды добавят ZoL репозиторий и установят ZFS.
Gentoo
Будучи source-based дистрибутивом, ZFS на Gentoo не требует DKMS. Чтобы установить его, сначала убедитесь, что у вашего ядра есть поддержка сжатия Deflate. В «make menuconfig» включите его:
Cryptographic API --> Deflate compression algorithm
Затем разрешите использовать git-версии ZFS, выполнив следующие команды с правами root:
echo "=sys-kernel/spl-9999 **" >> /etc/portage/package.accept_keywords/zfs echo "=sys-fs/zfs-kmod-9999 **" >> /etc/portage/package.accept_keywords/zfs echo "=sys-fs/zfs-9999 **" >> /etc/portage/package.accept_keywords/zfs
После чего установите и активируйте ZFS:
Creating a ZFS “partition”
Теперь, когда вы установили поддержку файловой системы, вам нужно создать пул. Пулы могут быть очень сложными, охватывая многие диски и предлагая избыточность. Однако в этом примере будет использоваться один раздел без избыточности. Во-первых, требуется пустой раздел. ZFS в Linux можно использовать в качестве корневой файловой системы, но это не рекомендуется. Поэтому перераспределите другой диск, используя привычный вам инструмент управления разделами, например, GParted. Если вы изменяете размер корневой файловой системы, чтобы освободить место, вам понадобится Live образ, например, GParted Live Disk.
После разбивки и перераспределения создадим новый zpool:
sudo zpool create -m /your/mount/point yourpoolname /dev/sdXY
Использование ZFS в Linux
ZFS оперирует наборами данных(dataset) — которые по сути ячлвются, мини-разделами в томе ZFS. Вы можете монтировать датасеты в любом месте в котором пожелаете. Когда вы делаете снэпшот(snapshot), вы делаете снимок набора данных. Для создания снэпшота, выполните следующую команду:
sudo zfs snapshot yourpoolname/dataset1@snapshotname
ZFS позволяет создавать практически неограниченное количество снэпшотов в датасете. К сожалению, возврат к более раннему снимку требует удаления всех снимков, созданных после него. Откат к более раннему снимку осуществляется так
sudo zfs rollback yourpoolname/dataset1@snapshotname
Еще одна полезная функция ZFS — это функция клонирования. Клоны позволяют дублировать датасеты, не занимая при этом все пространство на диске повторно. Разумеется, все записи в датасет будут использовать дополнительное дисковое пространство. Вы должны сделать снимок датасета, прежде чем сможете клонировать его. Чтобы клонировать датасет, выполните в терминале:
sudo zfs list -t snapshot # List all available snapshots sudo zfs clone yourpoolname/dataset1@snapshotname yourpoolname/clonename
Чтобы удалить снэпшот выполните:
sudo zfs destroy yourpoolname/dataset1@snapshotname
Для удаления клона выполните:
sudo zfs destroy yourpoolname/clonename
Одним из интересных вариантов использования ZFS в Linux является виртуализация. Сохранение файла образа VM в датасете позволяет легко откатываться и клонировать с минимальными потерями в производительности.
ZFS — очень мощная файловая система с огромным количеством функций. Поскольку невозможно описать их все в одной статье, я пошлю вас знакомиться с фантастической документацией FreeBSD. Хоть документация и написана для FreeBSD, очень многое применимо в Linux (а также OSX, IllumOS и возможно Windows). Если вы намерены использовать ZFS, то я рекомендую ознакомиться с понятием наборов данных(dataset).
Статья является переводом с английского статьи Ryan El Kochta: ZFS Configuration on Linux – Setup and Basics