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

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


linux:zfs

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:zfs [2023/09/15 06:08]
admin
linux:zfs [2024/02/15 10:34] (текущий)
admin
Строка 1: Строка 1:
 ====== ZFS ====== ====== ZFS ======
 +
 +[[:linux:zfs:deep_info|ZFS Deep Info]]\\
 +
 +===== Установка =====
 +<details>
 +<summary>:!: Подробнее</summary>
 +<code bash>
 +  # репозиторий 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
 +</code>
 +</details>
 +
 +
 +
 +===== Использование =====
 +<details>
 +<summary>:!: Тек состояние</summary>
 +<code bash>
 +zfs list  # dataset list
 +
 +zpool list [-L] [-v] # pool list 
 +zpool status [exist-pool] [-x]
 +zpool get all [exist-pool]
 +
 +  # какой то моментный срез, имеет смысл только с интервалом, иначе херабору показывает
 +  # кстати с разрезом по дискам, так же показывает L2
 +zpool iostat [pool-name] [interval_sec]
 +zpool iostat -v  # в разрезе по Vdev
 +
 +arcstat  # тут еще совсем небольшая статистика по ARC
 +
 +/proc/spl/kstat/zfs - ?
 +zpool history
 +</code>
 +</details>
 +
 +
 +<details>
 +<summary>:!: Пулы</summary>
 +<code bash>
 +  # Перечень пулов с инфой по ним
 +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 пробный прогон (?)
 +</code>
 +
 +Шифрование
 +<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
 +</code>
 +
 +
 +При создании пула выполняются проверки дисков на использование, но только на них полагаться не стоит\\
 +Для зеркала можно и нечетное кол-во, в каждом пуле можно создавать по несколько зеркал\\
 +При создании двух зеркал в одном пуле, создается еще одно вирт устр-во верхнего уровня. Данные наносятся полосами на оба зеркала, данные являются избыточными на каждом диске\\
 +Можно добавлять набор дисков, присоединять доп диски, замена дисков и удаление дисков из конфигурации если сохраняется избыточность. Удалять напрямую уст-ва или разбить их нет возможности\\
 +
 +команда **zpool remove** поддерживает только удаление уст-в горячего резерва и уст-в кеширования. Уст-ва часть основной конфигурации зеркального пула могут быть удалены **zpool detach**. Уст-ва без избыточности и устр-ва RaidZ удалить из пула невозможно
 +</details>
 +
 +
 +
 +<details>
 +<summary>:!: Датасеты (ФС)</summary>
 +Изменение пар-ов для ФС рекурсивно применяется ко всем ее дочерним\\
 +Отдельным ФС можно задавать свойства такие как exec,devices,readonly и т.д.\\
 +При создании снимка, с указанием "-r" рекурсивно создаются снимки дочерних ФС\\
 +
 +<code bash>
 +  # вложенные ФС
 +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...]
 +
 +</code>
 +</details>
 +
 +
 +
 +===== Конфигурация =====
 +[[https://docs.oracle.com/cd/E19253-01/820-0836/gazss/index.html|Docs]]\\
 +[[https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Module%20Parameters.html#zfs-arc-meta-limit|Здесь много параметров и описания к ним]]\\
 +
 +Текущее состояние отображено в файлах "cat /sys/module/zfs/parameters/PARAMETER"\\
 +Для динамических св-в, можно изменить значение там же, но для многих нужна перезагрузка, для этого записываем в созданный файл: "**/etc/modprobe.d/zfs.conf**"\\
 +<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>
 +
 +
 +<details>
 +<summary>:!: Подробнее</summary>
 +Некоторые пар-ры прописаны в "/sys/module/icp/parameters", с-но и замена их будет в "/etc/modprobe.d/icp.conf"\\
 +
 +
 +<code bash>
 +  # Текущее состояние
 +zfs get [parameter || all] 
 +zfs list -o [parameter || all] [FS-name]
 +  # либо
 +cat /sys/module/zfs/parameters/PARAMETER
 +
 +  # Задать параметр ФС
 +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
 +</code>
 +</details>
 +
 +
 +
 +===== ARC =====
 +
 +<details>
 +<summary>:!: Подробнее</summary>
 +[[https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/|Есть инфа]]\\
 +Cache (Зеркалирование уст-в кеширования невозможно и они не могут быть частью RaidZ)\\
 +
 +<code bash>
 +##
 +## Так то это похоже про L2ARC говорится, 
 +##   чтобы его добавить просто команда "zpool add pool cache sdX"
 +##   ну хотя да, основной ведь в памяти, не на каком диске же
 +##     после создания, диск видно в "zpool status -Lv"
 +
 +  # при создании пула
 +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>
 +
 +Настройка типа данных для кэширования\\
 +Применяется в рантайме\\
 +<code bash>
 +zfs get primarycache
 +zfs set primarycache=metadata tank/datab
 +</code>
 +
 +
 +<code bash>
 +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
 +</code>
 +
 +
 +
 +<details>
 +<summary>:!: Примечания</summary>
 +Адаптивный кэш используется всегда, все читаемые данные будут попадать сначала туда. По умолчанию использует всю доступную ОЗУ (в каких то пределах, оставляет какое то кол-во системе), но при этом имеет низкий приоритет т.е. когда кому то требуется памяти, а ее нет, то ARC освобождает ее по первому запросу, но нюанс в том что это происходит не мгновенно и требует времени\\
 +
 +Второй момент, исходит из первого, есть параметры задающие максимум для ARC, типа "arc_c_max" кажется, **он носит рекомендательный характер**, ARC скорее всего все равно будет его превышать\\
 +Он используется для **задания очистки**, которое выполняется периодически службой ZFS, это задание как раз и ориентируется на это рекомендательное значение принимая решение об очередной очистке кэша\\
 +
 +Метрики **_evictable** отображают сколько данных ZFS готова освободить при очередной итерации очистки\\
 +Прим: раз эта метрика не сбрасывается, хотя сбрасывается
 +
 +</details>
 +</details>
 +
 +
 +
 +===== ZIL =====
 +ZIL обеспечивает требования POSIX для синхронных транзакций, например транзакции БД\\
 +По умолчанию выделяется из блоков основного хранилища\\
 +
 +<details>
 +<summary>:!: Подробнее</summary>
 +<code bash>
 +  # при создании пула
 +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
 +</code>
 +
 +  * Повышение производительности в результате использования отдельного уст-ва зависит от типа устр-ва, состава оборудования пула и рабочей нагрузке (ссылка на перечень битая)
 +  * Эти устр-ва могут быть без репликации или с зеркалом, но RaidZ не поддеживается
 +  * Если на отдельном устр-ве не использвется зеркало то в случае выхода из строя, протоколирование автоматически перейдет в основной пулл хранения данных
 +  * С уст-вам протоколирования можно делать все кроме удаления
 +  * Минимальный размер как и для общих пулов (64Мб) максимальный рекоммендуется в половину от имеющейся ОЗУ т.к. это максимальный объем потенциально активных данных которые могут хранится на устр-ве 
 +</details>
 +
  
  
Строка 6: Строка 254:
 Хранятся в **/tank/.zfs/snapshot**. В открытом варианте, имеется доступ к файлам\\ Хранятся в **/tank/.zfs/snapshot**. В открытом варианте, имеется доступ к файлам\\
  
 +<details>
 +<summary>:!: Подробнее</summary>
 <code bash> <code bash>
   # Список снимков   # Список снимков
Строка 33: Строка 283:
 zfs send -i tank@2022-11-11 tank@2022-11-12 | ssh host2 zfs recv newtank/data zfs send -i tank@2022-11-11 tank@2022-11-12 | ssh host2 zfs recv newtank/data
 </code> </code>
 +</details>
  
  
 +===== Тюнинг =====
  
 <details> <details>
-<summary>:!: Использование </summary> +<summary>:!: Подробнее</summary> 
-<code bash> +[[https://www.high-availability.com/docs/ZFS-Tuning-Guide/|site]]\\
-  # Подключение шифрованного раздела +
-zfs load-key tank/secure +
-zfs mount tank/secure+
  
-  # Перечень томов с инфой по ним +**ashift**\\ 
-zpool list -vL+Размер блока (секторов) диска, должен совпадать с физическим размером у диска\\ 
 +Указывается как степень двойки т.е. "ashift=12 - 2^12 = 4096" 
 +По умолчанию zfs пытается узнать его в ОС при создании пула, но механизм не надежный, дефолтное значение 512Б, для поддержки самых старых, у современных 4Кб а то и 8Кб, поэтому важно правильно указать\\ 
 +В случае указания размера меньше фактического, производительность очень сильно падает в связи с резким возрастанием ко-ва чтения/записи\\ 
 +MRU - недавно используемые\\ 
 +MFU - часто используемые\\
  
-  #  + 
-zfs get compression+<code bash> 
 +Рекомендации из конфы 
 +sudo zfs set recordsize=128K tank 
 +sudo zfs set compression=lz4 tank 
 +sudo zfs set logbias=throughput tank
 </code> </code>
-</details> 
- 
  
  
 <details> <details>
-<summary>:!: Параметры</summary> +<summary>:!: Про размеры секторов</summary> 
-<code bash> +[[https://wiki.archlinux.org/title/Advanced_Format_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)|Advansed_format]]\\
-  # +
-ls /sys/module/zfs/parameters/zfs_arc_min+
  
-  # описание +Для проверки фактического размера сектора есть утилиты выше, SSD обычно не показывают свой реальный размер, почему то, везде указано 512, хз что то\\ 
-modinfo zfs+mkfs.ext4 по умолчанию использует размер 4096 для 512 и выше секторов\\ 
 +Тут неясный момент, если в ZFS укажу 16Кб, а в ОС используется 4Кб или 512, не будет ли переконвертации постоянно ? хотя файл ведь на диске хранится, если переносится то переносится, типа этот размер ведь к диску относится а не к программе какой то\\ 
 +В общем немного неясно, почему SSD не пишут, очевидно из за другой технологии, там что то со страницами связано. В общем соглащусь что как минимум 4Кб стоит указывать, а то и 8Кб, вот а когда 8 ?\\ 
 +кстати говоря, кластер это объединение секторов, связано с ограничениями того же FAT\\ 
 +Переход на размер 4096 называется расширенным форматом, произошел давненьеко, лет 15 назад уже конкретно, позволил сильно оптимизировать производство и повысить эффективность использования дисков\\ 
 + Собна 512 это наследие первых поколений ЖД, которое уже фктически изжилось\\ 
 +(с форума) Это логический размер, физический размер имеет значение для ZFS, и вот уже почти десять лет он составляет 4K. Ваш диск имеет формат 512e, который внутри использует 4K, но представляет 512 для ОС по соображениям совместимости 
 +</details>
  
-  # 
- 
- 
-</code> 
 </details> </details>
- 
- 
  
  
linux/zfs.1694758096.txt.gz · Последнее изменение: 2023/09/15 06:08 — admin