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

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


linux:zfs

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:zfs [2023/11/03 05:14]
admin
linux:zfs [2024/02/15 10:34] (текущий)
admin
Строка 32: Строка 32:
  
 ===== Использование ===== ===== Использование =====
 +<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> <details>
 <summary>:!: Пулы</summary> <summary>:!: Пулы</summary>
 <code bash> <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 load-key tank/secure
 zfs mount tank/secure zfs mount tank/secure
 +</code>
  
-  # Перечень томов с инфой по ним 
-zpool list -vL 
  
-</code>+При создании пула выполняются проверки дисков на использование, но только на них полагаться не стоит\\ 
 +Для зеркала можно и нечетное кол-во, в каждом пуле можно создавать по несколько зеркал\\ 
 +При создании двух зеркал в одном пуле, создается еще одно вирт устр-во верхнего уровня. Данные наносятся полосами на оба зеркала, данные являются избыточными на каждом диске\\ 
 +Можно добавлять набор дисков, присоединять доп диски, замена дисков и удаление дисков из конфигурации если сохраняется избыточность. Удалять напрямую уст-ва или разбить их нет возможности\\ 
 + 
 +команда **zpool remove** поддерживает только удаление уст-в горячего резерва и уст-в кеширования. Уст-ва часть основной конфигурации зеркального пула могут быть удалены **zpool detach**. Уст-ва без избыточности и устр-ва RaidZ удалить из пула невозможно
 </details> </details>
  
Строка 72: Строка 124:
 ===== Конфигурация ===== ===== Конфигурация =====
 [[https://docs.oracle.com/cd/E19253-01/820-0836/gazss/index.html|Docs]]\\ [[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> <details>
 <summary>:!: Подробнее</summary> <summary>:!: Подробнее</summary>
 +Некоторые пар-ры прописаны в "/sys/module/icp/parameters", с-но и замена их будет в "/etc/modprobe.d/icp.conf"\\
 +
 +
 <code bash> <code bash>
-  # Текущие параметры+  # Текущее состояние
 zfs get [parameter || all]  zfs get [parameter || all] 
 zfs list -o [parameter || all] [FS-name] zfs list -o [parameter || all] [FS-name]
 +  # либо
 +cat /sys/module/zfs/parameters/PARAMETER
  
-  # Задать параметр+  # Задать параметр ФС
 zfs set [parameter=newvalue] [FS-name] zfs set [parameter=newvalue] [FS-name]
-  +  # Параметры пулу при создании (требуется проверить) 
 +zpool create -O compression=on pool mirror c0t1d0 c0t2d0 
 + 
   # Для сжатия можно указать тип и уровень   # Для сжатия можно указать тип и уровень
 zfs set compression=gzip-9 [FS-name] zfs set compression=gzip-9 [FS-name]
  
-  # +  # Текущие параметры в файлах 
-ls /sys/module/zfs/parameters/zfs_arc_min+ls /sys/module/zfs/parameters
  
-  # описание+  # описание параметров
 modinfo zfs modinfo zfs
 </code> </code>
Строка 97: Строка 170:
  
 ===== ARC ===== ===== ARC =====
 +
 <details> <details>
 <summary>:!: Подробнее</summary> <summary>:!: Подробнее</summary>
 [[https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/|Есть инфа]]\\ [[https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/|Есть инфа]]\\
 +Cache (Зеркалирование уст-в кеширования невозможно и они не могут быть частью RaidZ)\\
 +
 <code bash> <code bash>
-  # +## 
-arcstat+## Так то это похоже про 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 | more
 arc_summary -d | more arc_summary -d | more
 +
 +# пакет "zfs-stats" для линукса, самоделкин https://github.com/egidijus/zfs-tools/blob/master/README.md
 +zfs-stats -A
 +zfs-stats -E
 </code> </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> </details>
  
Строка 145: Строка 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>
 +<summary>:!: Подробнее</summary>
 +[[https://www.high-availability.com/docs/ZFS-Tuning-Guide/|site]]\\
 +
 +**ashift**\\
 +Размер блока (секторов) диска, должен совпадать с физическим размером у диска\\
 +Указывается как степень двойки т.е. "ashift=12 - 2^12 = 4096"
 +По умолчанию zfs пытается узнать его в ОС при создании пула, но механизм не надежный, дефолтное значение 512Б, для поддержки самых старых, у современных 4Кб а то и 8Кб, поэтому важно правильно указать\\
 +В случае указания размера меньше фактического, производительность очень сильно падает в связи с резким возрастанием ко-ва чтения/записи\\
 +MRU - недавно используемые\\
 +MFU - часто используемые\\
 +
 +
 +<code bash>
 +# Рекомендации из конфы
 +sudo zfs set recordsize=128K tank
 +sudo zfs set compression=lz4 tank
 +sudo zfs set logbias=throughput tank
 +</code>
 +
 +
 +<details>
 +<summary>:!: Про размеры секторов</summary>
 +[[https://wiki.archlinux.org/title/Advanced_Format_(%D0%A0%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9)|Advansed_format]]\\
 +
 +Для проверки фактического размера сектора есть утилиты выше, SSD обычно не показывают свой реальный размер, почему то, везде указано 512, хз что то\\
 +mkfs.ext4 по умолчанию использует размер 4096 для 512 и выше секторов\\
 +Тут неясный момент, если в ZFS укажу 16Кб, а в ОС используется 4Кб или 512, не будет ли переконвертации постоянно ? хотя файл ведь на диске хранится, если переносится то переносится, типа этот размер ведь к диску относится а не к программе какой то\\
 +В общем немного неясно, почему SSD не пишут, очевидно из за другой технологии, там что то со страницами связано. В общем соглащусь что как минимум 4Кб стоит указывать, а то и 8Кб, вот а когда 8 ?\\
 +кстати говоря, кластер это объединение секторов, связано с ограничениями того же FAT\\
 +Переход на размер 4096 называется расширенным форматом, произошел давненьеко, лет 15 назад уже конкретно, позволил сильно оптимизировать производство и повысить эффективность использования дисков\\
 + Собна 512 это наследие первых поколений ЖД, которое уже фктически изжилось\\
 +(с форума) Это логический размер, физический размер имеет значение для ZFS, и вот уже почти десять лет он составляет 4K. Ваш диск имеет формат 512e, который внутри использует 4K, но представляет 512 для ОС по соображениям совместимости
 +</details>
 +
 </details> </details>
  
  
linux/zfs.1698988476.txt.gz · Последнее изменение: 2023/11/03 05:14 — admin