Это старая версия документа!
# репозиторий ZFS для Almalinux sudo dnf install https://zfsonlinux.org/epel/zfs-release-2-3$(rpm --eval "%{dist}").noarch.rpm dnf repolist # перечень репозиториев # Установка пакетов ZFS dnf config-manager --disable zfs dnf config-manager --enable zfs-kmod dnf install zfs sudo /sbin/modprobe zfs # включить модуль ядра systemctl -a | grep zfs # загруженные модули list-unit-files | grep zfs # загруженные утилиты ls -l /dev/disk/by-id # список дисков с ID smartctl -a /dev/sda # информация по диску (в т.ч. размер секторов) lsblk -td hdparm -I /dev/sdb
zfs list # dataset list zpool list [-L] [-v] # pool list zpool status [exist-pool] [-x] zpool get all [exist-pool] zpool iostat [pool-name] [interval_sec] zpool iostat -v # в разрезе по Vdev arcstat # тут еще совсем небольшая статистика по ARC /proc/spl/kstat/zfs - ? zpool history
# Подключение шифрованного раздела zfs load-key tank/secure zfs mount tank/secure # Перечень пулов с инфой по ним zpool list -vL # создание пула zpool create [-o ashift=12] [pool-name] mirror [diskID1] [diskID2] [diskID3] # (можно перечислить пару раз mirror [disk] [disk], для создания нескольких зеркал) # для создания пула Raidz команда аналогична, вместо mirror указываем raidz # добавление дисков zpool add [-o ashift=12] [exist-pool] mirror [diskID4] # -f для изменения степени избыточности # -n пробный прогон (?)
При создании пула выполняются проверки дисков на использование, но только на них полагаться не стоит
Для зеркала можно и нечетное кол-во, в каждом пуле можно создавать по несколько зеркал
При создании двух зеркал в одном пуле, создается еще одно вирт устр-во верхнего уровня. Данные наносятся полосами на оба зеркала, данные являются избыточными на каждом диске
Можно добавлять набор дисков, присоединять доп диски, замена дисков и удаление дисков из конфигурации если сохраняется избыточность. Удалять напрямую уст-ва или разбить их нет возможности
команда zpool remove поддерживает только удаление уст-в горячего резерва и уст-в кеширования. Уст-ва часть основной конфигурации зеркального пула могут быть удалены zpool detach. Уст-ва без избыточности и устр-ва RaidZ удалить из пула невозможно
Изменение пар-ов для ФС рекурсивно применяется ко всем ее дочерним
Отдельным ФС можно задавать свойства такие как exec,devices,readonly и т.д.
При создании снимка, с указанием «-r» рекурсивно создаются снимки дочерних ФС
# вложенные ФС zfs create pool-name/fs-name zfs create pool-name/fs-name/folder/fs-second-name zfs destroy pool-name/fs-name/folder/fs-second-name # указание ДС с рекурсивным выводом zfs list [-r] [ds-name] # выбор полей для вывода zfs list [-o name,sharenfs...]
# Текущие параметры zfs get [parameter || all] zfs list -o [parameter || all] [FS-name] # Задать параметр ФС zfs set [parameter=newvalue] [FS-name] # Параметры пулу при создании (требуется проверить) zpool create -O compression=on pool mirror c0t1d0 c0t2d0 # Для сжатия можно указать тип и уровень zfs set compression=gzip-9 [FS-name] # Текущие параметры в файлах ls /sys/module/zfs/parameters # описание параметров modinfo zfs
Есть инфа
Cache (Зеркалирование уст-в кеширования невозможно и они не могут быть частью RaidZ)
# при создании пула zpool create tank mirror [disk1] cache [CacheDisk1] # после создания zpool add [exist-pool] cache [CacheDisk1] [CacheDisk2] zpool remove [exist-pool] [CacheDisk1] [CacheDisk2] zpool add -o ashift=12 tank cache nvme-INTEL_SSDPE2KX010T8_BTLJ904509X61P0FGN-part2 # Еще варианты (следует проверить перед использованием) # указывается primarycache/secondarycache zfs set primarycache=metadata tank/datab zfs create -o primarycache=metadata tank/newdatab
arcstat # небольшой срез статистики arc_summary | more arc_summary -d | more # пакет "zfs-stats" для линукса, самоделкин https://github.com/egidijus/zfs-tools/blob/master/README.md zfs-stats -A zfs-stats -E
ZIL обеспечивает требования POSIX для синхронных транзакций, например транзакции БД
По умолчанию выделяется из блоков основного хранилища
# при создании пула zpool create tank mirror [disk1] log [mirror] [LodDisk1] # ps. "с зеркальными устр-ми протоколирования" видимо после log удет отдельное устр-во, не "пул-хранения + лог" zpool add [exist-pool] log mirror [LogDisk1] [LogDisk2] zpool add -o ashift=12 tank log nvme-INTEL_SSDPE2KX010T8_BTLJ904509X61P0FGN-part1
Создаются моментально, место занимает только разность изменяемых впоследствии данных.
Хранятся в /tank/.zfs/snapshot. В открытом варианте, имеется доступ к файлам
# Список снимков zfs list -t snapshot # Создание снимка (только весь пул), имя в единственном аргументе zfs snapshot tank@2022-11-11 # Откат, делается на последний снимок, чтобы откатить на определенный нужно уничтожить промежуточные (-r) zfs rollback tank@2022-11-11 # Удаление снимка zfs destroy tank@2022-11-11 # Отправка снимка zfs send tank@2022-11-11 | zfs recv newtank/data # По сети zfs send tank@2022-11-11 | ssh root@10.200.192.25 zfs recv newtank/data # Отправка по сети через mbuffer (при длительной процедуре можно использовать ПО "screen") # Принимающий mbuffer -s 128k -m 1G -I 192.168.1.11:9090 | zfs receive newtank/data # Отправитель zfs send tank@2022-11-11 | mbuffer -s 128k -m 1G -O 192.168.1.10:9090 # Отправка инкрементных данных zfs send -i tank@2022-11-11 tank@2022-11-12 | ssh host2 zfs recv newtank/data
ashift
Размер блока (секторов) диска, должен совпадать с физическим размером у диска
Указывается как степень двойки т.е. «ashift=12 - 2^12 = 4096»
По умолчанию zfs пытается узнать его в ОС при создании пула, но механизм не надежный, дефолтное значение 512Б, для поддержки самых старых, у современных 4Кб а то и 8Кб, поэтому важно правильно указать
В случае указания размера меньше фактического, производительность очень сильно падает в связи с резким возрастанием ко-ва чтения/записи
MRU - недавно используемые
MFU - часто используемые
# Рекомендации из конфы sudo zfs set recordsize=128K tank sudo zfs set compression=lz4 tank sudo zfs set logbias=throughput tank