meta data for this page
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 вида лицензий:
- Basic - 6 дисков, $59;
- Plus - 12 дисков, $89;
- Pro - без ограничений (30 дисков) - $129;
Лицензия приобретается одноразово, подписки нет, техподдержка сообществом. Лицензия привязывается к GUID флеш-диска с которого система загружается, поддерживается смена GUID лицензии при гибели флешки. Есть пробный период, и возможность докупить лицензию до более высокого уровня за разницу в цене.
Многоуровневое хранение
Функционал многоуровневого хранения поддерживает использование выделенных пулов для ускорения операций записи (подразумевается, что это будут быстрые диски, хотя никто вас не ограничивает в выборе) и фиксации определенных папок в данном пуле.
В системе данный функционал называется “Cache Pool” и реализован он достаточно просто:
- Новые данные пишутся на SSD диски;
- По расписанию запускается команда
mover
- модифицированная версия rsync которая прозрачно переносит файлы с SSD на HDD;
Основные характеристики пула в таблице, в Enterprise-терминах:
Параметр | Значение |
---|---|
Уровни хранения | 2 |
Тип кэш-дисков | Любой |
Емкость кэш-дисков добавляется к хранилищу | Да |
Кол-во кэш-дисков на шару | до 30 |
Уровень RAID кэш-дисков | RAID0 / RAID1 |
Как данные попадают в кэш | При записи в шару |
Какие данные покидают кэш | По расписанию |
Система поддерживает до 35 именных пулов, каждый из которых может состоять из 30 дисков. В пуле работает файловая система BTRFS и штатно поддерживается либо Stripe либо Mirror.
Для каждой шары (так тут называются системные папки, даже если к ним нет общего доступа) поддерживается установка трёх режимов работы с пулом:
- “No” - данные записываются сразу в unRAID группу, минуя Cache Pool;
- “Yes” - данные записываются в Cache Pool, по расписанию все данные этой шары из Cache Pool копируются в unRAID группу;
- “Prefer”- данные записываются в Cache Pool, по расписанию все данные этой шары из unRAID группы (если они там есть) копируются в Cache Pool, если там достаточно места. Если в Cache Pool недостаточно места данные записываются в unRAID группу.
- “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 следует иметь ввиду ряд следующих ограничений:
- Системный функционал Docker и KVM работает только когда массив запущен.
- Массив может состоять минимум из одного диска или ssd накопителя.
- Не обязательно хранить на массиве unraid какие либо данные. Расположение docker файлов и виртуальных машин можно изменить в интерфейсе.
- Шары не создаются на 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, потому что в первую очередь тематика данного ресурса база знаний и не личный блог. В будущем постараюсь не нарушать баланс.