Введение
Виртуализация на уровне ОС
Linux VServer — это реализация виртуального частного сервера, созданная путем добавления функций виртуализации на уровне операционной системы в ядро Linux. Она разрабатывается и распространяется как программное обеспечение с открытым исходным кодом.
Подробности
Проект был начат Жаком Желинасом. В настоящее время его поддерживает Герберт Пётцль. Он не связан с проектом Linux Virtual Server, который реализует сетевую балансировку нагрузки. Linux VServer – это механизм изоляции, позволяющий безопасно разделять ресурсы компьютерной системы (такие как файловая система, время процессора, сетевые адреса и память) таким образом, что процессы не могут организовать атаку типа «отказ в обслуживании» на что-либо за пределами своей области. Каждая область называется контекстом безопасности, а виртуализированная система внутри неё – виртуальным частным сервером. Предоставляется утилита, подобная chroot, для перехода в контексты безопасности. Запуск виртуального частного сервера – это просто запуск init в новом контексте безопасности; аналогично, его остановка – это просто завершение всех процессов с этим контекстом безопасности. Сами контексты достаточно надёжны для загрузки многих дистрибутивов Linux без изменений, включая Debian и Fedora. Виртуальные частные серверы обычно используются в веб-хостинге, где они полезны для разделения учётных записей клиентов, объединения ресурсов и предотвращения потенциальных нарушений безопасности. Для экономии места на таких установках файловая система каждого виртуального сервера может быть создана как дерево жёстких ссылок с копированием при записи к файловой системе-шаблону. Жёсткая ссылка помечается специальным атрибутом файловой системы, и при изменении она надёжно и прозрачно заменяется реальной копией файла. Linux VServer предоставляет две ветви: стабильную (2.2.x) и devel (2.3.x) для ядер серии 2.6, а также одну стабильную ветвь для серии 2.4. Также доступна отдельная стабильная ветвь с интегрированным набором патчей grsecurity.
Преимущества
Виртуальные серверы используют тот же интерфейс системных вызовов и не имеют накладных расходов на эмуляцию. Виртуальным серверам не требуется поддержка в виде непрозрачных образов дисков, они могут использовать общую файловую систему и общие наборы файлов (с помощью механизма copy-on-write и жестких ссылок). Это упрощает резервное копирование системы и объединение дискового пространства между виртуальными серверами. Процессы внутри виртуального сервера выполняются как обычные процессы на хост-системе. Это несколько эффективнее с точки зрения использования памяти и ввода-вывода, чем эмуляция всей системы, хотя механизмы расширения памяти и современные виртуальные машины позволяют возвращать неиспользуемую память и совместно использовать кэш диска с хостом и другими виртуальными серверами. Процессы внутри виртуального сервера планируются тем же планировщиком, что и на хост-системе, что позволяет гостевым процессам выполняться параллельно на SMP-системах. Это нетривиально реализовать при эмуляции всей системы. Сетевое взаимодействие основано на изоляции, а не на виртуализации, поэтому отсутствуют дополнительные накладные расходы на пакеты. Меньшая поверхность для уязвимостей в системе безопасности. Используется одно ядро с небольшой дополнительной кодовой базой, в отличие от 2+ ядер и больших интерфейсов между ними. Поддерживаются расширенные возможности планирования Linux, такие как приоритеты реального времени.
Недостатки
Требует внесения изменений в ядро хоста. Функциональность кластеризации или миграции процессов отсутствует, поэтому ядро хоста и хост-компьютер остаются единственной точкой отказа для всех виртуальных серверов. Сеть построена на изоляции, а не на виртуализации. Это не позволяет каждому виртуальному серверу создавать собственную внутреннюю настройку маршрутизации или межсетевого экрана. Некоторые системные вызовы (преимущественно связанные с аппаратным обеспечением, например, часы реального времени) и части файловых систем /proc и /sys остаются невиртуализированными. Не предусмотрено выделение пропускной способности дискового ввода-вывода для каждого виртуального сервера.