Для тестирования разнообразных виртуальных конфигураций обычно требуется несколько физических хостов. Это далеко не всегда удобно, а иногда и невозможно.
Выход есть - это “вложенные” (nested) виртуальные машины, когда есть гипервизор установленный непосредственно на железо(уровень L0), в нем запускается виртуальная машина с другим гипервизором (уровень L1), а затем в гипервизоре уровня L1 запускаются еще виртуальные машины.
Nested виртуализация поддерживается VMWare ESXi 5.x. Об этом есть статьи в интернете. И у меня немного тоже есть - Запуск других гипервизоров в ESXi 5.
Также “вложенные” гипервизоры можно запускать в KVM. Я попытался сделать это в Ubuntu 14.04.
Обязательное условие - поддержка процессором технологий Intel VT-x или AMD-V, то есть наличие флага vmx для процессоров Intel или svm для процессоров AMD.
Посмотреть наличие этих флагов можно в выводе команды:
cat /proc/cpuinfo
Я попробывал запустить XenServer 6.2 под ESXi 5.5 и он запустился. Но с ESXi невозможно работать на ноутбуке.
Решение пришло в виде Ubuntu 14.04 Server + KVM.
Я поставил Ubuntu 14.04 Server, при установке я указал что хочу KVM host, а затем поставил desktop от KDE. Для управления виртуальными машинами установил virt-manager:
sudo apt-get install virt-manager
Дальше оказалось нужно проверить возможность запуска вложенных гипервизоров в KVM. Для этого выполняем:
$ cat /sys/module/kvm_intel/parameters/nested Y
Если в вывод Y, значит поддержка вложенных VM уже включена.
Если нет - делаем как написано тут: http://www.rdoxenham.com/?p=275.
У меня на свежеустановленной Ubuntu 14.04 все уже было включено.
Как написано во многих мануалах - в виртуальной машине с гипервизором нужен процессор с поддержкой vmx. Ее можно специально включить либо в virt-manager, указав в конфигурации процессора в Processor → Configuration → CPU Features → vmx - require, либо в конфигурационном xml-файле вирутальной машины в папке /etc/libvirt/qemu/ строкой:
<feature policy='require' name='vmx'/>
в секции cpu.
Итак - я создал виртуальную машину типа Generic, дал ей 4 Gb памяти, включил vmx, в дополнительных свойствах указал Virt-type: kvm и Architecure: x86_64 и запустил инсталлятор XenServer 6.2.
Инсталлятор запустился, я обрадовался, но быстро обломался. При установке XenServer 6.2 инсталлятор бодро сообщал мне что Hardware virtualization assist support is not available on this system. . Это было обидно. Это означало однозначную невозможность запустить в этом гипервизоре Windows. Несколько часов гугления не давали результата. Перебор различных вариантов параметров виртуальной машины под XenServer тоже.
И вот я обнаружил таких же страдальцев на багтрекере ядра Linux - https://bugzilla.kernel.org/show_bug.cgi?id=45931. Они сообщали, что проблема в единственной строке кода и патч будет включен в версию ядра 3.16, а состав Ubuntu 14.04 входит ядро 3.13. К моему счастью я обнаружил, что для Ubuntu вышел релиз-кандидат ядра версии 3.16RC2.
Обновление ядра вышло предельно простым:
wget kernel.ubuntu.com/~kernel-ppa/mainline/v3.16-rc2-utopic/linux-headers-3.16.0-031600rc2_3.16.0-031600rc2.201406220135_all.deb wget kernel.ubuntu.com/~kernel-ppa/mainline/v3.16-rc2-utopic/linux-headers-3.16.0-031600rc2-generic_3.16.0-031600rc2.201406220135_amd64.deb wget kernel.ubuntu.com/~kernel-ppa/mainline/v3.16-rc2-utopic/linux-image-3.16.0-031600rc2-generic_3.16.0-031600rc2.201406220135_amd64.deb wget kernel.ubuntu.com/~kernel-ppa/mainline/v3.16-rc2-utopic/linux-image-3.16.0-031600rc2-generic_3.16.0-031600rc2.201406220135_amd64.deb sudo dpkg -i linux-headers-3.16*.deb linux-image-3.16*.deb
В результате я смог установить XenServer 6.2 и запустить в нем виртуальную машину в режиме HVM и в ней установку Windows 7 x64, однако установка зависает в разных местах. Самое большее что пока удалось сделать - дойти до копирования файлов. Хотя, есть подозрение, что XenServer останавливается сам, независимо от того, работают на нем виртуальные машины или нет. Кстати - аналогичное зависание XenServer 6.2 наблюдается и под VirtualBox в среде Windows. Там удается установить какой-нибудь Linux в режиме PV, но потом XenServer виснет в произвольном месте.
Продолжение следует.