Хардкорный NAS: как собрать хранилище на OmniOS и не сойти с ума

от автора

Привет, Хабр! Сегодня расскажу, как я собрал сетевое хранилище NAS. Недавно оно понадобилось мне для дома, и я решил не покупать, а сделать свое. Тут не все так просто: есть разные варианты — «железный» и софтовый. В первом случае просто берем готовый NAS-сервер вроде Synology или QNAP, набиваем в него дисков — и все. Недешево, хотя в большинстве случаев это оправдано бесперебойной работой.

Но я не хотел тратиться, поэтому выбрал второй вариант — самостоятельную сборку на базе ПК. Выбор огромен — от Raspberry Pi до относительно недорогих HP ProLiant MicroServer. Я собрал на «железе», которое у меня было в запасе: HP ProLiant MicroServer Gen8, CPU Intel Celeron G1610T, 16 ГБ DDR3, 4 x 4 ТБ HDD. После сборки задумался о программном обеспечении. Его много — от готовых решений вроде TrueNAS, XigmaNAS, OpenMediaVault до самостоятельной настройки сервера с нуля на базе Linux или FreeBSD.

Я не искал легких путей (ведь я инженер!) и решил поэкспериментировать. Выбрал довольно экзотический вариант создания NAS при помощи операционной системы OmniOS. ZFS в ней поддерживается нативно, а сама она продолжает славные традиции своего предка — illumos. Это стабильность, поддержка ZFS, предсказуемое поведение в продакшене, а также простая, но гибкая модель управления сервисами (SMF). Плюс четкая структура пакетов и ориентация на безопасность и прозрачность исходного кода. Подробнее обо всем этом — дальше.

Краткая история OmniOS

Начну с SunOS, разработанной Sun Microsystems. Она была создана для использования на собственных устройствах компании — рабочих станциях и серверах. SunOS версий 5 и выше мы знаем под названием Solaris, но внутри ОС осталось множество упоминаний о старом имени. Летом 2005 года исходные коды Solaris были открыты, а на горизонте появилась OpenSolaris, созданная той же Sun Microsystems.

Поглощение Sun компанией Oracle фактически поставило крест на дальнейшем развитии OpenSolaris. И это несмотря на заверения Дена Робертса, члена совета директоров Oracle. Он заявлял, что Oracle продолжит развивать OpenSolaris как открытый проект и обеспечит его поддержку, но разработка была приостановлена, а репозитории закрыты. Соответственно, OpenSolaris 2010.02 так и не вышел, а разработчики форкнули его в проект illumos. Название, отсылающее к латинскому термину illuminare‎, специально пишется с маленькой буквы, ведь в некоторых шрифтах заглавная L и I практически идентичны.

А вот что было создано на базе illumos:

  • OmniOS — стабильный и надежный серверный вариант с длительным циклом поддержки.

  • OpenIndiana — дистрибутив общего назначения, подходящий для серверов и рабочих станций.

  • Tribblix — легковесный ретродистрибутив, позволяющий пользователям получить современные компоненты в привычной классической среде.

Для NAS-сервера предпочтительно использовать первый вариант, поскольку это универсальная, производительная ОС с поддержкой ZFS и минимальными системными требованиями. Давайте установим его и попробуем в действии. Чтобы было проще показать процесс, создадим виртуальную машину в VirtualBox. Поскольку актуальная 7-я версия упорно отказывалась поднимать мост до реальной сетевой карты, пришлось сделать даунгрейд до версии 6.1.50, предварительно отключив обязательную проверку подписи драйверов в Windows 11.

Установка

Дистрибутив OmniOS Community Edition можно скачать с сайта проекта. Подсовываю образ в виртуальную машину и загружаюсь с него:

Первым делом указываю раскладку клавиатуры, оставив вариант по умолчанию (US-English):

Дальше установщик предложит выбор. Можно создать корневой пул накопителей (rpool) и поставить OmniOS на него или выполнить установку уже на существующий. Я выбираю первый вариант. Сейчас нет желания создавать rpool руками, а инсталлятор прекрасно справится с этой задачей:

Конфигурация ВМ в моем случае содержит пять дисков. На одном будет жить система, а оставшиеся четыре задействованы для хранения данных. Поэтому rpool создаю только на первом диске. Для демонстрации более чем достаточно:

Оставляю все параметры дефолтными и выбираю пункт >>> Continue <<<:

Указываю hostname сервера:

Жду некоторое время, пока установщик создаст файловую систему и запишет туда образ OmniOS:

Когда процесс завершен, перезагружаю ВМ. Для этого выбираю соответствующий пункт Reboot. На этом же этапе убираю ISO-образ из виртуального привода.

Первый запуск

OmniOS загрузилась. Теперь можно зайти в консоль, используя имя суперпользователя root без пароля. Проверяю, как определяется система:

root@omnios:~# uname -a SunOS omnios 5.11 omnios-r151052-5ce47a2ab6 i86pc i386 i86pc

Своеобразный привет из прошлого — название SunOS. Работать под рутом, да еще и без пароля, плохая идея. Хотя бы последний должен быть установлен:

root@omnios:~# passwd root

При необходимости можно создать отдельных пользователей, но пока что пропущу этот этап и перейду к настройке сети. Оговорюсь лишь, что система умеет повышать привилегии нативным Solaris-like-способом через pfexec и поддерживает привычное sudo. Детально об этом можно почитать в документации.

Настройка сети

Изначально доступен только loopback-интерфейс. Чтобы управлять сетевыми адаптерами, нужна команда dladm. Гляну, какие из них есть в системе с учетом того, что в свойствах виртуальной машины задавал Intel PRO/1000 MT Desktop:

root@omnios:~# dladm show-phys  LINK         MEDIA                STATE      SPEED    DUPLEX   DEVICE e1000g0      Ethernet             up         1000     full     e1000g0

Сетевая карта видна. Значит, можно создать интерфейс:

root@omnios:~# ipadm create-if e1000g0

Теперь навесить на него IP-адрес:

root@omnios:~# ipadm create-addr -T static -a 192.168.88.155/24 e1000g0/v4static

С этим порядок, но нужен маршрут по умолчанию:

root@omnios:~# route -p add default 192.168.88.1

Осталось указать DNS-сервер, роль которого выполняет мой домашний роутер: 

root@omnios:~# echo 'nameserver 192.168.88.1' >> /etc/resolv.conf

Бэкаплю оригинальный файл конфигурации nsswitch.conf, приделав ему суффикс .bak. Привычка, однако:

root@omnios:~# cp /etc/nsswitch.conf{,.bak}

Запись эквивалентна команде cp /etc/nsswitch.conf /etc/nsswitch.conf.bak. В таком же стиле копирую файл nsswitch.dns в nsswitch.conf:

root@omnios:~# cp /etc/nsswitch.{dns,conf}

Проверяю, пропинговав мой любимый Хабр:

root@omnios:~# ping habr.com habr.com is alive

Можно переходить к установке napp-it, веб-интерфейса для управления системами хранения данных на базе ZFS. Он ставится поверх ОС и может быть использован бесплатно для коммерческого или некоммерческого применения. При этом нет никаких ограничений на функциональность ZFS или размер хранилища. Есть Pro-версия с дополнительными фичами, ориентированными на бизнес-сценарии. Это, например, планировщик заданий, интеллектуальное управление снапшотами, поддержка кластеризации и расширенное уведомление по событиям, но в домашних условиях они не нужны.

Установка napp-it

napp-it ZFS appliance (источник изображения)

Перед тем как пробовать ставить napp-it, надо обновить пакеты в системе до актуальной версии. Делается это командой pkg:

root@omnios:~# pkg update

Работает эта штука аналогично apt update && apt -y upgrade в дистрибутивах Ubuntu. После завершения обновления нужно выполнить перезагрузку в стиле самых первых Unix-систем: 

root@omnios:~# init 6

Теперь можно приступать к установке. Для этого нужна одна команда:

root@omnios:~# wget -O — www.napp-it.org/nappit  | perl

Скрипт сам скачает все нужные пакеты и компоненты системы. Пока я ходил налить кофе, консоль сообщила, что процесс завершен:

Авторы настоятельно рекомендуют сделать перезагрузку, хотя это и необязательно. Я все же воспользуюсь советом и еще раз ребутну сервер:

root@omnios:~# init 6

Через пару минут можно открыть веб-интерфейс по адресу: http://192.168.88.155:81. Используется логин admin без пароля:

Система встречает ненавязчивой просьбой задать пароль администратора. Сохраняю настройки и попадаю на страницу About:

Вижу сообщение о лицензионных особенностях системы, таблицу с указанием текущих установленных расширений и их ключей. По умолчанию ставится только trial-версия app_complete сроком на 30 дней. Пришла пора создать пул из свободных дисков и настроить SMB-шару.

Запуск SMB

Все начинается с пула. Именно он будет отправной точкой. На этом этапе важно понять, какой уровень отказоустойчивости необходим. В тестовой машине четыре диска. Это значит, что можно выбрать RAID-Z — аналог RAID-5, но лишенный его многих недостатков. Так, RAID-Z не страдает от проблемы «write hole» и гарантирует целостность данных благодаря встроенной проверке контрольных сумм. Зато он защищает от отказа одного любого диска, что вполне обосновано для небольших массивов (от четырех до восьми накопителей):

Пул успешно создан, а его статус показан в виде удобной таблицы и вывода команды zpool status:

Общая емкость в моем случае получилась около 700 Gb. При этом любой диск может выйти из строя, а данные останутся в целости. Прогулялся по меню и выполнил две простые процедуры:

  • Активацию SMB-сервера через Services — SMB.

  • Создание отдельного тома ZFS Filesystems — Create с указанием родительского пула datapool и выбором SMB-share — On.

На этом все — проверяю, смонтировав сетевую директорию:

При активной работе, например копировании данных, статус дисковой подсистемы можно отслеживать на той же странице About:

Что в итоге

Даже поверхностное знакомство с OmniOS оставило исключительно приятное впечатление. Все на своих местах, а особенности команд хорошо задокументированы и легко запоминаются. Эта ОС помогла без проблем поднять NAS-сервер. Плюс в том, что я один раз все настроил и потом просто пользуюсь. Разумеется, нужно следить за состоянием дисковых накопителей. Файловая система ZFS, в свою очередь, тоже будет стараться сохранить данные в целости.

Что касается недостатков, то «их есть у меня». Веб-интерфейс napp-it, с одной стороны, выглядит функциональным, но положа руку на сердце, с точки зрения UX/UI там есть над чем поработать. Догадаться, где находится та или иная опция, порой сложно. Нужно перебирать варианты один за другим или гуглить.

Но это мелочи, решать их интересно. А если говорить в общем, то OmniOS прекрасно подойдет для NAS. А еще она помогла мне познакомиться с возможностями файловой системы ZFS.

А вы когда-нибудь пробовали операционные системы на базе illumos? Жду вас в комментариях — будет интересно почитать.


ссылка на оригинал статьи https://habr.com/ru/articles/897566/