Zfs on linux centos 8

Install ZFS on Centos

Posted 17 February, 2017

Installing ZFS on Centos has been ironed out pretty much, so just follow along. There are three ways I know of to install ZFS on Centos. The two methods are recommended, as they use a repository, the last is just compiling from source, which I like, since I decide when its updated. (as kernel updates have caused some issue’s after reboots for ZFS)

The ZOL (ZFS on Linux) advice is to use kABI-tracking kmod, so that on updating to a newer kernel, ZFS does not need to be rebuild, however the default repository points to DKMS style tracking. This does work, but I had issue’s in the past, so I chose to compile from source and update when I know we can handle some downtime.

Note : this guide assumes you installed epel repository if not, yum install epel-release

Install ZFS Repo

If you want DKMS or kABI-tracking kmod, we need to install the ZFS repository; Based on the Centos version (or the RHEL version) you need to pick a package; Note that for Centos 7.3 you need a special version due to changes in the kABI kernel part from 3.10.0-514. (if you want to take kABI)

  • For Centos 7.3 : yum install http://download.zfsonlinux.org/epel/zfs-release.el7_3.noarch.rpm
  • For Centos 7 : yum install http://download.zfsonlinux.org/epel/zfs-release.el7.noarch.rpm
  • For Centos 6 : yum install http://download.zfsonlinux.org/epel/zfs-release.el6.noarch.rpm

After this, it’s good practice (but rarely done) to validate the fingerprint, this should be done using gpg, the output should be exactly as below.

Installing ZFS using DKMS

note : you need to install ZFS Repo first

Installing using DKMS is easy once you installed the repository, however you do need kernel development library’s for each new kernel, this can be installed using kernel-devel; In one nice package :

And you are good to go.

Installing ZFS using the kABI-tracking kmod

note : you need to install ZFS Repo first

Since you chose the kABI method, we need to enable the correct repo’s this can be done in the /etc/yum.repos.d/zfs.repo file. You should edit line 4 and 12, put the first enabled to 0 and the second under [zfs-kmod] to 1; It should look like : (I ignored the zfs-source and zfs-testing)

After that you can simply run :

And you are ready to go!

Installing ZFS by compiling from source

This for sure it the least convenient way, but this way we know exactly when ZFS is updating and when a downtime is accepted. I tend to use yum-cron but this method ZFS does not get updated. (I also could blacklist ZFS from updating but I prefer this method) Building from source can be done straight from the ZFS git repository, but I prefer to download the releases only. That’s the way I’m using here.

First download the latest release : (both spl and zfs are required)

We also need some packages to have the compiling run smooth :

Next we start by compiling SPL, this is the shim layer module that translates the API requests, so that ZOL (ZFS on Linux) is compatible with OpenZFS and hence can be used across multiple platforms.

Then we move on to the real deal, ZFS. The code is based on the upstream OpenZFS code, adapted to Linux. Compiling is similar to the spl code; only you have to give the location where the SPL code was compiled; for me that is /opt/zfs/zfs_0.6.5.9/spl-0.6.5.9/ if you forgot the configure will tell you nicely :

Читайте также:  Starting windows зависает при запуске windows

If its an upgrade (like mine) ZFS module is already loaded, if its a new install modprobe zfs should load the module and you are good to go :

  • Kabi method tested for fresh & clean Centos 7.3 (08/03/2017)

Источник

ZFS on CentOS: работа над ошибками

Так как я довольно давно использую ZFS (ещё со времён OpenSolaris), и очень доволен данной ФС в Linux, несмотря на её «неправославную» лицензию, то естественно прочитал свежую статью об установке данной ФС на CentOS.

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

Работа над ошибками, и некоторые полезные советы под катом.

1. Устанавливать ZFS поверх mdadm массива — это излишнее расточительство ресурсов ЦПУ и излишний дисковый ввод-вывод. ZFS сама прекрасно создаст RAID-0/1/5/6(z2)/z3.

2. При использовании GRUB2 совершенно нет никакого смысла в отдельном разделе для /boot. GRUB2, с указанным в статье фиксом, прекрасно грузит ОС, расположенную на ZFS, а также без всяких проблем может прочитать содержимое директории /boot, расположенной в корневой файловой системе.

О том, как это делается

На дисках (предположим, что их два) вам потребуется всего две партиции: одна для GRUB2, одна для дискового пула. Пример разбивки дисков (GPT без UEFI, если будете использовать UEFI, то тип партиции выставляйте соответственно):

Где diskpool — имя пула, естественно название можно выбрать по вкусу/схеме именования пулов.

Проверяем созданный pool так:

Увидим среди прочего:

Если дисков много (например 4-е), и Вам важна производительность, можно создать RAID-10:

При проверке статуса пула увидим:

Если у вас много дисков и вам нужен более ёмкий RAID:

raidz — RAID-5. Oдна P-сумма — по xor

raidz2 — RAID-6. Oдна P-сумма — по xor, одна Q-сумма — код рида-соломона на GF(2^8). GF не честное, оптимизировано для производительности, поэтому содержит 0 и не имеет право называться RAID-6, однако raidz2 рассчитывает Q сумму в 8 раз быстрее, чем RAID-6.

raidz3 — с тройной чётностью (ни разу не заглянул в исходники, чтобы проверить, что используется для создания 3-й суммы)

Создадим RAID5 на 4-х дисках:

При проверке пула увидим:

Создадим RAID6 на 5-ти дисках:

Создадим RAID-50 на 12-ти дисках:

Принцип очевиден — любые комбинации доступны. Можете в одном пуле комбинировать разные типы RAID, но никакого смысла в этом естественно нет, a есть ограничения:

1. ARC2 SSD cashe недоступен для пулов, в которых есть зеркало.
2. Смешение разного типа RAID-ов в одном пуле гарантирует непредсказуемость производительности пула (в самом худшем смысле — бутербродом вниз).

Раз уж я упомянул о SSD ARC2 cache:

При проверке пула увидим:

При создании пула можно указать дополнительные опции так:

Все опции кроме ashift и некоторых feature@ вы сможете поменять уже после создания пула.

Внимание! Если вы используете zfs версии 0.6.5 и выше, то обязательно при создании пула отключите следующие фичи:

feature@spacemap_histogram
feature@enabled_txg
feature@hole_birth
feature@extensible_dataset
feature@embedded_data
feature@bookmarks
feature@filesystem_limits
feature@large_blocks

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

Итак, создадим пул со всеми нужными нам параметрами:

Также можно указать сразу опции для создаваемых в последствии файловых систем с ключом -O (о них позже).

1. Создать файловые системы правильно
2. Указать пулу основную корневую систему и при желании альтернативную (очень удобная штука)
3. Установить GRUB2 на все диски пула
4. Прочее

Читайте также:  Как обновлять пакеты linux

После создания пула у вас по умолчанию есть файловая система, ассоциированная с пулом:

Если команда zfs list в колонке MOUNTPOINT для этой ФС содержит не «legacy», то это нужно немедленно исправить:

Вообще это и есть корневая файловая система, но использовать её мы не будем, а создадим отдельную виртуально-корневую ФС так:

Эта ФС тоже не имеет точки монтирования, а также содержит ряд полезных опций, которые будут унаследованы всеми созданными в последствии ФС (если вы не укажете других опций).

Опции atime=off и relatime=on значительно повысят производительность ФС, соответственно пожертвовав метками времени доступа к файлам.

Опция compression=lz4 включит на ФС «очень производительную» версию алгоритма сжатия lzjb. Где-то даже есть тесты, и, помнится, меня они впечатлили. Включать компрессию или нет — дело не только вкуса, но и комфорта в работе, а также очень сильно зависит от назначения ФС. Об этом, возможно, напишу в последующей статье.

Хотите поддержки utf8 в именах файлов и отсутствие неприятностей с мултиязычHblми наименованиями? Лучший выбор — опция utf8only=on.

Ну и поддержка xattr нужна однозначно (xattr=on). Появление поддержки POSIX ACL (опция acltype=posixacl) в ZFSonLinux я лично встретил как праздник (убейте, но не помню в какой версии добавили эту фичу).

Далее укажем пулу, что это и есть наша загрузочная ФС:

Далее следуем инструкциям оригинальной статьи, в разделе инсталляции OS, со следующими отличиями:

1. Не создаём отдельную ФС /boot и ничего в каталог /boot не монтируем
2. Никаких /etc/fstab пока не используем
3. Выполнение установки GRUB2 на диски стоит изменить следующим образом:

4. Перед тем как начнёте пересобирать initramfs, обязательно удалите /mnt/etc/zfs/zpool.cache.

Далее опять всё по инструкции.

Использовать алиасы дисковых устройств из каталогов /dev/disk/by-* вовсе не обязательно (каждый диск знает состав пула по wwn). Вы также можете отредактировать /etc/zfs/vdev_id.conf и дать дискам собственные названия с помощью опции alias:

Если используете multipath, в том же файле добавьте следующие опции:

Естественно, заменив PCI ID для HBA на свой собственный.

Если честно, то установку ZFS на enterprise-дистрибутивы никогда не делал. Причины очевидны. Подвиг kvaps в этом деле также очевиден. Респект.

Источник

Установка CentOS на ZFS в UEFI

Решил тут на днях попробовать ZFS, а подробного и простого мануала как это осуществить на CentOS не нашел, решил исправить ситуацию. К тому же хотелось установить все это в режиме EFI. — не стоять же на месте? И заодно понять для себя как работает DKMS, а так же аспекты ручной установки RPM-based дистрибутивов.

ZFS был выбран тоже не случайно, так как на этой машине планировалось развернуть гипервизор и использовать zvol для хранения образов виртуальных машин. Мне хотелось нечто большего чем програмный рейд + lvm или простое файловое хранение образов, что-нибудь на подобии ceph, но для одного хоста это слишком жирно. Забегая вперед скажу, что я остался очень доволен этой файловой системой, ее производительностью и всеми ее фишками.

Подготовка

Для начала возьмем LiveCD образ CentOS, например из облака yandex, нужен именно live а не netinstall или minimal, так как для установки нам потребуется полностью рабочая система linux. Запишем образ на болванку или флешку и згрузимся с нее. Грузится нужно в efi режиме, в противном случае не получится сохранить загрузочную запись в efi.

Установим epel и zol репозитории:

Установим пакет с kernel headers:

Дальше провернем некий финт ушами, без которого zfs попросту не соберется на нашем LiveCD:

Теперь можно устанавливать пакет zfs:

После установки пакета проверим установился ли модуль, и если все ок, то загрузим его:

В противном случае исправляем ошибки и устанавливаем модули через dkms autoinstall

Читайте также:  Скачет курсор windows 10

Разметка дисков

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

  1. efi ( fat16 / 100мб ) — здесь будут хранится файлы конфигурации и сам загрузчик
  2. boot ( ext4 / 412мб ) — эти разделы со всех трех дисков мы объеденим в програмный RAID1, здесь будут лежать ядра и минимальные образы для загрузки системы.
  3. data ( zfs / все остальное ) — на этих разделах со всех трех дисков мы создадим zpool с RAIDZ, в котором создадим нужные нам разделы с точками монтирования в /, /home и /var и т.д., и установим на них систему.

Приступаем к разметке:

Поаторяем тоже самое для /dev/sdb и /dev/sdc. Создаем файловую систему для efi-раздела:

FAT16 используется не случайно, т.к. размер минимального раздела с FAT32 — 512мб, а это слишком много.

Ок, теперь разбреремся с нашим /boot, создадим програмный RAID из вторых разделов на наших дисках, и сразу же файловую систему на нем:

Пришло время создать наш zpool, для этой операции рекомендуется обращаться к дискам по ID, вот пример как эта команда выглядела у меня:

Вам только стоит определиться с параметром ashift. Для дисков, размер блока которых равен 512b следует указать параметр ashift=9, для 4k дисков ashift=12. Посмотреть размер блока диска можно командой fdisk -l.

Теперь создадим нужные нам разделы, в zfs это легко:

Готово, диски мы разметили.

Установка системы

Устанавливать будем вручную, так что приступим. Монтируем все наши разделы в /mnt, обратите внимание, что efi раздел мы монтируем только для одного диска, с остальными разберемся позже:

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

Когда гостевая система установится, подключем в нее системные директории хостовой системы и выполняем chroot:

Теперь приступим к ее настройке. Запишем DNS-сервер, лучше локальный конечно, что бы заработало разрешение имен:

Вновь установим epel и zol репозитории:

Да и сам zfs теперь должен установиться без плясок с бубном:

Ок продложаем, установим часовой пояс:

Хостнейм, пароль рута:

Запишем точки монтирования в fstab. Разделы на zfs в fstab добавлять в принципе не нужно:

Так же необходимо сохранить информацию о нашем рейд-массиве:

Готово, наша система установлена и настроена, теперь разберемся с загрузчиком.

Установка загрузчика

В принципе в случае с efi можно было бы обойтись и без загрузчика т.к. ядро linux уже довольно давно поддерживает EFISTUB (загрузку напрямую через efi без загрузчика), но это не наш случай потому-что: во первых: efi раздел на котором должно будет находится наше ядро нельзя объеденить в програмный рейд а следовательно при каждом обновлении ядра придется копировать этот раздел на остальные диски, во вторых: centos не очень приспособлен к такой загрузке из коробки, рекомендуется все же использовать GRUB2.

Установим GRUB2 для UEFI:

Что бы grub2-install не ругался на zfs-разделы нам нужно скомпировать и установить еще один пакет grub-zfs-fixer:

Готово, теперь выполним установку GRUB2 и сгенерируем конфиг:

GRUB2 должен был создать запись в вашем efi, проверим:

Скопируем наш efi-раздел на остальные диски:

Теперь осталось лишь добавить модуль zfs в initramfs, для этого сделаем:

Обратите внимание, здесь в качестве первого аргумента передается путь к initramfs а в качестве второго версия ядра. Если второй параметр не задать, то образ сгенерируется для текщего запущенного ядра, а так как мы работаем в chroot, его версия будет явно меньше чем установленная в гостевой системе.

На этом все. Выходим из chroot, отмонтируем /mnt. И перезагружаемся в нашу свежеустановленную систему.

Источник

Оцените статью