Настройка KVM под Ubuntu Server 10.04 LTS. Часть 3 – Создание гостевых машин
Создание виртуальных машин
Теперь, когда KVM установлен, давайте разберем как создать вашу первую виртуальную машину.
Это можно сделать используя:
- virt-manager: графическое приложение
- virt-install,скрипт на pythonразработанный компанией Red Hat
- ubuntu-vm-builder, разработанный Canonical.
Ubuntu-vm-builder: быстрый и мощный инструмент для создания виртуальных машин Ubuntu JEOS
Ubuntu-vm-builder, возможно, лучший инструмент если вы желаете сделать виртуальный машин в Ubuntu JEOS, так как установка полностью автоматизирована.
Инструмент есть в пакетах в репозитарии:
1 |
sudo apt-get install ubuntu-vm-builder |
Примечание: вам необходимо, чтобы был установлен grub, чтобы vmbuilder заработал. Если вы используете lilo для запуска вашей хост-машины, вам все равно необходимо установить пакет Grup. Вы можете продолжать использовать lilo как бут-менеджер основной системы, но гостевые машины будут использовать grub. grub используется для создания загрузочных образов гостевых систем.
Примечание: убедитесь, что у вас хватает места на разделе с директорией /tmp (1Гб или больше). Также, некоторые локали глючат с ubuntu-vm-builder; en_US — точно будет рабочей.
Простое использование
Ниже самый простой пример как использовать утилиту:
1 |
sudo ubuntu-vm-builder kvm hardy |
Это сделает Ubuntu Hardy, со всеми параметрами, установленными по умлочанию.
Или же вы можете использовать эту ссылку для Javascript-ового инструмента, который генерирует кучу параметров, доступных для ubuntu-vm-builder:
1 |
http://people.ubuntu.com/~kirkland/ubuntu-vm-builder.html |
Примечание: если вы используете Virsh для управления вашими виртуальными машинами, как описано ниже, то вам необходимо добавить параметр:
1 |
--libvirt qemu:///system |
Скрипт, к сожалению, не может добавить этой опции.
Примечание: когда используется параметр —libvirt, xml-файл отправляется в libvirt и не сохраняется локально. Используйте virsh -c qemu:///system или virt-manager -c qemu:///system для запуска вашей машины или изменения ее конфигурации.
Более продвинутый пример
Теперь разберем более продвинутый пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
ubuntu-vm-builder kvm hardy \ --domain newvm \ --dest newvm \ --arch i386 \ --hostname hostnameformyvm \ --mem 256 \ --user john \ --pass doe \ --ip 192.168.0.12 \ --mask 255.255.255.0 \ --net 192.168.0.0 \ --bcast 192.168.0.255 \ --gw 192.168.0.1 \ --dns 192.168.0.1 \ --mirror http://archive.localubuntumirror.net/ubuntu \ --components main,universe \ --addpkg acpid \ --addpkg vim \ --addpkg openssh-server \ --addpkg avahi-daemon \ --libvirt qemu:///system ; |
Этак команда создаст новую виртуальную машину Ubuntu Hardy с именем «newvm», сетевое имя машины будет «hostnameformyvm», сеть будет сконфигурирована со статическим IP-адресом и адрес шлюза будет 192.168.0.1. Ключ —mirror указывает скрипту на то, чтобы скачивать пакеты с локального зеркала Ubuntu вместо сервера по умолчанию (это может сэкономить много времени при создании виртуальной машины). Параметр components включает репозитарии main и universe по умолчанию в виртуальной машине, —addpkg vim устанавливает vim, и, наконец, последний аргумент добавляет только что созданную виртуальную машину в KVM.
Добавлением ‘openssh-server’ с помощью —addpkg, мы делаем возможным подключение по ssh к нашей новой машине после ее запуска (если сеть будет работать правильно).
Добавлением ‘avahi-daemon’ виртуальная машина добавляет запись MDNS (‘ubuntu.local’ в этом примере), так что вы можете подключиться по ssh right без выяснения какой адрес DHCP присвоил машине.
Примечание: Это руководство не рассматривает опцию —exec, используемую для запуска скрипта во время процесса сборки виртуальной машины. Если вы используете ключ —exec, то вы должны указать полный путь к скрипту, который желаете выполнить. Если этого не сделать, можно насечься на сообщение установщика, что он не может найти скрипт.
Предупреждение о багах: похоже, что пакет ‘linux-package’ не будет находиться во время сборки машины, пока ‘restricted’ так же указано в опции component ubuntu-vm-builder а. Если не указано, то вы получите нефункионирующую систему, которая может только загружаться в grub. Эта строчка работает:
1 |
--components 'main,universe,restricted' |
Скорее всего это глюк ubuntu-vm-builder.
Предупреждение о необходимых пакетах: Когда вы управляется гостевыми машинами, команды выключения и перезагрузки (shutdown/reboot), отправляемые virsh — это события ACPI. Таким образом чтобы машина нормально перезагружалась/выключалась необходимо включить поддержку ACPI. Если гостевая операционная система Ubuntu — выполните «sudo apt-get install acpid».
Запуск машины, созданной в «продвинутом примере»
Единожды создав гостевую машину, вы можете увидеть ее набрав следующее:
1 2 3 4 5 6 |
virsh 'list --all' You'll see : Id Name State ---------------------------------- - YourGuestName shut off |
Для запуска вашего виртуального сервера, вы можете набрать:
1 |
virsh start YourGuestName |
Доступ к новому серверу удаленно, используя SSH туннель / VNC
Если ваш сервер удаленный, то вы можете использовать две следующие команды с вашей локальной машины.
Первая гостевая машина доступна по умолчанию по адресуvnc:127.0.0.1:5900. Если вы удаленно подключетесь к серверу, вы можете настроить ssh туннель и удаленно подключиться по vnc к виртуальному серверу.
Из терминала на локальной машине:
1 |
ssh YOURUSER@YOURSERVER -L5900:127.0.0.1:5900 |
Теперь идите в Приложения -> Интернет-> Подключение к удаленному рабочему столу. Протокол : VNC Хост : 127.0.0.1 Все остальное по умолчанию.
Это позволит вам подключиться к вашей первой гостевой машине.
Установка на не форматированные блочные устройства (raw devices)
Ubuntu-vm-builder не поддерживает создание виртуальных машина на raw блочных устройствах (таких как отдельный раздел или iSCSI шара). Вы можете использовать ubuntu-vm-builder для создания образа qcow2 и затем переместить виртуальную машину на блочное устройство с помощью qemu-img, например, если /dev/sdb это блочное устройство, на которое вы желаете перенести виртуальную машину:
1 |
sudo qemu-img convert root.qcow2 -O raw /dev/sdb |
Отредактируйте XML файл виртуальной машины в /etc/libvirt/qemu/, и установит параметр source file:
1 |
<source file='/dev/sdb'/> |
Переопределите виртуальную машину и запустите ее; теперь он работает с /dev/sdb.
Ubuntu-vm-builder это очень мощный инструмент — для получения более подробного описания ее возможностей наберите ubuntu-vm-builder —help.
Создание виртуальных машин с другими операционными системам: virt-install
Virt-install кардинально отличается в способе работы. Вместо автоматического создания новой виртуальной машины, он позволяет вам загрузить iso — образ, и, поэтому, установить практически любую операционную систему. Для списка поддерживаемых операционных систем, просмотрите официальную страницу KVM.
Так как нам необходим virt-install для установки гостевых систем Windows, здесь мы опишем как установить гостевой системой windows XP. В проессе установки возникает много мелких нюансов, потому опишем так же обходные пути.
Пример установки Windows
Скопируйте ISO-образ системы, которую вы желаете установить в вашу рабочую директорию:
1 2 |
yhamon@paris:~$ ls *.iso ubuntu-8.04-server-i386.iso windowsxpsp2.iso |
или создайте ISO из cd/dvd:
1 |
dd if=/dev/dvd of=dvd.iso |
Установка virt-install:
1 |
sudo apt-get install python-virtinst |
Затем, вам необходимо запустить virt-install.
1 |
sudo virt-install --connect qemu:///system -n xpsp2 -r 512 -f windows.qcow2 -s 12 -c windowsxpsp2.iso --vnc --noautoconsole --os-type windows --os-variant winxp |
Эта команда загрузит новую виртуальную машину с ISO-образа. Присоединитесь к новой виртуальной машине с помощью virt-viewer:
1 |
virt-viewer -c qemu:///system xpsp2 |
Или, если KVM запущен на другом сервере:
1 |
virt-viewer -c qemu+ssh://ip/system xpsp2 |
Теперь вы можете приступить к установке. Другая проблема возникает после первой перезагрузки в процессе установки, когда установщик виндовс будет ругаться на то, что он не видит больше диска. В XML файле вируталной машине добьте следующее к списку устройств:
1 2 3 4 5 6 7 8 9 10 11 |
<domain type='kvm'> [...] <devices> [...] <disk type='file' device='cdrom'> <source file='//home/yhamon/windowsxpsp2.iso'/> <target dev='hdc' bus='ide'/> <readonly/> </disk> </devices> </domain> |
Переопределите VM в virsh (sudo virsh define /etc/libvirt/qemu/xpsp2.xml) и перезапустите гостевую машину — все должно заработать.
Другая проблема с virt-install в сочетании с Windows в том, что созданный образ диска поврежден. При первой установке все вроде бы работает, но после перезагрузки она останавливается с сообщением ‘A read error occured’ (произошла ошибка чтения). Это может быть легко исправлено созданием нового образа диска (перед установкой):
1 |
qemu-img create -f qcow2 disk0.qcow2 12G |
Перезапишите файл qcow2, созданный virt-install новым файлом, перезагрузите гостевую машину и можно продолжать.
Пример установки Ubuntu
Вы можете использовать нижеследующее для установки Ubuntu Hardy:
1 |
sudo virt-install --connect qemu:///system -n hardy -r 512 -f hardy.qcow2 -s 12 -c hardy-server-amd64.iso --vnc --noautoconsole --os-type linux --os-variant ubuntuHardy --accelerate --network=network:default |
Опция ‘—network’ настраивает машину на использование дефолтной сети libvirt. Вы можете просмотреть доступные сети libvirt networks с помощью:
1 |
virsh net-list --all |
Другие операционные системы
Другие операционные системы могут быть установлены при помощи методов, описанных выше. Изучайте ‘man virt-install’ для более подробной информации о друиг параметрах для ваших виртуальных машинах и поддерживаемых типах операционных систем и видов.
Внимание: этот метод не работает с установкой Fedora LiveCD, и, вобзможно другими; см ошибку здесь: https://bugs.launchpad.net/ubuntu/+source/kvm/+bug/220463
Клонирование виртуальной машины
Вы можете клонировать существующую виртуальную машину используя утилиту virt-clone. Она копирует образ диска и устанавливает конфигурацию виртуального домена машины.
Если вы желаете склонировать виртуальную машину с именем srchost в новую машину newhost, убедитесь, что машина srchost не запущена и выполните следующую команду.
1 |
$ virt-clone --connect=qemu:///system -o srchost -n newhost -f /path/to/newhost.qcow2 |
Создание виртуальной машины на существующем образе
Если предположить что:
- Virt-manager используется для управления виртуальными машинами.
- Вы жалете добавить уже существующий образ в virt-manager.
Вариант решения:
Используя qcow2 с наложением, вы можете по жесткой экспериментировать с вашими виртуальными машинами без заморочек с полной переустановкой вашей машины при ее повреждении. Побочный эффект этого метода по сравнению с клонированием, это более экономное использование дискового пространства.
Процедура по шагам:
1. Создайте образ жесткого диска формата qcow2:
1 |
$ qemu-img create -f qcow2 <image name>.qcow2 |
2. Установите виртуальную машину, используя virt-manager:
Вместо разрешения virt-manager у создать новый образ диска, просто перенаправьте его на использование образа, который мы сделали в предыдущем шаге.
3. создание наложения:
1 |
$ qemu-img create -f qcow2 -b <image name>.qcow2 <image name>.ovl |
4. Создайте XML-файл описания виртуального образа:
Прочтите сначала:
1 2 |
$ man virt-image $ man 5 virt-image |
Скопируйте XML-файл, созданный ранее в шаге 2:
1 |
$ cp ~/.libvirt/qemu/<vm name>.xml overlay.xml |
Теперь, используя ваш любимый редактор, откройте и отредактируйте скопированный XML-файл:
1 |
$ <editor> overlay.xml |
Создайте XML описание виртуального образа, опираясь на страницу мана virt-image(5). Я просто закомментировал оригинальный текст, и использовал его как руководство по созданию нового описания.
5. Создайте новую виртуальную машину из описания образа:
1 |
$ virt-image --vnc overlay.xml |
6. Запустите и проверьте новую виртуальную машину, основанную на технологии наложения.
Откройте новую виртуальную машину в virt-manager и проверьте, что все что дорого вашему сердцу на месте. Если вы поломали виртуальную машину, просто удалите ее. Затем, пересоздайте образ-наложение (overlay image) и пересоздайтевиртулаьную машину как описано выше. Вы можете если желаете зафиксировать изменения в базовый образ (см man qemu для подробностей).
Смотри так же
Специфичные для систем рекомендации см в FAQ.
apt-cacher-ng для зеркалирования. Вы можете уменьшить время установки на 3-4 минуты при использовании ubuntu-vm-builder для соответствующих машин.