2022-09-25 Unraid

Один из серверов домашней лаборатории - домашний NAS / сервер виртуализации который должен работать всегда. На нём работают необходимая тройка контейнеров и парочка виртуальных машин. В качестве операционной системы в данный момент используется дистрибутив Unraid.

Unraid — это платный дистрибутив домашнего файлового сервера с обязательной для всех поддержкой контейнеров и виртуализации. Основное отличие этого дистрибутива в проприетарной технологии защиты от выхода из строя дисков (вместо RAID). В данной ОС не предусмотрено использование RAID поэтому видимо и было выбрано название unRAID.

Список возможностей на словах выглядит внушающее:

  • Многоуровневое хранение с поддержкой двух уровней (об этом подробнее ниже);
  • Загрузка с USB (это единственный вариант запуска системы);
  • Встроенный магазин приложений;
  • Встроенная поддержка виртуальных машин и Docker движок;
  • Встроенная поддержка WireGuard;

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

  • Объединять в одну unRAID группу до 30 дисков;
  • Поддержка уровня защиты от одновременного выхода из строя до двух дисков;
  • Диски в группе могут быть любого объема и любых характеристик (если это HDD).

ОС поддерживает следующие дополнительные к unRAID группе способы хранения:

  • до 35 пулов по 30 дисков каждый, которые могут быть объединены в Stripe или Mirror (средствами BTRFS);
  • подключение внешних дисков и файловых шар;
  • плагин для поддержки ZFS;

Лицензирование

Лицензируется только количество дисков в unRAID группе. На 2022 год существует 3 вида лицензий:

  1. Basic - 6 дисков, $59;
  2. Plus - 12 дисков, $89;
  3. Pro - без ограничений (30 дисков) - $129;

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

Многоуровневое хранение

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

В системе данный функционал называется “Cache Pool” и реализован он достаточно просто:

  1. Новые данные пишутся на SSD диски;
  2. По расписанию запускается команда mover - модифицированная версия rsync которая прозрачно переносит файлы с SSD на HDD;

Основные характеристики пула в таблице, в Enterprise-терминах:

Параметр Значение
Уровни хранения 2
Тип кэш-дисков Любой
Емкость кэш-дисков добавляется к хранилищу Да
Кол-во кэш-дисков на шару до 30
Уровень RAID кэш-дисков RAID0 / RAID1
Как данные попадают в кэш При записи в шару
Какие данные покидают кэш По расписанию

Система поддерживает до 35 именных пулов, каждый из которых может состоять из 30 дисков. В пуле работает файловая система BTRFS и штатно поддерживается либо Stripe либо Mirror.

Для каждой шары (так тут называются системные папки, даже если к ним нет общего доступа) поддерживается установка трёх режимов работы с пулом:

  1. “No” - данные записываются сразу в unRAID группу, минуя Cache Pool;
  2. “Yes” - данные записываются в Cache Pool, по расписанию все данные этой шары из Cache Pool копируются в unRAID группу;
  3. “Prefer”- данные записываются в Cache Pool, по расписанию все данные этой шары из unRAID группы (если они там есть) копируются в Cache Pool, если там достаточно места. Если в Cache Pool недостаточно места данные записываются в unRAID группу.
  4. “Only” - данные записываются в Cache Pool и, если там недостаточно места - выдается ошибка.

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

Разметка дисков с использованием ZFS

Встроенная в unraid технология защиты от выхода из строя дисков обладает не только преимуществом объединения дисков любой ёмкости но и очень существенным недостатком - это низкая производительность и высокий расход ресурсов сервера.

Среди множества технологий и подходов по-настоящему кроссплатформенной схемой объединения дисков в NAS системах SOHO уровня является ZFS. Пулы собранные в TrueNAS, XigmaNAS, OMV, PVE или просто в Linux везде работают, импортируются и позволяют менять дистрибутив без необходимости миграции данных.

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

На текущий момент пользователь может использовать ZFS пулы в системе, но с помощью стороннего плагина ZFS for unRAID 6. В нем содержатся все необходимые компоненты для поддержки файловой системы на уровне ядра ОС. Все администрирование производится из командной строки, а интеграция со стороны NAS полностью отсутствует.

При работе с ZFS следует иметь ввиду ряд следующих ограничений:

  1. Системный функционал Docker и KVM работает только когда массив запущен.
  2. Массив может состоять минимум из одного диска или ssd накопителя.
  3. Не обязательно хранить на массиве unraid какие либо данные. Расположение docker файлов и виртуальных машин можно изменить в интерфейсе.
  4. Шары не создаются на ZFS.
Как поделиться папкой с ZFS по SMB

Встроенные шары не могут быть созданы на ZFS, а если изменить файл smb.conf он будет возвращен в исходное состояние при перезапуске массива. Для сохранения изменений необходимо внести раздел с требуемой общей папкой в SMB Extras.

Settings > SMB > SMB Extras

Синтаксис обычный для smb.conf файла, пример ниже.

Публичный доступ
[share]
        path = /mnt/tank/share
        comment = 
        browseable = yes
        # Public
        public = yes
        writeable = no
        vfs objects = catia fruit streams_xattr
        case sensitive = auto
        preserve case = yes
        short preserve case = yes
Доступ с авторизацией (private)
[private]
        path = /mnt/tank/private
        comment = 
        browseable = yes
        # Private
        writeable = no
        read list = 
        write list = username,username2
        valid users =  username,username2
        case sensitive = auto
        preserve case = yes
        short preserve case = yes
        vfs objects = catia fruit streams_xattr
        fruit:encoding = native

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