Инструменты пользователя

Инструменты сайта


linux:zfs

Это старая версия документа!


ZFS

Установка

:!: Подробнее
  # репозиторий 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...]

Конфигурация

Docs

:!: Подробнее
  # Текущие параметры
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

ARC

:!: Подробнее

Есть инфа
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

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
  • Повышение производительности в результате использования отдельного уст-ва зависит от типа устр-ва, состава оборудования пула и рабочей нагрузке (ссылка на перечень битая)
  • Эти устр-ва могут быть без репликации или с зеркалом, но RaidZ не поддеживается
  • Если на отдельном устр-ве не использвется зеркало то в случае выхода из строя, протоколирование автоматически перейдет в основной пулл хранения данных
  • С уст-вам протоколирования можно делать все кроме удаления
  • Минимальный размер как и для общих пулов (64Мб) максимальный рекоммендуется в половину от имеющейся ОЗУ т.к. это максимальный объем потенциально активных данных которые могут хранится на устр-ве

Снимки

Создаются моментально, место занимает только разность изменяемых впоследствии данных.
Хранятся в /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

Тюнинг

:!: Подробнее

site

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
 
linux/zfs.1698989379.txt.gz · Последнее изменение: 2023/11/03 05:29 — admin