Вступление

В настоящее время только глухой не слышал про виртуализацию, а любой кто имеет хоть какое-то отношение к IT-индустрии уже испытал её на практике. Сейчас в этом секторе рынка предлагается множество решений на любой вкус и цвет и под разные задачи - свободные и проприетарные, с разными технологическими подходами (эмуляция, паравиртуализация, полная виртуализациия), ориентированные на серверы или десктопы и работающие под разным окружением (OS-hosted и bare-metal).
Вот о последнем различии я и хотел поговорить. Насколько я понимаю, оно заключается в использовании ОС общего назначения либо специализированной системы, заточенной для работы именно в качестве хоста для гипервизора. Самый яркий пример такого продукта это VMware ESX(i), который использует переработанный RHEL. С точки зрения производительности и накладных расходов это лидирующий продукт, вот только использовать его на десктопе не получится вследствие его ориентированности на серверные платформы (требует аппаратную виртуализацию, поддерживает в основном серверное железо, работать с гостевыми ОС можно только удаленно).


А вот если бы…

Я посмотрел презентацию Splashtop (см. также Phoenix HyperSpace) и обратил внимание на одну деталь - эта встраиваемая ОС поддерживает запуск гостевых ОС “из коробки” (в данном случае в качестве коробки выступает FlashBIOS). Если все эти медиаплейеры, скайпы и прочие огнелисы выбросить, то в остатке получается desktop-oriented bare-metal hypervisor!
Такая концепция “супер-BIOS'а” с необходимым минимумом софта + что-то похожее на VirtualBox мне кажется весьма привлекательной, будь она реализована в виде оптимизированного под это дело Linux-дистрибутива с полной и актуальной базой драйверов и некоторым количеством базовых virtual appliances (даже не знаю как адекватно перевести этот термин). К большому сожалению Splashtop - продукт закрытый и переделать его под другую платформу нет никакой возможности :(


Идея

Состоит в создании десктоп-ориентированного гипервизора со следующими возможностями:

  1. Использование в качестве хостовой ОС модифицированного Archlinux и по-возможности свободной системы виртуализации
  2. Поддержка обычного десктопного железа
  3. Минимальное количество необходимых компонентов хостовой ОС
  4. Минимизация использования ресурсов хостовой ОС
  5. Использование быстрого и максимально облегченного WM
  6. Установка и настройка гипервизора а так же гостевых ОС через GUI
  7. Экспорт/импорт гостевых ОС по сети или на внешние носители
  8. Динамическое распределение и расшаривание дискового пространства между гостевыми ОС
  9. Включение в дистрибутив преднастроенных гостевых ОС (a.k.a. virtual appliances)
  10. Возможность использования ОС семейства Windows в качестве гостевой системы (с поддержкой аппаратного ускорения Direct3D/OpenGL)*


    Подробнее

    Рассмотрим эти пункты более детально.

  11. Использование в качестве хостовой ОС модифицированного Archlinux и по возможности свободной системы виртуализации Причина выбора в качестве хостовой ОС именно Арча состоит исключительно в моем субъективном ощущении что это сообщество довольно динамично развивается; ну и конечно есть небольшой опыт использования - я оценил его простоту и скорость работы. Если мне кто-нибудь авторитетно докажет что для этих целей лучше взять Debian или Gentoo - я против не буду, вот только Генту я не знаю. Далее, что касается модификации - что именно придется пилить и переделывать я пока даже не имею представления, но чую что без этого не обойтись. Ну а в качестве ядра гипервизора я думаю использовать Xen (но тут есть одно большое НО - как быть тем у кого процессоры и материнские платы не поддерживают технологию Intel-VT или аналогичную от AMD?) или VirtualBox OSE (который даже не поддерживает USB для гостей). А может взять VMware Server?..

  12. Поддержка обычного десктопного железа На сегодняшний день в ядре присутствуют драйверы почти что для всего современного железа, но сложность состоит в прокидывании нестандартных PCI-устройств в гостевые системы. Что делать с веб-камерами, WiFi/блютус-адаптерами, карт-ридерами, FireWire и т.п. устройствами - непонятно.

  13. Минимальное количество необходимых компонентов хостовой ОС Этот пункт тесно связан с предыдущим. Если какую-либо железку не удасться виртуализовать то, видимо, придется добавлять в хост прикладной софт для работы с ней и это не есть гут. Идеальный вариант к которому надо стремиться - это драйверы, гипервизор, X-Server + WM и GUI-утилита для настройки и управления хостом и гостями.

  14. Минимизация использования ресурсов хостовой ОС Ну тут все очевидно - чем меньше лишнего будет крутиться на хосте тем привольнее будет гостям. Разумеется, тюнинг ядра и необходимых служб приветствуется.

  15. Использование быстрого и максимально облегченного WM В выборе оптимального оконного менеджера я принципиальных сложностей не вижу - можно взять, к примеру, AfterStep.

  16. Установка и настройка гипервизора а так же гостевых ОС через GUI Только пересборкой и shell-скриптами обойтись не удастся, очевидно что какой-то GUI back-end для управления системой придется писать, если не найдется подходящего в составе WM. Гуй для гипервизора - это вообще отдельная песня, надо сначала определиться с первым пунктом.

  17. Экспорт/импорт гостевых ОС по сети или на внешние носители Сам по-себе экспорт/импорт виртуальных хостов представляет собой тривиальное копирование образа виртуальной машины (возможно, в сжатом виде), если бы ещё при этом был какой-то унифицированный формат образа…

  18. Динамическое распределение и расшаривание дискового пространства между гостевыми ОС Эту возможность можно попробовать реализовать с помощью LVM (некоторые гипервизоры позволяют использовать динамически расширяющиеся образы дисков, вот только могут ли они динамически уменьшаться?). Так же необходима возможность использования общих для нескольких гостей виртуальных дисков (эмулировать сетевые диски/тома с помощью хоста?).

  19. Включение в дистрибутив преднастроенных гостевых ОС (a.k.a. virtual appliances) Сам по-себе “голый” гипервизор мало кому нужен, а включение в дистрибутив того же, скажем, PuppyLinux даст возможность сразу приступить к использованию системы (как минимум, скачать нужный установочный образ или virtual appliance)

  20. Возможность использования ОС семейства Windows в качестве гостевой системы (с поддержкой аппаратного ускорения Direct3D/OpenGL)* На любителя. Или для игр под Windows. *Поддержка аппаратного ускорения Direct3D/OpenGL остается исключительно на совести разработчика системы виртуализации (и железа).


    Итак

    По поводу написанного хотелось бы получить следующие комментарии:
  21. “Баян” - если я изобретаю очередной “велосипед” - пожалуйста, укажите на похожий проект (похожий - это такой, который ставит перед собой те же или почти те же самые цели).
  22. Поправки и исправления- вполне допускаю, что в моих знаниях по этому материалу есть существенные пробелы, поэтому если Вы считаете что я где-то ошибся или использовал неправильный термин буду только рад исправить статью с Вашей помощью.
  23. Концептуальные замечания - если можете, предложите более стройную или гибкую модель проекта, или помогите откалибровать акценты на задачи - как известно, самые грубые ошибки допускаются на этапе проектирования.
  24. Детализация - если Вам интересен этот проект, Вы можете помочь мне сделать следующий шаг - дробление задач на простые подзадачи и составление плана реализации.
  25. Технические howto - в сообществе активных пользователей Linux каждый человек начинает с азов и постепенно но неуклонно прогрессирует в направлении эксперта/гуру/бога в познании пути дао-линукс, так что я буду очень признателен каждому просветленному за любую техническую информацию, касающуюся способа реализации той или иной фичи этого проекта.

    P.S. Это первое “сочинение” такого рода которое я написал, я сейчас даже не уверен что запостил его в подходящий раздел или даже сайт. :)