Устанавливаем ZFS в Linux — часть 2. ZVols, LZ4, ARC, и ZILs

Устанавливаем ZFS в Linux - часть 2. ZVols, LZ4, ARC, и ZILs

В прошлой статье мы коснулись конфигурации и основ использования ZFS в Linux. Мы выяснили как устанавливать ZFS в различные дистрибутивы,как создавать снэпшоты, клоны, и [simple_tooltip content=’Набор данных. Общее название следующих объектов ZFS: клонов, файловых систем, снимков или томов. Каждый набор данных идентифицируется по уникальному имени в пространстве имен ZFS.’] датасеты(dataset)[/simple_tooltip]. ZFS включает в себя множество дополнительных функций, таких как ZVols и ARC. В этой статье я попытаюсь объяснить их полезность.

Если не читали первую статью, то рекомендую ознакомиться сначала с ней Устанавливаем ZFS в Linux. Установка и настройка

ZFS Volumes или ZVols

По сути ZVols или «Z том» — набор данных, используемый для эмулирования физического устройства. ZVols могут использоваться в качестве устройств хранения блоков другими системами.

Для создания ZVol выполните в терминале:

sudo zfs create -V 10gb poolname/zvolname

Выполнив ls вы увидите примерно следующее:

# zfs create -V 10gb testpool/zvoltest1
# ls /dev/zvol/testpool
zvoltest1
#

В моём примере  ZVol располагается в /dev/zvol/testpool/zvoltest1
Вы можете использовать его иначе, например, /dev/sda3 или /dev/sdd5. Чтобы пробросить его в виртуальной машине, вы можете использовать Z Volume вместо файла .img, как в примере на изображении ниже:

Устанавливаем ZFS в Linux - часть 2. ZVols, LZ4, ARC, и ZILs

Обратите внимание на режим кэша (Cache Mode)  и режим ввода-вывода(I/O mode). Эти настройки, могут предотвратить подвисания ввода-вывода и увеличить отзывчивость. 

Помимо виртуализации, ZVols также широко примененим. Например его можно использовать по типу раздела подкачки (Swap). Как указано на ZoL Wiki, Swap тома могут быть созданы такими нехитрыми манипуляциями :

sudo zfs create -V 4G -b $(getconf PAGESIZE) -o compression=zle \
 -o logbias=throughput -o sync=always \
 -o primarycache=metadata -o secondarycache=none \
 -o com.sun:auto-snapshot=false poolname/swapzvol

Конечно «4G» необходимо заменить на необходимый вам размер тома подкачки. После чего форматируем его и включаем:

sudo mkswap -f /dev/zvol/poolname/swapzvol
sudo bash -c 'echo /dev/zvol/poolname/swapzvol none swap defaults 0 0 >> /etc/fstab'
sudo swapon -av

Ну и последний пример использования ZVols, о котором я упомяну в этой статье, это возможность использование других файловых систем поверх Z Volume. Это удобно и применимо например в тех случаях, когда ваше приложение не поддерживает ZFS, то вы легко можете накатить поверх ZVol любую файловую систему, например ext4:

sudo mkfs.ext4 /dev/zvol/poolname/zvolname

LZ4 compression

ZFS имеет нативную поддержку сжатия с удивительно низкой нагрузкой на процессор. LZ4, является наиболее подходящим для этого алгоритмом сжатия. Он может быть установлен, как для датасета так и для ZVol:

# для ZVol
sudo zfs set compression=lz4 poolname/compressedzvol
# для dataset
sudo zfs set compression=lz4 poolname/compresseddataset

При использовании сжатия можно использовать значительно меньшее дисковое пространство для хранения того же объема данных. С ZFS в Linux, сжатие полностью прозрачно и происходит что называется «на лету» так что все приложения должны работать с ним.

ARC

ARC, или «адаптивно заменяемый кэш» (adaptive replacement cache) это кэш ZFS встроенный в ОЗУ. Он более агрессивен, чем встроенное кэширование оперативной памяти Linux.

ARC или «адаптивный кеш замены» — это встроенный кеш ZFS в ОЗУ. Он намного более агрессивный, чем встроенное кэширование оперативной памяти Linux. По этой причине некоторые пользователи могут обнаружить, что кеш ARC использует слишком большую часть их оперативной памяти. Тогда как им следовало бы знать, что свободная оперативная память — это потерянная оперативная память. OpenZFS предлагает достаточно широкие настройки использования кеша ARC. Вы можете настроить его с помощью параметров ядра. Для GRUB найдите следующую строку в файле /etc/default/grub:

GRUB_CMDLINE_LINUX_DEFAULT="quiet"

Добавьте строку “zfs.zfs_arc_max=(size)” указав размер в байтах:

GRUB_CMDLINE_LINUX_DEFAULT="quiet zfs.zfs_arc_max=1073741824" # For 1GiB

После чего перезапишите конфигурационный файл GRUB с учётом изменений:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Для повышения производительности рекомендуется делать это значение настолько большим, насколько позволяет ваше ОЗУ.

L2ARC

Level 2 ARC — великолепное решение для тех, кто хочет получить высокую скорость от механических жестких дисков. С помощью него, вы можете использовать быстрый диск, например SSD, для кэширования данных. Чтобы добавить L2ARC, выполните следующие действия:

sudo zpool add poolname cache ID_ВАШЕГО_УСТРОЙСТВА

Где вместо ID_ВАШЕГО_УСТРОЙСТВА вам следует указать ID из  /dev/disk/by-id/. Например:

# ls /dev/disk/by-id
ata-WDC_WD1002FAEX-00Y9A0_WD-WCAW33641222 wwn-0x50014ee25e646ba3
ata-WDC_WD1002FAEX-00Y9A0_WD-WCAW33641222-part1 wwn-0x50014ee25e646ba3-part1
ata-WDC_WD10EZEX-00KUWA0_WD-WCC1S5941691 wwn-0x50014ee25e646ba3-part2
ata-WDC_WD10EZEX-00KUWA0_WD-WCC1S5941691-part1 wwn-0x50014ee25e646ba3-part3
ata-WDC_WD10EZEX-00KUWA0_WD-WCC1S5941691-part2 wwn-0x50014ee2b1a6926d
ata-WDC_WD10EZEX-00KUWA0_WD-WCC1S5941691-part3 wwn-0x50014ee2b1a6926d-part1

Или выполнив:

# blkid

ZIL

Поскольку L2ARC улучшает производительность чтения, кэшируя его на более быстром диске, ZIL делает то же самое только для записи. Таким образом, он, вероятно, не нужен, если у вас нет рабочей нагрузки с интенсивной записью. Добавление ZIL почти идентично добавлению L2ARC:

sudo zpool add poolname log ID_ВАШЕГО_УСТРОЙСТВА

Монтируем XML как dataset

Вы можете создать полностью раздельный набор данных для хранения XML-файлов libvirt. Libvirt хранит XML-файлы в /etc/libvirt/qemu. Для этого, вам следует временно переместить все файлы, создать датасет, смонтировать его и переместить файлы на него.

sudo mkdir /tmp/qemubak
sudo mv /etc/libvirt/qemu/* /tmp/qemubak
sudo zfs create -o mountpoint=/etc/libvirt/qemu poolname/xml
sudo mv /tmp/qemubak/* /etc/libvirt/qemu/

Это всё что требуется. теперь вы можете создавать снэпшоты poolname/xml датасета и откатываться к ним после неудачного изменения XML файлов.

Статья является переводом с английского статьи  Ryan El Kochta: «ZFS Configuration Part 2: ZVols, LZ4, ARC, and ZILs Explained»

Устанавливаем ZFS в Linux. Установка и настройка

Устанавливаем 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

Далее устанавливаем ZFS:

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 {33d8302486bd10b0fde64d2037652320e6f176a736d71849c0427b0d7398501a}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. Установка и настройка

Read moreУстанавливаем ZFS в Linux. Установка и настройка