Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:zfs [2022/12/16 05:44] admin |
linux:zfs [2024/02/15 10:34] (текущий) admin |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== ZFS ====== | ====== ZFS ====== | ||
+ | |||
+ | [[: | ||
+ | |||
+ | ===== Установка ===== | ||
+ | < | ||
+ | < | ||
+ | <code bash> | ||
+ | # репозиторий ZFS для Almalinux | ||
+ | sudo dnf install https:// | ||
+ | |||
+ | dnf repolist # перечень репозиториев | ||
+ | |||
+ | # Установка пакетов ZFS | ||
+ | dnf config-manager --disable zfs | ||
+ | dnf config-manager --enable zfs-kmod | ||
+ | dnf install zfs | ||
+ | |||
+ | sudo / | ||
+ | |||
+ | systemctl -a | grep zfs # загруженные модули | ||
+ | list-unit-files | grep zfs # загруженные утилиты | ||
+ | |||
+ | ls -l / | ||
+ | smartctl -a /dev/sda # информация по диску (в т.ч. размер секторов) | ||
+ | lsblk -td | ||
+ | hdparm -I /dev/sdb | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Использование ===== | ||
+ | < | ||
+ | < | ||
+ | <code bash> | ||
+ | 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 | ||
+ | |||
+ | / | ||
+ | zpool history | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | <code bash> | ||
+ | # Перечень пулов с инфой по ним | ||
+ | zpool list -vL | ||
+ | |||
+ | # создание пула | ||
+ | zpool create [-o ashift=12] [pool-name] mirror [diskID1] [diskID2] [diskID3] | ||
+ | # (можно перечислить пару раз mirror [disk] [disk], для создания нескольких зеркал) | ||
+ | # для создания пула Raidz команда аналогична, | ||
+ | |||
+ | # добавление дисков | ||
+ | zpool add [-o ashift=12] [exist-pool] mirror [diskID4] | ||
+ | # -f для изменения степени избыточности | ||
+ | # -n пробный прогон (?) | ||
+ | </ | ||
+ | |||
+ | Шифрование | ||
+ | <code bash> | ||
+ | # Параметр шифрования | ||
+ | zfs get encryption tank/secure | ||
+ | |||
+ | # Создание пула с шифрованием | ||
+ | zfs create -o encryption=on -o keylocation=prompt -o keyformat=passphrase tank/secure | ||
+ | |||
+ | # Отключение шифрованного пула | ||
+ | zfs unload-key tank/secure | ||
+ | zfs unmount tank/secure | ||
+ | |||
+ | # Загрузка шифрованного пула | ||
+ | zfs load-key tank/secure | ||
+ | zfs mount tank/secure | ||
+ | </ | ||
+ | |||
+ | |||
+ | При создании пула выполняются проверки дисков на использование, | ||
+ | Для зеркала можно и нечетное кол-во, | ||
+ | При создании двух зеркал в одном пуле, создается еще одно вирт устр-во верхнего уровня. Данные наносятся полосами на оба зеркала, | ||
+ | Можно добавлять набор дисков, | ||
+ | |||
+ | команда **zpool remove** поддерживает только удаление уст-в горячего резерва и уст-в кеширования. Уст-ва часть основной конфигурации зеркального пула могут быть удалены **zpool detach**. Уст-ва без избыточности и устр-ва RaidZ удалить из пула невозможно | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Изменение пар-ов для ФС рекурсивно применяется ко всем ее дочерним\\ | ||
+ | Отдельным ФС можно задавать свойства такие как exec, | ||
+ | При создании снимка, | ||
+ | |||
+ | <code bash> | ||
+ | # вложенные ФС | ||
+ | zfs create pool-name/ | ||
+ | zfs create pool-name/ | ||
+ | zfs destroy pool-name/ | ||
+ | |||
+ | # указание ДС с рекурсивным выводом | ||
+ | zfs list [-r] [ds-name] | ||
+ | |||
+ | # выбор полей для вывода | ||
+ | zfs list [-o name, | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Конфигурация ===== | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | |||
+ | Текущее состояние отображено в файлах "cat / | ||
+ | Для динамических св-в, можно изменить значение там же, но для многих нужна перезагрузка, | ||
+ | <code bash> | ||
+ | options zfs PARAMETER=VALUE | ||
+ | options zfs zfs_arc_max=2147483648 | ||
+ | options zfs zfs_arc_min=1073741824 | ||
+ | |||
+ | # Затем обновление плагинов командой | ||
+ | sudo update-initramfs -u -k all | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Некоторые пар-ры прописаны в "/ | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | # Текущее состояние | ||
+ | zfs get [parameter || all] | ||
+ | zfs list -o [parameter || all] [FS-name] | ||
+ | # либо | ||
+ | cat / | ||
+ | |||
+ | # Задать параметр ФС | ||
+ | zfs set [parameter=newvalue] [FS-name] | ||
+ | # Параметры пулу при создании (требуется проверить) | ||
+ | zpool create -O compression=on pool mirror c0t1d0 c0t2d0 | ||
+ | |||
+ | |||
+ | # Для сжатия можно указать тип и уровень | ||
+ | zfs set compression=gzip-9 [FS-name] | ||
+ | |||
+ | # Текущие параметры в файлах | ||
+ | ls / | ||
+ | |||
+ | # описание параметров | ||
+ | modinfo zfs | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== ARC ===== | ||
+ | |||
+ | < | ||
+ | < | ||
+ | [[https:// | ||
+ | Cache (Зеркалирование уст-в кеширования невозможно и они не могут быть частью RaidZ)\\ | ||
+ | |||
+ | <code bash> | ||
+ | ## | ||
+ | ## Так то это похоже про L2ARC говорится, | ||
+ | ## | ||
+ | ## ну хотя да, основной ведь в памяти, | ||
+ | ## | ||
+ | |||
+ | # при создании пула | ||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | Настройка типа данных для кэширования\\ | ||
+ | Применяется в рантайме\\ | ||
+ | <code bash> | ||
+ | zfs get primarycache | ||
+ | zfs set primarycache=metadata tank/datab | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code bash> | ||
+ | arcstat | ||
+ | |||
+ | arc_summary | more | ||
+ | arc_summary -d | more | ||
+ | |||
+ | # пакет " | ||
+ | zfs-stats -A | ||
+ | zfs-stats -E | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Адаптивный кэш используется всегда, | ||
+ | |||
+ | Второй момент, | ||
+ | Он используется для **задания очистки**, | ||
+ | |||
+ | Метрики **_evictable** отображают сколько данных ZFS готова освободить при очередной итерации очистки\\ | ||
+ | Прим: раз эта метрика не сбрасывается, | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ===== ZIL ===== | ||
+ | ZIL обеспечивает требования POSIX для синхронных транзакций, | ||
+ | По умолчанию выделяется из блоков основного хранилища\\ | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <code bash> | ||
+ | # при создании пула | ||
+ | zpool create tank mirror [disk1] log [mirror] [LodDisk1] | ||
+ | # ps. "с зеркальными устр-ми протоколирования" | ||
+ | zpool add [exist-pool] log mirror [LogDisk1] [LogDisk2] | ||
+ | zpool add -o ashift=12 tank log nvme-INTEL_SSDPE2KX010T8_BTLJ904509X61P0FGN-part1 | ||
+ | </ | ||
+ | |||
+ | * Повышение производительности в результате использования отдельного уст-ва зависит от типа устр-ва, | ||
+ | * Эти устр-ва могут быть без репликации или с зеркалом, | ||
+ | * Если на отдельном устр-ве не использвется зеркало то в случае выхода из строя, протоколирование автоматически перейдет в основной пулл хранения данных | ||
+ | * С уст-вам протоколирования можно делать все кроме удаления | ||
+ | * Минимальный размер как и для общих пулов (64Мб) максимальный рекоммендуется в половину от имеющейся ОЗУ т.к. это максимальный объем потенциально активных данных которые могут хранится на устр-ве | ||
+ | </ | ||
+ | |||
Строка 6: | Строка 254: | ||
Хранятся в **/ | Хранятся в **/ | ||
+ | < | ||
+ | < | ||
<code bash> | <code bash> | ||
# Список снимков | # Список снимков | ||
Строка 33: | Строка 283: | ||
zfs send -i tank@2022-11-11 tank@2022-11-12 | ssh host2 zfs recv newtank/ | zfs send -i tank@2022-11-11 tank@2022-11-12 | ssh host2 zfs recv newtank/ | ||
</ | </ | ||
+ | </ | ||
+ | ===== Тюнинг ===== | ||
- | ===== Использование ===== | + | < |
+ | < | ||
+ | [[https:// | ||
- | <code bash> | + | **ashift**\\ |
- | # Подключение | + | Размер блока (секторов) |
- | zfs load-key tank/secure | + | Указывается как степень двойки т.е. " |
- | zfs mount tank/secure | + | По умолчанию zfs пытается узнать его в ОС при создании пула, но механизм не надежный, |
+ | В случае указания размера меньше фактического, производительность очень сильно падает в связи с резким возрастанием ко-ва чтения/записи\\ | ||
+ | MRU - недавно используемые\\ | ||
+ | MFU - часто используемые\\ | ||
- | # Перечень томов с инфой по ним | ||
- | zpool list -vL | ||
- | | + | <code bash> |
- | zfs get compression | + | # Рекомендации из конфы |
+ | sudo zfs set recordsize=128K tank | ||
+ | sudo zfs set compression=lz4 tank | ||
+ | sudo zfs set logbias=throughput tank | ||
</ | </ | ||
+ | < | ||
+ | < | ||
+ | [[https:// | ||
- | <code bash> | + | Для проверки фактического размера сектора есть утилиты выше, SSD обычно не показывают свой реальный размер, |
- | </code> | + | mkfs.ext4 по умолчанию использует размер 4096 для 512 и выше секторов\\ |
+ | Тут неясный момент, | ||
+ | В общем немного неясно, | ||
+ | кстати говоря, | ||
+ | Переход на размер 4096 называется расширенным форматом, | ||
+ | Собна 512 это наследие первых поколений ЖД, которое уже фктически изжилось\\ | ||
+ | (с форума) Это логический размер, | ||
+ | </details> | ||
+ | |||
+ | </details> | ||