Файловая система TrueNAS: ZFS, создание пулов, настройка SMB/NFS | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Файловая система TrueNAS: Полное руководство по ZFS, настройке и оптимизации

21 февраля 2026 8 мин. чтения #devops #nas #truenas #zfs #пулы #системное администрирование #файловая система #хранение данных

Представь, что тебе нужно построить надежное, масштабируемое и быстрое хранилище данных для твоего проекта или компании. Ты слышал о TrueNAS, но столкнулся с вопросом: какую файловую систему выбрать и как ее правильно настроить? Давай разберемся вместе. В этой статье я, как Senior DevOps ментор, проведу тебя от основ ZFS до продвинутых настроек производительности.

Что такое файловая система в TrueNAS? Основы ZFS

В сердце TrueNAS лежит ZFS (Zettabyte File System) — это не просто файловая система, а целая экосистема управления хранилищем. В отличие от традиционных FS (вроде ext4 или NTFS), ZFS объединяет функции файловой системы и менеджера томов, предоставляя уникальные возможности.

Ключевая фишка: ZFS использует модель копирования при записи (Copy-on-Write), что исключает повреждение данных и позволяет делать моментальные снапшоты без нагрузки на систему.

Ключевые компоненты ZFS в TrueNAS

  • Пул (Pool): Основная единица хранения. Создается из одного или нескольких устройств (дисков, SSD).
  • Vdev (Virtual Device): Группа дисков внутри пула, организованная по определенному типу RAID (mirror, raidz1, raidz2, raidz3).
  • Набор данных (Dataset): Логическое разделение внутри пула (аналог папки), но с собственными настройками квот, компрессии и снапшотов.
  • Zvol (ZFS Volume): Блочное устройство, эмулирующее диск, часто используется для iSCSI.

Создание и настройка пула ZFS в TrueNAS

Давай пройдем практический путь от установки дисков до готового к работе хранилища.

Шаг 1: Планирование структуры Vdev

Перед созданием пула критически важно выбрать правильный тип Vdev. Вот сравнение основных конфигураций:

Тип Vdev Минимум дисков Отказоустойчивость Эффективная емкость Использование
Stripe 1 Нет (любой отказ диска = потеря данных) 100% Только для тестов, временных данных
Mirror 2 (можно больше) Высокая (выдерживает отказ N-1 дисков в зеркале) 50% (для 2 дисков) Высокая производительность, важные данные (VM, БД)
RAIDZ1 (аналог RAID5) 3+ Одна парность (выдерживает отказ 1 диска) (N-1)/N Баланс емкости и надежности для дома/малого бизнеса
RAIDZ2 (аналог RAID6) 4+ Двойная парность (выдерживает отказ 2 дисков) (N-2)/N Критичные данные, большие массивы
Важное правило ZFS: Добавлять диски в существующий пул можно только целыми Vdev. Нельзя добавить один диск к RAIDZ1 — только еще одну группу RAIDZ1 или Mirror. Планируй рост заранее!

Шаг 2: Создание пула через Web-интерфейс

Переходим в Storage → Pools → ADD. Допустим, у нас 4 диска по 4 ТБ, и мы хотим RAIDZ1.

  1. Нажимаем "CREATE POOL".
  2. Вводим имя пула, например tank.
  3. Перетаскиваем все 4 диска в область "Data VDevs".
  4. В выпадающем меню выбираем тип RAIDZ1.
  5. (Опционально) Добавляем SSD в качестве кэша (L2ARC) и лога (SLOG) для ускорения.
  6. Нажимаем "CREATE".

Шаг 3: Настройка параметров файловой системы (Dataset)

После создания пула создадим Dataset для конкретных задач. Например, для медиатеки и резервных копий.

CLI / Shell
# Создадим два набора данных с разными настройками через CLI TrueNAS
# Подключись по SSH или используй Shell в Web-интерфейсе

# 1. Dataset для медиафайлов (видео, музыка) — приоритет на емкость
zfs create tank/media
zfs set compression=lz4 tank/media        # Быстрая компрессия, сэкономит место
zfs set atime=off tank/media               # Отключаем запись времени доступа для производительности
zfs set recordsize=1M tank/media           # Крупные блоки для больших файлов

# 2. Dataset для баз данных или виртуальных машин — приоритет на скорость
zfs create tank/vms
zfs set compression=zstd-fast tank/vms     # Более агрессивная компрессия
zfs set recordsize=16K tank/vms           # Маленькие блоки для маленьких операций ввода-вывода
zfs set sync=always tank/vms               # Гарантия записи (важно для данных БД)
zfs set primarycache=metadata tank/vms     # Кэшируем только метаданные в RAM для экономии

Настройка сетевого доступа (SMB/NFS)

Файловая система готова, теперь дай доступ пользователям.

Настройка общего доступа SMB (Samba) для Windows/Mac

  1. Идем в Sharing → Windows Shares (SMB) → ADD.
  2. Выбираем путь: /mnt/tank/media.
  3. Задаем имя общего ресурса, например Media.
  4. Включаем опцию "Enable ACLs" для тонкого управления правами.
  5. Настраиваем права доступа через Storage → Pool → Dataset → Permissions.
config / SMB ACL Example
# Пример настройки прав через ACL для dataset 'media'
# Владелец: группа 'media', пользователь 'admin'

# Просмотр текущих ACL (из Shell TrueNAS)
getfacl /mnt/tank/media

# Установка ACL (рекурсивно для всех файлов)
setfacl -R -m g:media:rwx /mnt/tank/media
setfacl -R -m u:admin:rwx /mnt/tank/media
setfacl -R -m d:g:media:rwx /mnt/tank/media  # Наследуемые права по умолчанию

Настройка общего доступа NFS для Linux/VM

Идеально для подключения в гипервизоры (Proxmox, ESXi) или Linux-клиенты.

  1. Идем в Sharing → Unix Shares (NFS) → ADD.
  2. Выбираем путь: /mnt/tank/vms.
  3. Указываем сеть клиентов, например 192.168.1.0/24.
  4. Выставляем права: rw (чтение/запись), root_squash (для безопасности).
  5. На клиенте монтируем: mount -t nfs truenas.local:/mnt/tank/vms /mnt/nfs.

Оптимизация производительности файловой системы

ZFS может "летать", если его правильно настроить. Вот ключевые параметры.

Тюнинг через sysctl (в Advanced Settings)

config / sysctl tuning
# Эти параметры можно задать в TrueNAS через
# System → Tunables → ADD

# Увеличиваем ARC (кэш в RAM) для систем с большим объемом ОЗУ
vfs.zfs.arc_max = 4294967296  # 4 ГБ в байтах

# Оптимизация для SSD или быстрых дисков
vfs.zfs.vdev.async_write_max_active = 64
vfs.zfs.vdev.sync_write_max_active = 64

# Ускоряем операции с метаданными
vfs.zfs.prefetch_disable = 0  # Включить предзагрузку
vfs.zfs.txg.timeout = 5       # Чаще сбрасывать транзакции (опасно при сбое питания!)
Внимание с тюнингом! Неправильные настройки могут привести к потере данных или нестабильности. Всегда тестируй изменения в тестовой среде и имей актуальные бэкапы.

Использование специальных Vdev: SLOG и L2ARC

  • SLOG (Separate Intent Log): Выделенный SSD (желательно с конденсатором) для синхронных операций записи (NFS sync, БД). Ускоряет только sync writes.
  • L2ARC (Level 2 ARC): SSD-кэш для чтения. Эффективен, только если у тебя горячие данные не помещаются в ОЗУ (ARC). Может "съедать" RAM под свои индекс.

Добавляются при создании пула или через Pool → Settings → Add Vdev.

Мониторинг и обслуживание

ZFS требует минимального, но регулярного обслуживания.

Проверка целостности (Scrub)

Scrub — это профилактическое чтение всех данных и проверка контрольных сумм. Настраивается в Storage → Pools → Scrub Tasks. Рекомендуемый график — раз в месяц.

CLI / Проверка статуса
# Запустить scrub вручную
zpool scrub tank

# Проверить статус пула и прогресс scrub
zpool status tank

# Просмотреть ошибки (должно быть 0)
zpool status -x

# Проверить статистику по ошибкам
zpool status -v

Снапшоты и репликация

Сильнейшая сторона ZFS. Снапшоты занимают минимум места (только изменения) и создаются мгновенно.

CLI / Снапшоты
# Создать снапшот dataset 'media'
zfs snapshot tank/media@$(date +%Y%m%d_%H%M)
# Или так
zfs snapshot tank/media@backup_before_update

# Просмотреть все снапшоты
zfs list -t snapshot

# Восстановить файл из снапшота
# 1. Найти нужный снапшот
# 2. Скопировать файл из скрытой папки .zfs
cp /mnt/tank/media/.zfs/snapshot/backup_before_update/movie.mp4 /mnt/tank/media/

# Удалить старый снапшот
zfs destroy tank/media@old_snapshot_name

Частые проблемы и их решение

Проблема: Мало места, хотя данные удалялись

ZFS не освобождает пространство автоматически при удалении файлов, если есть снапшоты, которые на эти файлы ссылаются. Решение: удалить старые снапшоты или установить квоту на их общий размер.

Проблема: Низкая скорость записи

Возможные причины: 1) sync=always на dataset для асинхронных нагрузок (поменять на standard), 2) нет SLOG для sync операций, 3) дисковая подсистема перегружена (проверить iostat).

Проблема: Не загружается пул после обновления

ZFS имеет версии функций. Если пул был обновлен до новой версии, его нельзя импортировать на системе со старым кодом ZFS. Решение: загрузиться с предыдущей версии TrueNAS или импортировать в режиме только для чтения: zpool import -o readonly=on tank.

Итог: Best Practices для файловой системы TrueNAS

  • Планируй Vdev с запасом. Добавить диски потом можно только целыми группами.
  • Используй разные типы Dataset под разные задачи (медиа, БД, бэкапы) с индивидуальными настройками recordsize и compression.
  • Обязательно настройте периодические снапшоты и scrub. Это твоя страховка от сбоев и битых данных.
  • Не экономь на RAM для ZFS. ARC (кэш) напрямую влияет на производительность. Минимум 8 ГБ, для серьезных задач — 32+ ГБ.
  • Документируй конфигурацию пула. Сохрани вывод zpool status и zpool get all tank в надежном месте.

Файловая система TrueNAS (ZFS) — это мощный инструмент, который, будучи правильно настроенным, обеспечивает беспрецедентную надежность и производительность. Начни с простой конфигурации, изучи мониторинг, а затем экспериментируй с оптимизациями под свою конкретную нагрузку.

Поделиться:
Сохранить гайд? В закладки браузера