Причина написания
Где-то в конце лета 2025-ого я собирал NAS-сервер. Чисто для себя, под свои нужды и хотелки, и совершенно не планировал что-то публично описывать. Всю необходимую информацию искал через google, а тот раз-через-раз в результатах поиска подкидывал вот эту статью:
Я долго проходил мимо этой ссылки, ибо сам заголовок вызывал массу вопросов, и почему-то казалось, что несогласие с автором заставит меня написать что-то в ответ. Так и получилось после прочтения. Я зачем-то зарегистрировался на Хабре и пишу эти буквы.
Основная «претензия» к статье в том, что в OmniOS нет ничего «хардкорного». Это довольно простая в понимании, логичная и устойчивая ОС. Но, да, к инструментарию нужно привыкнуть и усвоить логику взаимодействий.
Статья будет посвящена не только OmniOS, нои другим «деткам» illumos, таким как OpenIndiana, Tribbix и SmartOS, поскольку всё написанное можно приложить к любому из этих дистрибутивов. А так же тому, как это можно использовать, и что из этого может получиться. SmartOS например, достоин отдельной серии статей вместе с Triton DataCenter. Однако, пока ограничусь только этим личным проектом на OmniOS.
Начало
Итак, стартовой точкой было желание получить домашний NAS. У меня не было «железа», которое можно было пустить на строительство. Готовые решения от Synology, QNAP и пр. — дорого и универсальностью они откровенно не блещут. Стало быть остался один вариант — собрать из тех компонентов, которые можно купить на маркетплейсах за приемлемые деньги.
Дабы не распространять "рекламные материалы" ограничусь характеристиками железа:
Intel N150 (4 core)
RAM: 32 Гб
NVMe: 512 Гб
HDD: 5 x 4 Тб
+ корпус, блок питания и п.р.

Выбор ОС был сделан осознанно. Ранее мне приходилось иметь дело с Solaris и ZFS, и именно этот опыт подсказывал, что только так у меня получится "не упарываясь" собрать конструкцию, которая удовлетворит мои хотелки. Я знал, что в OmniOS есть:
Зоны - Механизм изоляции процессов, отдаленно схожий одновременно с LXC и KVM
Crossbow - SDN для построения сетей между зонами и внешним миром
ZFS в авторской редакции
И буду честным, я не ожидал, что в результате получится "микро-облако". В котором спокойно будут жить: маршрутизатор, NAS и несколько виртуальных машин.
Зоны
Во-первых - это способ изоляции процессов. Во-вторых - это способ диспетчеризации ресурсов CPU и RAM.

Если прочие, не-глобальные зоны в системе отсутствуют, то процессы будут работать в глобальной зоне. Эта зона воспринимается как "основная операционная система", однако это не совсем так. У всех зон, включая глобальную, первым процессом является "ресурсыный планировщик". Для глобальной зоны его PID равен нулю, а имя процесса 'sched'. Такой же "планировщик", с именем процесса 'zsched' предваряет процессы не-глобальных зон. Процессы 'sched' и 'zsched' порождаются непосредственно ядром, и являются "прослойкой" между ядром и зоной. Что делает все зоны практически равными между собой, и позволяет использовать все ресурсы хост-машины на конкурентной основе. Т.е. "глобальная зона" такая же зона как все остальные, но обладающая возможность "порождать" другие зоны. CPU, RAM, диски, устройства шины PCI контролируются общим ядром. Изначально "принадлежат" глобальной зоне, но могут быть "переданы" в не-глобальные.
Каждая зона имеет идентификатор (ID). У глобальной зоны ID=0, у не-глобальных ID больше нуля. Наличие такого идентификатор позволяет ядру различать процессы и сегменты памяти разных зон и изолировать данные между ними. Можно провести параллель с VRF в маршрутизаторах Cisco, логика весьма схожая.
Конкуренция за внимание, к той или иной зоне со стороны CPU - регулируемая. Есть специальная утилита - dispadmin
# Список политик диспетчеризации задач разных зон $ dispadmin -l CONFIGURED CLASSES ================== SYS (System Class) TS (Time Sharing) SDC (System Duty-Cycle Class) FSS (Fair Share) FX (Fixed Priority) # Установка политики диспетчеризации по-умолчанию. $ pfexec dispadmin -d FSS
Управление зонами
Зоны управляются двумя основными утилитами:
zoneadm
Запускает, останавливает, проверяет и т.д. В общем, отвечает за административную составляющую.
zonecfg
Создает и изменяет конфигурационные файлы, которые в дальнейшем использует zoneadm
Нельзя сказать, что эти утилиты сложны в обращении, однако количество повторяющихся, и в тоже время обязательных при использовании директив мотивировало сообщество на создание программ-прокладок, упрощающих их использование. В OmniOS такая программа называется 'zadm'.
Устанавливается через менеджер ПО 'pkg':
$ pfexec pkg install zadm
Типы зон
OmniOS в общей сложности умеет создавать 11 типов зон, или как это принято называть в терминологии illumos - брендов (brand). Зоны разных брендов обладают разными свойствами, приведу несколько примеров:
brand: ipkg, lipkg, spare
Это три бренда для создания нативной зоны, т.е. отдельно существующей инсталляции OmniOS. Отличаются они между собой способами сопровождения установленного через утилиту 'pkg' ПО.
ipkg - Independent management. Все пакеты устанавливаются внутри зоны независимо от глобальной зоны.
lipkg - Linked Image Package. Пакеты установленные в глобальной зоне автоматически устанавливаются в не-глобальную зону данного бренда.
spare - То же, что и бренд 'lipkg', но пакеты установленные в глобальной зоне не устанавливаются внутри зоны, а создаются ссылки на файлы установленных пакетов. Это позволяет экономить место на диске. При этом часть директорий базовой файловой системы (/bin, /sbin, /usr, /lib...) в зоне 'spare' будут read-only.
brand: lx
Если вы знакомы с Canonical LXD, то легко поймете принцип работы зоны бренда LX. Это контейнер в котором работает один из дистрибутивов Linux. Однако, в отличии от LXD/LXC в LX-зоне нет Linux-ядра. Все бинарники запускаются в режиме эмуляции, как в FreeBSD linuxemu.
brand: BHYVE, KVM
Два бренда зон с гипервизорами - bhyve и KVM+qemu. Предназначены для запуска других операционных систем в режиме классической виртуальный машины. Стоить отметить, что способ виртуализации через KVM+qemu внутри сообщества illumos в настоящее время отмирает. Основной применяемый гипервизор - это bhyve.
$ zadm NAME STATUS BRAND RAM CPUS SHARES global running ipkg 32G 4 20 AnyHole running lx - - 1 Immich running bhyve 4G 4 1 OPNsense26 running bhyve 2G 1 15 Torrent running lx - - 1
Crossbow
Так назывался проект программно-определяемых сетей (SDN) компании Sun Microsystems. С помощью SDN можно создавать виртуальные сетевые карты (vNIC), ethernet-хабы, коммутаторы, бриджи, оверлеи, и т.д. А так же связывать элементы между собой в нужную сетевую структуру.

На диаграмме выше показаны основные сущности SDN Crossbow и их возможные взаимосвязи.
От физических портов могут быть образованы виртуальные сетевые интерфейсы VNIC и VLAN. При этом интерфейсу VNIC может быть задан тег, что делает его практически эквивалентным интерфейсу VLAN. Так же, физические интерфейсы могут быть включены в бридж. В OmniOS бридж - это системный сервис, в отличии от Linux и FreeBSD, где бридж - это специальный сетевой интерфейс. Заставить бридж работать в OmniOS у меня не получилось. Он упорно не захотел делать то, что от него требовалось.
Etherstub - это Ethernet-хаб. Не коммутатор, а именно хаб. Все фреймы поступающие в него видны всем подключенным к нему VNIC-ам. Физические интерфейсы подключить напрямую к Etherstub нельзя, однако можно связать друг с другом Etherstub и Bridge.
VNIC и VLAN - это окончательные сетевые интерфейсы, от которых невозможно построить связи с другими элементами SDN. Они могут быть либо переданы в не-глобальную зону, либо стать интерфейсами глобальной зоны. Количество VNIC создаваемых от одного физического порта ничем не ограничено, т.е. можно образовать несколько VNIC в одном VLAN-е и распределить их по разным зонам. Физический порт в этом случае будет работать как коммутатор.
Управление элементами SDN осуществляется утилитой dladm.
Примеры:
# Создание VNIC с именем 'inet0' и заданным мак-адресом на базе физического порта igc3 $ pfexec dladm create-vnic -l igc3 -m 30:e4:db:f4:24:56 inet0 # Создание VNIC с именем 'vnic_vlan30' и PVID=30 на базе физического порта igc1. # Мак-адрес будет "случайным". $ pfexec dladm create-vnic -l igc1 -v 30 vnic_vlan30 # Создание хаба Etherstub $ pfexec dladm create-etherstub Hub0
Как можно заметить, имена элементов SDN должны быть уникальными и заканчиваться числом, в противном случае система выдаст ошибку:
$ pfexec dladm create-vnic -l igc0 wrong_name dladm: invalid link name 'wrong_name'
Исключением из этого правила является создание бриджа, там наоборот имя не должно заканчиваться числом, оно добавляется автоматически.
Все изменения dladm делает перманентными. Созданные виртуальные интерфейсы останутся в системе после ребута. Временные изменения можно сделать через добавление ключа '-t', что позволяет "откатить" совершенные операции через перезагрузку системы.
На этом краткий, сумбурный экскурс в инструментарий ОС Solaris заканчивается. В действительности тема колоссальных объемов, со своими тонкостями и нюансами, тем не менее базируется на простых постулатах, которые легко понять.
Проект "Амбар"

Представленная схема на первый взгляд слабо сочетается с фразой "не упарываясь" написанной ранее. Просто по мере вхождения во вкус было перепробовано около десятка вариантов. Как говорится, "коготок увяз - всей птичке пропасть"...
NAS
Функцию NAS выполняет глобальная зона OmniOS. Для управления дисковым пулом и SMB-шарами предполагалось использование napp-it. Однако, в дальнейшем от него пришлось отказаться и перейти на управление вручную, командами из командной строки. Причины таковы:
Napp-it - это "фримиум". Часть функционала перестает работать после 30 дней использования. К "отваливающимся" функциям относятся: мониторинг, ACL-ы ZFS и еще что-то из разряда "визуализации".
Нет возможности создать SMB-шару на русском языке. Все названия только латиницей.
Нет возможности создать SMB-шару существующего каталога, только ZFS-dataset.
Еще, скрипт инсталляции Napp-it установил какое-то безумное количество софта, которое ему для работы совершенно не нужно, а мне и подавно. Точного списка установленных пакетов у меня нет, его нужно восстанавливать из скрипта, так что с этим еще предстоит разобраться. Все равно, napp-it крайне полезен на начальном этапе, и в его коде можно найти очень и очень много подсказок.
Несколько слов о глобальных настройках ZFS, которые я сделал практически сразу после создания ZFS-пула:
Ограничение размера Adaptive Replacement Cache (ARC). По-умолчанию размер ARC вычисляется автоматически, и в результате такового может составить от 50% до 100% оперативной памяти. Самый простой способ - добавить в файл /etc/system строку:
set zfs:zfs_arc_max = 8589934592
Где 8589934592 = 8 * 1024^3, т.е. 8 гигабайт. Для домашнего файлового сервера, учитывая интенсивность использования, это очень большая величина. Можно при необходимости сократить до 4-х или до 2-х гигабайт.
Добавление SLOG в ZFS-пул шпиндельных дисков. ZFS Separate Log Device позволяет увеличить производительность операций записи на диски. В качестве SLOG-диска можно использовать ZFS-dataset на памяти NVMe. OmniOS устанавливался на него, и там образовался 'root-pool', можно откусить немного.
# # Создаем volume dataset # $ pfexec zfs create -V 5G rpool/SLOG $ zfs list rpool/SLOG NAME USED AVAIL REFER MOUNTPOINT rpool/SLOG 5,16G 373G 12K - # # Добавляем созданный том, как log-device в существующий ZFS-пул # $ pfexec zpool add TANK log /dev/zvol/dsk/rpool/SLOG # # Смотрим результат # $ zpool status TANK pool: TANK state: ONLINE scan: scrub repaired 0B in 0 days 00:26:32 with 0 errors on Tue Dec 2 23:42:13 2025 config: NAME STATE READ WRITE CKSUM TANK ONLINE 0 0 0 raidz1-0 ONLINE 0 0 0 c4t0d0 ONLINE 0 0 0 c5t0d0 ONLINE 0 0 0 c5t1d0 ONLINE 0 0 0 c5t2d0 ONLINE 0 0 0 c5t3d0 ONLINE 0 0 0 logs /dev/zvol/dsk/rpool/slog ONLINE 0 0 0 /dev/zvol/dsk/rpool/SLOG ONLINE 0 0 0 errors: No known data errors # # Поскольку это пример, и в двух SLOG-дисках необходимости нет - удаляем. :) # # Вначале из пула # $ pfexec zpool remove TANK /dev/zvol/dsk/rpool/SLOG # # Теперь уничтожаем лишний dataset # $ pfexec zfs destroy rpool/SLOG
SMB-шара по-русски
Прежде чем раскрывать данный вопрос хочется сказать, что протокол SMB в SunOS - это часть ядра системы. Нет необходимости устанавливать дополнительные пакеты ПО. Более того, за счет взаимной интеграции ZFS с SMB и NFS управлять "расшариванием" можно через редактирования параметров dataset-ов.
Вот пример:
# # Создаем dataset. # $ pfexec zfs create TANK/Hello_Habr # # По-умолчанию SMB отключен. # $ zfs get -p sharesmb TANK/Hello_Habr NAME PROPERTY VALUE SOURCE TANK/Hello_Habr sharesmb off default # # Включаем "расшаривание" и задаём имя на русском. # $ pfexec zfs set sharesmb=name="Привет Хабр!" TANK/Hello_Habr # # Проверяем... # $ zfs get -p sharesmb TANK/Hello_Habr NAME PROPERTY VALUE SOURCE TANK/Hello_Habr sharesmb name=Привет Хабр! local

Маршрутизатор
Настройка этой функции отняла пожалуй больше всего времени. Однако, тема данной статьи к этой увлекательной истории отношения не имеет. В конце концов в зоне маршрутизатора поселился OPNsense. Зоне доступно одно ядро CPU, 2 Гб памяти и диск 10 Гб.

На маршрутизаторе лежат функции: DNS-сервера, DHCP-сервера, файрвола как интернет-трафика, так трафика между сегментами внутренней сети, "Call-Home VPN" сервера и Reverse-Proxy сервера.
Заключение
OmniOS — мощная и надежная операционная система. Благодаря этой технологии я получил свое собственное микро‑облако. Ресурсов у хост‑машины откровенно мало, но даже при таких условиях удалось собрать отлично работающее решение.
К недостаткам можно отнести отсутствие веб‑морды с модным управлением «на кнопках», но если откровенно, мне, как человеку до сих пор редактирующему текстовые файлы в редакторе 'vi', это обстоятельство ничуть не мешает. И да, недостаток отсутствия «интуитивно понятного» интерфейса тоже легко исправим, было бы желание. Но я не умею кодировать фронтенд, к сожалению.
Хочу поблагодарить всех, кто дочитал эту «простыню» до конца. Искренне надеюсь, что было интересно. Даже несмотря на рваное, с пробелами повествование.
Комментарии (20)

ZVEZDO4ETik
15.03.2026 08:41Дабы не распространять "рекламные материалы"
Что за мать, блок питания и корпус? Что по охлаждению? Рейд аппаратный? По сетёвке сколько портов и какие скорости?

token_paul Автор
15.03.2026 08:41корпус: Jonsbo N1
мамка: BKHD-1264
Сетевые интерфейсы встроенные, 4 x Intel I226-V, медные 2.5Г
Блок питания GAMEMAX SFX GS-850G. Думаю заменить в нем пропеллер, шумит аццки.
По охлаждению ничего особо не мутил. Мать шла со встроенным процом, на котором уже стоял радиатор, к которому прикручен кулер. Корпус тоже шел с вентилятором. В общем, "я уго слепила из того что было..." Средние показатели по температуре вот такие:
CPU: 54.00 SSD: 43 SSD: 38 c4t0d0: 38 c5t0d0: 39 c5t1d0: 39 c5t2d0: 38 c5t3d0: 37Работает это все 24/7 не вынимая. Но шумит. Причем шумит только мне, жена и дочь "не слышат", говорят у меня профдеформация.

GritsanY
15.03.2026 08:41Интересно, Intel N150 не захлёбывается? Plex/Jellyfin не упоминается, но даже Immich может его на лопатки положить, если большую фототеку импортировать с нейросетевой обработкой

token_paul Автор
15.03.2026 08:41Это странно, но нет. Не захлебывается. Здесь мне кажется играет роль еще одна из особенностей солярки. Я как-то давно заметил, что как бы ни была нагружена машина процессами, сколько бы памяти не было сожрано, в систему всегда можно зайти по ssh и все поправить командой 'kill', не перезагружая ОС.
Да, Immich при импорте большой фототеки жрет аки конь, все 4 ядра и всю доступную память. Но работает в "коконе" зоны и больше выделенного ему не доступно. Чуть помедленней обрабатывает, но куда мне торопиться.
С Jellifin примерно такая же картина. Да жрет, и на мат. плате BKHD-1264 нету GPU, т.е. вся нагрузка в проц. Но работает. Показывает исправно, чему я несказанно рад.
Но естественно, одновременно заливать в Immich 1000 фоток, при этом смотреть кино я не собираюсь :) N150 такое не вынесет. (А может и вынесет, надо попробовать)

zilish
15.03.2026 08:41В теории выдержит. Когда себе искал готовый "домашний nas" то неоднократно натыкался на корпуса с N150 на борту или R7 5825u, при этом решения были в одном ценовом диапазоне, хотя сырой "мощи" у красного ощутимо больше. На сколько понял это вызвано тем что более слабый на первый взгляд N150 может в аппаратное транскодирование, как раз таки нужное всяким plex/jellyfin

token_paul Автор
15.03.2026 08:41Аппаратное транскодирование в Alder Lake происходит на счет GPU, Intel UHD Graphics. Оно там во всей линейке N70-150 и далее. Jellyfin нужно еще донастроить, кстати, чтобы транскодирование шло через GPU.
Но по всей видимости в мат. плате, что у меня, GPU "заглушен" либо на уровне биоса, либо впаянный процессор из "выбраковки" и GPU "заглушили" физически. Плату китайские братья паяли, чудеса всякие могут быть.
В Alder Lake GPU - это устройство с идентификатором 8086:46D1 или 8086:4626, но в моем случае ничего подобного в списке устройств не появляется. В общем, пока как есть, без GPU.

SkyCat
15.03.2026 08:41Насчет N150 ничего не могу сказать. Но вот процессор из 2011 года:
OS: Debian GNU/Linux 13 (trixie) x86_64 Kernel: Linux 6.12.73+deb13-amd64 Uptime: 6 days, 20 hours, 21 mins Packages: 435 (dpkg) Shell: zsh 5.9 Terminal: /dev/pts/0 CPU: AMD FX(tm)-8120 (8) @ 3.42 GHz GPU: NVIDIA GeForce 210 [Discrete] Memory: 3.65 GiB / 31.30 GiB (12%) Swap: 5.11 GiB / 12.11 GiB (42%) Disk (/): 11.90 GiB / 226.36 GiB (5%) - btrfs Disk (/var/backup): 2.83 TiB / 3.64 TiB (78%) - btrfs Disk (/var/files): 563.77 GiB / 5.46 TiB (10%) - btrfs Disk (/var/lib/docker): 11.73 GiB / 119.24 GiB (10%) - btrfs Disk (/var/media): 5.08 TiB / 7.97 TiB (64%) - btrfs Disk (/var/media2): 953.48 GiB / 4.77 TiB (20%) - btrfsА вот вот контейнеры на нем:
ntfy homepage onlyoffice immich_server immich_machine_learning thumbnail-server notification-server seafile valkey postgres unbound authentik_server authentik_worker joplin caddy dockhand mariadbНа этом же сервере крутится Plex Media Server.
Во время обработки видео в Immich смотрю 4k через Plex. Load average в эти моменты около 12-15.
token_paul Автор
15.03.2026 08:41Правильно, потому что в системе есть
GPU: NVIDIA GeForce 210 [Discrete]она и забирает часть вычислений транксодинга на себя.Я не пытаюсь сказать, что в N150 нет GPU, его нет у меня.

SkyCat
15.03.2026 08:41Она ничего не забирает. ) Этой видюхе сложно даже картинку на экран выводить.

token_paul Автор
15.03.2026 08:41Да, вы правы. В 210-ом вообще фичи NVENC нет. Однако, попробуйте при просмотре уменьшить скорость видеопотока, скажем примерно до 700 кбит/с и посмотрите, что произойдет с нагрузкой на процессор. Ну, т.е. попробуйте видео 4к "впихнуть" в канал передачи данных LTE. Правда интересно.
Медиа-серверы типа Plex/Jellyfin в принципе могут вообще не транскодировать видео поток. Просто отправлять на проигрыватель поток сырых данных из файла. С другой стороны,
AMD FX(tm)-8120- 8-ми ядерный процессор, с как было отмечено хорошим энергопотреблением, и по сравнению с N-серией от интел, намного производительней, хоть и 2011 года выпуска.

GritsanY
15.03.2026 08:41На AMD FX-8120 теплопакет 125Вт, а на Intel N150 - 6Вт. Вас, наверно, это не заботило при выборе ЦПУ, но у нас электричество дорогое и я когда недавно выбирал, остановился на Intel Core 3 100U - базовый теплопакет 15Вт, частота 1.2 ГГц, буст до 55Вт 4.7 Ггц, 6 ядер, 8 потоков.

SkyCat
15.03.2026 08:41Вы правы — при выборе процессора на потребляемую мощность смотрю в последнюю очередь. Отталкиваюсь от решаемых задач. В данном случае взял процессор, который был в наличии.

Mrchoozy
15.03.2026 08:41Я тоже когда-то так мыслил. А потом пошел и купил qnap. И оказалось, что он вполне себе гибкий. Умеет все что нужно, вполне работает без внешних серверов qnap, имеет и докер и виртуалки и фиг знает что еще нужно. Да, дороже. Сильно ли? Нет, не сильно. Сколько было потрачено на этот нас? А теперь добавим туда ресурс времени на исследования, и уже не понятно что дешевле. Лично я уверен, что заводской, но у каждого свой ответ.

token_paul Автор
15.03.2026 08:41А OPNsense на qnap-е в виртуалке поднять и развести на сеть хотя бы на пару сегментов? Если посмотреть на мою схему, то можно увидеть, что трафик от интернет-провайдера заходит в этот "NAS", и там же 3 ip-сегмента моей "домашней сети". Разруливает это все OPNsense. Сможете так же на qnap-е? Продемонстрируйте, будьте любезны.
Полная стоимость по сумме чеков:
с дисками HDD: 88 966 р.
без дисков: 46 471 р.
И конечно, это стоимость до взлета ценника на RAM в космос.
А теперь про "ресурс времени на исследование". Очень больной лично для меня вопрос, потому как пару раз превалирующее "Давайте купим" над "Давайте сделаем" было причиной искать другое место работы. Но я точно знаю одну аксиому: Покупая решение, вы получаете "черный ящик". Находя решение самостоятельно вы получаете знания. Знания останутся с вами навсегда, а "черный ящик" со временем постареет и нужно снова тратить деньги. Но да, каждому свое, тут спорить нет смысла.

aik
15.03.2026 08:41Всё же непонятна причина выбора именно этой ОС. Потому что соларис?

token_paul Автор
15.03.2026 08:41Из-за свойств, которыми обладает Солярис. Мне нет разницы какая операционная система, это просто инструмент. В данном случае выбор был на основе трёх факторов - способность солярки работать файловым сервером, возможность распиливать хардварные ресурсы на изолированные составляющие, с последующей возможностью связать их между собой с сетевую конструкцию.
OmniOS оказалось проще инсталлировать в сравнении с другими дистрибутивами.

Anselm_nn
15.03.2026 08:41N150 достаточно много вариантов охлаждения пассивно, вентилятор для постоянно работающего устройства - очень спорное решение, и шумит, и пыль сосет, и насосется перегреется. это выбор из-за желания все в один корпус поставить?

token_paul Автор
15.03.2026 08:41Всё верно. Собрать все в одном корпусе было можно сказать 'Primary Target'. Одна коробка и пара кабелей, без соплей и внешних блоков питания.
Получилось ли добиться? Ну, почти. Точку доступа вафли все равно приходится запитывать от отдельного б/п, потому как PoE прям от материнки реализовать оказалось не на чем.
dimsoft
Как думаете где ZFS кошернее: Solaris, BSD или LInux ?
token_paul Автор
Это зависит от того посещают ли Solaris, BSD и LInux синагогу.
Но если чуть серьезней, то ZFS это лишь файловая система. Причем, если мне не изменяет память, Sun поделился исходниками ZFS практически сразу после опубликования. Хотели, чтобы система распространилась не только на Солярис.
Вопрос больше в том, как эта файловая система применяется. У FreeBSD ZFS одна из основных, её можно выбрать прямо в инсталляторе. Linux больше "помешан" на ext2fs, и это его выбор. И как по мне, что ZFS в Linux чувствуется как "чужеродная нашлепка", которую примотали к системе на изоленту.
А вот Солярис и версии illumos имеют интеграцию ZFS и операционки, о чем я в статье вскользь упомянул. Это просто удобно, как оказывается.
ZFS сейчас есть в двух исполнениях: OpenZFS и проприетарный вариант от Oracle. Проприетарный оракловский я не щупал, так что ничего сказать не могу. Но по документации можно найти определенные отличия.