- Мама, спрашивает верблюжонок, а зачем нам горбы?
- Когда мы идём через бескрайнюю пустыню, мы запасаем в них воду.
- А раздвоенные ступни с мозолистой подушкой?
- Чтобы не проваливаться в жаркий песок пустыни.
- Мама, а зачем нам в зоопарке все эти навороты?
Бородатый анекдот
Камрад
rgajdov спрашивает зачем запиливать всякие chroot и jail, если есть VirtualBox? Можете привести примеры, в которых используются эти три вещи - каждая, конкретно под свою задачу, например, у вас? (и почему?).
Вопрос настолько хороший, что ответ я обдумывал недельку. Плюс надо признаться, что назначение виртуализации вообще и то, как мы её варианты используем в домашних NAS, сильно различается. Что, конечно, не упрощает понимание вопроса.
tl;dr Использование виртуализации на Nas4free
- VirtualBox всем хорош, но оверхед по производительности легко может быть кратным. Зато в нём можно гонять хоть Windows, хоть Linux, хоть чёрта лысого.
- Jails, клетки, работают практически без потерь, эффективно используют память, но накладывают серьёзные ограничения на то, что в них можно и что нет.
- если эти ограничения слишком жёсткие, хорош механизм chroot. Он придуман для других целей, но в условиях embedded установки nas4free даёт выход на полную ось.
UPD от 26 декабря 2015
- bhyve - не может работать одновремено с virtualbox, нет вебгуя, под ним работает только BSD, Linux и (уже) Windows - но зато низкий оверхед по производительности. bhyve, родной гипервизор II типа под BSD, доступен в nas4free из коробки. Но я пока не тыкал палочкой.
/UPD
Начнём с терминов NB. Я сознательно и серьёзно упрощаю, т.к. краткое, но предельно точное изложение займёт пару десятков листов минимум.
Гипервизор. Этим красивым словом называют софт, создающий и позволяющий исполнять виртуальные машины.
Хост-система - то железо, на котором работает гипервизор.
Виртуальная машина - программно созданная сущность, ведущая себя подобно реальному компьютеру с точки зрения исполняемого на этом компьютере софта.
К сожалению, ничего не даётся даром. Это только в
наивных статьях из Вики добрая половина гипервизоров создают и обслуживают виртуальные машины без потерь. Реальный оверхед (издержки, потери) принимает значения от заметного до огромного. Как пример оверхеда для продуктов корпоративного назначения, используемых в датацентрах, приведу цифры из
статьи.
VMWare ESXi 5 + vSphere 5
MS Hyper-V Windows 2008 R2 SP1
Linux
Windows
Linux
Windows
Computing Power
4.39%
3.24%
5.43%
3.10%
Disk I/O
3.02%
2.36%
24.07%
20.96%
Network I/O
20.52%
33.00%
16.50%
24.34%
Disk Read Latency
367%
213%
Micro-operations time
623%
1510%
Видно, что потери - заметные. Меня интересует порядок величины. К примеру MS
в технической статье оценивает процессорный оверхед выше, в 9-12%, а дисковй - ниже, в 6-8%. Плюс расход памяти на виртуализацию.
Но это - гипервизоры корпоративного класса. Да, вы можете собрать дома систему на чём-то вроде ESXi (и я сам себя даже уговаривал такое сделать - не смог :) В этом случае другие методы виртуализации могут вам и не понадобиться. Но IMHO виртуализированный сервер дома - серьёзная заявка на overkill, прежде всего из-за цены железа.
Есть гораздо более простое (+ бесплатное) решение - VirtualBox, и мы его успешно гоняем поверх nas4free. Но VirtualBox имеет оверхед существенно хуже, чем у "больших" гипервизоров. Как иллюстрацию приведу один из тестов из
подробной статьи В этом примере на кодировании видео силами процессора VB проигрывает голому железу грубо вдвое.
Есть дополнительные недостатки VB на FreeBSD по сравнению использованием клеток FreeBSD Jails
- статическое выделение памяти. Если вы отдали гигабайт на виртуальную машину и запустили её - не важно, сколько реально надо. Уйдёт гигабайт.
- USB работает только версии 1.1 Потому, что USB2 для VirtualBox - это код, не выпущенный под BSD лицензией.
- Доступ к виртуальному рабочему столу средствами системы - по VNC, более привычный RDP не доступен (точнее может быть доступен средствами оси, установленной в виртуальной машине - но это только после старта оси)
Ну а главное достоинство - возможность запустить в любой виртуалке практически любую ось, включая Windows и Linux.
Так что IMHO назначение VirtualBox на nas4free - запуск приложений, вообще не доступных FreeBSD или требующих сложной настройки. При этом не особо требовательных к процессорной мощности и скорости доступа к оборудованию.
Личный пример - я успешно запускал в VirtualBox HomeMediaServer под WindowsXP (DLNA сервер, именно для DLNA - пожалуй, лучший) и ZoneMinder под Linux (софт для видеонаблюдения, тем более что он доступен как образ виртуальной машины). Честно признаюсь, на сегодня ни то ни другое, ни вообще виртуальные машины, не использую. DLNA потребности у меня почти отсутствуют, при нужде есть PLEX. Видеонаблюдать в реальности нечего.
Jails, они же клетки, заявлены разработчиками nas4free как основной механизм расширения функционала за пределы коробочного. Клетки - вариант набирающей всё большую популярность контейнерной виртуализации. Клетка использует ядро хост системы, но свой мир. Результат при взгляде изнутри очень похож на виртуальную машину. Оверхед для такой машины исчезающе мал, требований к аппаратной поддержке виртуализации нет. Память используется только реально занятая процессами из клетки.
Исходно клетки (буквальный перевод "jail" - "тюрьма") придуманы для ограничения поля возможного деструктивного поведения заключённого в неё процесса. Например, взломанного хакером вебсервера. В случае nas4free это тоже имеет значение, но отходит на второй план. А на первый выходит возможность что-то поставить дополнительное, не опасаясь порушить хост систему (что на раз происходит при попытках что-то ставить в full вариант nas4free). Для обслуживания клеток в nas4free сделан удобный веб интерфейс - TheBrig (разработчик
Alexey Kruglov aka alexey123, которому большой респект, не без юмора предпочитает перевод "
Кича" ;)
Из недостатков можно упомянуть разве что трудоёмкость major (значительного) апгрейда клеток при замене хост оси например от 9.3 к 10.1 Из понятных ограничений - работает только с использованием ядра FreeBSD - то есть либо FreeBSD, либо Debian GNU/kFreeBSD
UPD от 26 декабря 2015
Кроме Брига клетки в nas4free можно поднимать через qjail, который ставится вместе с finch chroot (см ниже). Управление полностью из командной строки, но очень простое.
/UPD
Личный пример - я ставил в клетки много всего разного. Сейчас использую (точнее остановлено, но с тестовыми целями, планирую восстановить) только torrentmonitor. Также большой смысл вижу гонять в клетке что угодно, к чему есть доступ из Интерент. Яркий пример - owncloud. Но мне всё никак не добить fail2ban, а без него использовать опасаюсь.
UPD от 26 декабря 2015
torrentmonitor для разноообразия поставил в qjail клетку и он там успешно крутится
/UPD
chroot - он вообще не метод виртуализации. Но как нельзя лучше пригодился для embedded варианта nas4free, куда что-то поставить затруднительно. А с chroot - лепота! Имеем полную ось, куда ставим-сносим что душеньке угодно. Да без ограничений, накладываемых строгими тюремщиками на софт в клетках. Дополнительный плюс происходит, когда под chroot выделен отдельный датасет, с которого делаются снимки. Напортачил что-то - откатился назад. Как в root on zfs, только проще. (Впрочем, последнее преимущество и к клеткам относится)
Недостатков не просматривается, есть особенности. Конечно - только FreeBSD. C существующим методом реализации (через finch) мне удобно ровно один chroot иметь, тогда как клеток не проблема наплодить и пару дюжин (вот только при апгрейде на новую версию типа 9.3 - > 10.2 с дюжиной клеток ой не быстро...) . В отличие от клетки не так просто настроить, сделать tar - и размножать хоть у себя, хоть давать камрадам.
Личный пример - у меня в choot крутится PLEX. Он отказался жить нормально в клетке, пропадая из DLNA эфира. А в chroot ему комфортно. IMHO на практике, при необходимости добавить какой-то софт имеет смысл начать с клетки. Если он в ней заживёт - то и ладушки. Если нет - тогда возможно его место в chroot.