Лучшие свойства и функции zpool для HDD ZFS

Вопрос или проблема

какие свойства и функции я должен использовать для нормального и зеркального пула? (на ZFS на Linux на Ubuntu/Arch/Manjaro)

У меня есть два жестких диска по 4 ТБ, и я хочу создать два пула:

  1. нормальный (RAID0): с первыми 500Гб на 1-м диске и 500Гб на 2-м диске (всего ~1ТБ)
  2. зеркальный (RAID1): с оставшейся частью 1-го диска и оставшейся частью 2-го диска (всего ~3,5ТБ)

нормальный пул будет использоваться как универсальное рабочее хранилище, вероятно, будет иметь один набор данных и должен быть максимально быстрым, он будет хранить временные данные, такие как большие наборы данных нейросетей для тренировок

зеркальный пул будет использоваться как надежное архивное хранилище, он будет иметь два набора данных

  1. snap: который будет получать снимки каталога /home из другого пула с SSD
  2. vault: который будет хранить ценные данные

лично я думаю о сжатии zstd для mirror и сжатии lz4 для normal

что делают эти свойства (они применяются к bpool и rpool на SSD, как предложено в руководстве ZOL для Ubuntu)

ashift=12  
acltype=posixacl  
canmount=off  
normalization=formD  
relatime=on  
xattr=sa  
dnodesize=auto

Ответ или решение

Для оптимальной работы с ZFS на Linux, особенно в дистрибутивах Ubuntu, Arch или Manjaro, настройка пула из дисков HDD требует продуманного подхода к выбору свойств и функций. Рассмотрим, какие параметры и функции стоит использовать для пулов «normal» (RAID0) и «mirror» (RAID1), исходя из вашего сценария.

Теория (Theory)

ZFS (Zettabyte File System) предоставляет множество функций, улучшающих производительность, надежность и управление данными. При работе с жесткими дисками (HDD), важными факторами являются скорость доступа, надежность данных и эффективное использование пространства.

  1. ashift=12: Это свойство определяет размер блока для чтения и записи на диске. Для современных HDD рекомендуется использовать ashift=12 (или 4К блоки), чтобы обеспечить оптимальную производительность и совместимость, что особенно актуально для больших объемов данных.

  2. acltype=posixacl: Данное свойство включает поддержку POSIX ACL (Access Control List) — полезно для систем, где необходимо детальное управление доступом к файлам. Это особенно актуально, если данные хранятся для совместного использования различными пользователями и процессами.

  3. canmount=off: Эта настройка предотвращает автоматическое монтирование файловой системы и часто используется для созданий вложенных файловых систем, например, для определенных специфических нужд, таких как бэкап или снэпшоты.

  4. normalization=formD: Нормализация помогает решить проблемы с кодировками в именах файлов. Использование формата Form D обеспечит лучшую совместимость в мультиязычных и мультиплатформенных средах.

  5. relatime=on: Обновляет время доступа файлов только если оно больше времени модификации или когда файл изменяется. Это улучшает производительность за счет уменьшения количества операций записи, что особенно актуально для HDD.

  6. xattr=sa: Хранение дополнительных данных в расширенных атрибутах улучшает производительность, поскольку они хранятся непосредственно в inode, что сокращает количество операций ввода-вывода.

  7. dnodesize=auto: Динамично определяет размер dnode, позволяя более эффективное распределение данных в зависимости от их объема и структуры, что полезно для хранилищ с изменяющимися требованиями.

Пример (Example)

Из вашего описания следует, что вам необходимо создать два пула: один для временных быстрых данных, и второй для надежного хранения. Первый пул «normal» будет работать в режиме RAID0, что обеспечивает максимальную скорость записи и чтения. Второй пул «mirror» обеспечит надежное хранение данных с использованием RAID1, что дублирует каждый блок данных на оба диска.

Применение (Application)

Конфигурация пула normal (RAID0)

  • Основная задача: Максимальная скорость для временного хранения больших объемов данных.
  • Рекомендации:
    • Используйте lz4 компрессию, как вы и указали. lz4 предлагает хорошую компрессию с минимальными затратами по производительности, что идеально для быстрого доступа к временным данным.
    • Настройте ashift=12 для оптимальной производительности на современных HDD.
    • Включите relatime=on для уменьшения количества операций записи.

Код для создания пула:

zpool create normal raidz1 /dev/sda1 /dev/sdb1 -o ashift=12 -o relatime=on -O compression=lz4

Конфигурация пула mirror (RAID1)

  • Основная задача: Надежное, устойчивое к ошибкам хранилище для критически важных данных.
  • Рекомендации:
    • Используйте zstd компрессию. Это обеспечит лучшее соотношение компрессии, что важно для экономии пространства на архивных данных.
    • Включите acltype=posixacl для обеспечения детального управления доступом.
    • Активируйте xattr=sa для улучшенной скорости доступа к метаданным.

Код для создания пула:

zpool create mirror mirror /dev/sda2 /dev/sdb2 -o ashift=12 -o acltype=posixacl -o xattr=sa -O compression=zstd

Управление файловыми системами

Для пула mirror необходимо создать отдельные datasets:

zfs create mirror/snap
zfs create mirror/vault

Эти настройки и свойства помогут оптимизировать работу вашей системы, обеспечив высокой производительность для пула нормальных данных и надежность для пулов зеркальных. Настройки также обеспечивают гибкость и масштабируемость для будущих расширений и изменений конфигурации.

Оцените материал
Добавить комментарий

Капча загружается...