Домашний сервер: виртуализация на основе Xen
Волей случая, пришлось обновить домашний сервер, в новом сервере оказался процессор core 2 duo и прилично памяти (3 гигабайта). Т.к. обычно сервер использовался в качестве файлопомойки, раутера и музыкального сервера, решил его чем-нибудь занять, чтобы не простаивали ресурсы, благо их теперь достаточно много. Решил настроить довольно популярную в последнее время технологию виртуализации, чтобы было возможно проводит различные опыты с настройкой и собирать пакеты в различных дистрибутивах/системах.
Технологии и системы
- OpenVZ
Технология заключается в выполнении различных систем с разными настройками и корневой системой под одним ядром. Данная технология часто используется при предоставлении услуги VDS/VPS. Т.к. ядро по сути одно и тоже, потеря производительности минимальна, но выбор систем ограничивается дистрибутивами linux’а с одним ядром. Существует платный вариант данной системы с большим количеством функций: Virtuozzo. - Xen
В основе лежит технология паравиртуализации. Вкратце: гостевая система специально подготавливается для работы с Xen, и соответственно получается довольно небольшая потеря производительности. В качестве гостевой системы может выступать Linux (ядро гостевой системы может отличатся от ядра основной системы), FreeBSD, NetBSD, OpenBSD, OpenSolaris, Plan 9 и другие. Также возможен запуск практически любой системе через технологии виртуализации Intel/AMD, но нужен процессор с поддержкой данных архитектур. Мой сервер, в отличии от ноутбука как оказалось не поддерживает данные технологии, по этому данный метод виртуализации расcматриваться не будет. - VirtualBOX/VMWare/Qemu и подобные системы эмуляции.
Данные системы обеспечивают эмуляцию, ценой потери производительности, по этому они рассматриваться не будут.
Установка и настройка
Все действия проводились на домашнем сервере с ubuntu-server, для других дистрибутивов возможно придется немного изменить действия.Первоначально нужно установить ядро и необходимый набор утилит:
apt-get install linux-headers-2.6.24-19-xen linux-image-2.6.24-19-xen \ linux-ubuntu-modules-2.6.24-19-xen xen-hypervisor-3.2 xen-tools
apt-get install xen-utils-3.2
Важно: если до установки xen-3.2 вы пытались установить xen-3.1, необходимо удалить все пакеты содержащие упоминания xen3.1, после становить xen-hypervisor-3.2, и перезагрузится, т.к. xen-hypervisor вносит некоторые правки для загрузки ядра. Если попытаться установить xen-utils-3.2 до перезагрузки, выйдет ошибка, т.к. xend не сможет загрузится на ядре для этого не предназначенном. Те же симптомы будут при попытки установить enomalism (web интерфейс для управления xen), т.к. он тянет за собой xen3.1
Xen + Nvidia
Так получилось, что у меня видео-карта от Nvidia, и на данном сервере планируется запустить медиацентр, соответственно приходится использовать пропиетарные драйвера. Изначально попробовал установить через envyng (связка скриптов для удобной установки пропиетарных драйверов видео-карт в ubuntu), но ядро запаниковало. При попытке удалить драйвер и собрать руками возникла неприятная вещь: перезагружаясь в ядро, dkms заново устанавливал драйвер. Пришлось удалить драйвер на всех ядрах (dkms remove -m nvidia -v 173.14.12 —all) и ставить руками. При установки не envy драйверов, устанавливаеться старая версия (9x.xx.xx), с которой возможны проблемы. Нужно сразу сказать, что стандартный драйвер ругается на xen ядро, и устанавливатся отказывается. Небольшой рецепт чтобы это обойти:Т.к. драйверу необходимы права root’а для установки, а при sudo не используются переменные текущего пользователя, то все команды нужно выполнять от рута. В связи с тем, что в ubuntu нет пароля у рута, и неизвестно как скажется на системе его установка, приходится использовать небольшое ухищрение чтобы получить консоль с правами суперпользователя: sudo su или sudo bash(zsh, csh, etc)
# export IGNORE_XEN_PRESENCE=1 # chmod a+x NVIDIA-Linux-x86-173.14.12-pkg2.run # ./NVIDIA-Linux-x86-173.14.12-pkg2.run
После завершения установки необходимо выйти из консоли суперпользователя: exitВнимание: данный метод установки не рекомендован и является довольно плохой практикой, в связи с тем что будет довольно сложно в будущем удалить данный драйвер, но т.к. иного способа нет, а создавать и поддерживать пакет для этих целей, который возможно будет конфликтовать с пакетами в репозитории довольно проблематично, я использовал этот способ. Вы можете собрать пакет с драйверами.
Создание и использование образов
В xen можно использовать как готовые образы для виртуальных машин, так и создавать свои. Большой архив готовых образов есть на jailtime.org. Мы же будем создавать свой образ, с помощью xen-utils.Образы создаются с помощью команды xen-create-image.Создадим образ с debian etch 64-bit:
xen-create-image -hostname=имя-машины -size=10Gb -swap=512Mb -ide -ip=192.168.0.100 -netmask=255.255.255.0 -gateway=192.168.0.1 -force -dir=/xen -memory=128Mb -arch=amd64 -dist=etch -passwd
- hostname: хостнейм системы, а также имя образа
- size: размер диска образа
- swap: размер swap файла для образа
- ide: использовать ide драйвер для диска
- ip: ip адрес образа
- netmask: маска сети образа
- gateway: ip адрес маршрутизатора (в данном случае ip основной системы)
- force: переписывает уже созданные образы
- dir: директория в которой будет содержатся образ
- memory: размер памяти выделяемый для системы
- arch: архитектура системы (amd64, i386, etc)
- dist: дистрибутив который Вы хотите установить
- passwd: запрашивать пароль суперпользователя для образа
xm create /etc/xen/имя-машины.cfg
Error: Device 769 (vbd) could not be connected. losetup /dev/loop0 /xen/domains/имя-машины/swap.img failed
Это связанно с тем, что xen-tools3.2 в конфигурационном файле использует пути до файлов дисков через file:/, тогда как этот параметр удален из Xen3.2. Чтобы данной ошибки не было, необходимо в конфигурационном файле /etc/xen/имя-машины.cfg в секции disk заменить пути с file:/xen/. на tap:aio:/xen/. Также необходимо настроить поддержку сети на основной системе, для этого в файлу /etc/network/interfaces нужно добавить к внутреннему интерфейсу следующие параметры:
up ip addr 192.168.0.100/28 dev eth0
Теперь у нас есть виртуальная машина, к которой можно присоединиться по сети, с любого компьютера.В случае если машина загрузилась, но что-то пошло не так, всегда можно зайти в локальную консоль с помощью команды: xm console имя_машиныДля автозагрузки виртуальной машины при старте системы необходимо сделать симлинк с конфигурационного файла машины в /etc/xen/auto:
ln -s /etc/xen/имя-машины.cfg /etc/xen/auto/
Основные команды для управления виртуальными машинами:
- xm console — вызывает первый терминал виртуальной машины
- xm create — запускает виртуальную машину на основе конфигурационного файла
- xm pause — временно останавливает виртуальную машину
- xm unpause — запускает виртуальную машину после остановки
- xm save — сохраняет состояние виртуальной машины
- xm restore — востанавливает состояние виртуальной машины
- xm reboot — перезагружает виртуальную машину
- xm shutdown — выключает виртуальную машину
- xentop — показывает текущую загрузку всех виртуальных машин
- xm list — список запущенных виртуальных машин
- xm dmesg — показывает dmesg виртуальной машины
- xm delete — удаляет виртуальную машину
- xm destroy — принудительно удаляет виртуальную машину