Хотим мы того или нет, но программы, для которых необходима Windows, никуда из офисов не исчезли. В ситуации, когда их использование безальтернативно, лучше иметь виртуальную ОС, например для того, чтобы подключиться к аудио-конференции через Skype for Business.
В этой статье я расскажу, как можно с минимальными издержками установить гостевую ОС Windows на гипервизоре QEMU
с помощью графического интерфейса virt-manager
. Мы нанесем на карту все подводные камни и рифы, а жучков аккуратно посадим в банку.
Подготовка
Самый первый шаг — настройка параметров ядра. Обязательна поддержка KVM
и vhost-net
, желательна поддержка туннельных интерфейсов[1] и сетевого моста[2]. Полный список на Gentoo вики-странице QEMU.
Подготовьте дисковое пространство. Я выделил 70 GiB, и Windows 8.1 за пару месяцев использовала почти 50 GiB так, что для обновления до 10-й версии места на диске не хватило.
Далее, нам понадобится набор редхатовских драйверов virtio-win
. Если у вас установлен RedHat, достаточно запустить
[root@server ~]# yum install virtio-win
и образ iso будет записан в каталог /usr/share/virtio-win/
. Также можно его скачать с репозитариев Fedora.
Убедитесь, что поддержка аппаратной виртуализация включена в BIOS/UEFI. Без этого KVM
не будет активирован, а virt-manager
выдаст вот такую ошибку.
В качестве проверки можно прочитать файл устройства.
(2:506)$ ll /dev/kvm
crw-rw----+ 1 root kvm 10, 232 ноя 9 02:29 /dev/kvm
Если файл не обнаружен, а опции ядра выставлены верно, значит дело в настройках BIOS/UEFI
.
Устанавливаем нужные пакеты.
(5:519)$ sudo emerge -av qemu virt-manager
Для RedHat 7 достаточно установить только virt-manager
, так как QEMU
устанавливается по умолчанию.
[root@server ~]# yum install virt-manager
Дебианщикам надо установить пакет qemu
.
root# aptitute install qemu
Можно теперь переходить к установке.
Запуск и инсталляция
Запускаем virt-manager
и создаем новую виртуальную машину из локального хранилища.
Указываем путь к установочному iso образу Windows.
Далее, на 3-м и 4-м шаге будет выбор количества CPU, объем RAM и размер дискового пространства, после чего на 5-м шаге следует выбрать дополнительные конфигурации перед настройкой.
Окно дополнительных настроек нужно для того, чтобы выполнить финт ушами. Его смысл в том, чтобы добавить виртуальный флопарь с драйверами из набора virtio-win
. Это даст возможность изменить тип жесткого диска: удалить диск с шиной IDE и добавить его же, но с шиной VirtIO. Подробно, в доках RedHat.
Прописываем драйвер /usr/share/virtio-win/virtio-win.vfd
и добавляем виртуальный флоппи-диск. Затем переходим на вкладку [Шина] Диск №
и проделываем финт с заменой шины диска: удаляем с IDE и добавляем с VirtIO.
Чуть не забыл сказать, для чего нужен этот фокус. Специалисты утверждают, что с шиной VirtIO, производительность диска ощутимо выше.
В принципе, уже можно начинать инсталляцию, но мы забыли добавить CD-ROM с драйверами virtio-win
, а они нам пригодятся, когда диспетчер устройств засверкает желтыми иконками вопросительного знака.
Ну вот теперь можно начать установку.
Ну хорошо, начали мы установку. А что, если установщик Windows попросит сменить диск? Мне из-за этого пришлось пару раз прервать и начать всю карусель заново, но с вами такого уже не случится.
(qemu) change ide1-cd0 /tmp/windows_8.1_x64_disk2.iso
Драйвера и доводка
По окончанию процесса установки диспетчер устройств недосчитается некоторых драйверов. Предположительно, это могут быть:
Ethernet Controller
PCI Simple Communication Controller
SCSI Controller
Нужно скормить им драйвера из набора virtio-win
, что подключены через IDE CD-ROM в предыдущем разделе.
Делается это стандартно: правой кнопкой на желтый знак вопроса, обновить драйвера, путь к файлам.
Вот весь список, а это соседняя страница RedHat доков, где установка драйверов показана подробнее.
- Balloon, the balloon driver, affects the PCI standard RAM Controller in the System devices group.
- vioserial, the serial driver, affects the PCI Simple Communication Controller in the System devices group.
- NetKVM, the network driver, affects the Network adapters group. This driver is only available if a virtio NIC is configured. Configurable parameters for this driver are documented in Appendix E, NetKVM Driver Parameters.
- viostor, the block driver, affects the Disk drives group. This driver is only available if a virtio disk is configured.
Оборудование
Тут постепенно начинается область безграничных возможностей и 101 способов сделать по-своему, поэтому я покажу, как это работает у меня, а вы можете настроить более точно под свои нужды.
У меня выбран дисплей Сервер Spice
и звуковое устройство ich6
. Нет, конечно, если у вас уйма времени и желание во всем разобраться до самых тонкостей — дерзайте и пробуйте альтернативные подходы, но у меня звук взлетел, вернее завибрировал, только с такими настройками. Во второй части, посвященной прогулке по граблям и отлову багов, я расскажу об этом подробнее. В закладке видео я выставил QXL
, ибо с этой опцией, благодаря волшебному драйверу, мне удалось добиться нормального разрешения экрана.
Подключаться к ВМ можно разнообразно.
- Через графический интерфейс virt-manager
- Выбрать дисплей VNC-сервер и подключаться через vnc-клиента
- Установить Spice-клиента и подключаться через него
- К Windows можно подключиться через rdp, если включен терминальный сервер
У меня вариант 3, для Gentoo это программа spice-gtk
$ eix spice-gtk
[I] net-misc/spice-gtk
Доступные версии: 0.31 ~0.32-r1 ~0.32-r2 **9999 {dbus gstaudio gstreamer gstvideo gtk3 +introspection libressl lz4 mjpeg policykit pulseaudio python sasl smartcard static-libs usbredir vala webdav PYTHON_SINGLE_TARGET="python2_7 python3_4" PYTHON_TARGETS="python2_7 python3_4"}
Установленные версии: 0.31(16:05:41 18.06.2016)(gtk3 introspection pulseaudio python usbredir -dbus -gstreamer -libressl -lz4 -policykit -sasl -smartcard -static-libs -vala -webdav PYTHON_SINGLE_TARGET="python2_7 -python3_4" PYTHON_TARGETS="python2_7 python3_4")
Домашняя страница: http://spice-space.org https://cgit.freedesktop.org/spice/spice-gtk/
Описание: Set of GObject and Gtk objects for connecting to Spice servers and a client GUI
Сеть
Сеть для ВМ можно настроить по-разному, на Хабре умельцы уже об этом писали. Я перепробовал несколько способов, и в конце простота опять взяла вверх. Сама ВМ запускается из под рута[3], но графический интерфейс spice-gtk
— из под обычного непривилегированного пользователя. Это позволяет решить дилемму: для сетевых опций нужны права рута, а для звукового демона pulseaudio, рут запрещен. Я пробовал навешать все права на обычного пользователя, но ничего не получалось, то pulse не пульсирует, то сеть не создается, там много а тут мало. В итоге решил так и доволен. Буду рад, если в комментариях будет найден лучший способ.
Такой простой выбор сетевых опций дает результат превосходящий ожидания. Создаются 3 дополнительных сетевых интерфейса: virbr0, virbr0-nic, vnet0.
$ ip addr
...
4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:cc:2a:1e brd ff:ff:ff:ff:ff:ff
inet 192.168.102.1/24 brd 192.168.102.255 scope global virbr0
valid_lft forever preferred_lft forever
5: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:cc:2a:1e brd ff:ff:ff:ff:ff:ff
11: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master virbr0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:fb:50:45 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fefb:5045/64 scope link
valid_lft forever preferred_lft forever
В iptables
создается свод правил, вот основные:
$ sudo iptables -L
...
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere 192.168.102.0/24 ctstate RELATED,ESTABLISHED
ACCEPT all -- 192.168.102.0/24 anywhere
Windows ВМ:
C:\Users\user>ipconfig
Windows IP Configuration
Ethernet adapter Ethernet 2:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::90c3:a458:6645:7b9a%7
IPv4 Address. . . . . . . . . . . : 192.168.102.203
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : 192.168.102.1
Tunnel adapter isatap.{BD8F0DA4-92A8-42BD-A557-23AC89AED941}:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Tunnel adapter IPHTTPSInterface:
Connection-specific DNS Suffix . :
IPv6 Address. . . . . . . . . . . : 2620:0:a13:8a7:51af:79ae:92b8:828a
Temporary IPv6 Address. . . . . . : 2620:0:a13:8a7:b49d:81fe:e509:16e7
Link-local IPv6 Address . . . . . : fe80::51af:79ae:92b8:828a%15
Default Gateway . . . . . . . . . :
Повторяю, все это libvirtd создает сам, ничего для этого делать не надо. В результате имеем нормальный роутинг между хостом и ВМ, можно обмениваться файлами по ssh / scp
. Можно пойти дальше и создать шару на Windows, а на Linux хосте настроить samba, но мне это показалось избыточным.
В завершение
Трудно рассказать в одной статье обо всех аспектах Windows + QEMU/KVM, поэтому завершим в следующей. А там будет самый смак, командный интерфейс, разрешение экрана максимум 1024x768, Сцилла pulseaudio и Харибда сети, команда virsh
и настройка ВМ из конфиг файла, фейл с tpm
, двоичный синтаксис устройств и прочие тихие радости.
Комментарии (34)
casuss
22.10.2016 23:08Посоветуйте толковую веб-морду для управления виртуалками KVM. Что-то типа phpVirtualBox…
Meklon
23.10.2016 00:26+6Как вариант взять сразу дистрибутив ProxMox?
Faight
23.10.2016 21:57+1У них недавно новый релиз был — 4.3. Пофиксили много багов, обновленная веб-морда, состояние дисков теперь через нее можно посмотреть и настройки ceph. Недавно обновил один из тестовых серверов.
Meklon
23.10.2016 22:05Давно на них целился, но у меня сервер одновременно медиацентр с Kodi. Неудобно. Поэтому просто KVM под Debian и виртуалки с управлением через RedHat'овский virtual machine manager. Хватает.
DaylightIsBurning
24.10.2016 11:33У меня тоже сервер одновременно Коди-центр, именно под Proxmox — очень даже удобно. Медиацентр — это тоже ВМ, точнее контейнер с пробросом видеокарты и юсб-портов (без IOMMU, это же контейнер) и pulseaudio по tcp. Если бы было IOMMU — можно было бы вообще видеокарту пробросить и было бы идеально вообще — никакого геморроя с настройкой контейнера и пробросом.
Meklon
24.10.2016 13:28Я не решился пробрасывать видео)
DaemonGloom
24.10.2016 13:40Собственно, сейчас видеокарту можно пробросить почти везде. Даже nvidia, которые блокируют такую возможность в своих драйверах. Работает в kvm/xen/esxi. Личный опыт — esxi и GTX750ti.
Meklon
24.10.2016 14:23Надо попробовать. Kodi — это последний сервис, который у меня привязан к ОС. И по-хорошему надо мигрировать на Ubuntu. Свежее и проще с плагинами. У меня Intel Core i5-3470. VT-d поддерживает. MSI B75IA-E33 — материнская. Видеокарта только интегрированная. Собственно, я уже задумался о переносе. Посоветуете что-то почитать? Заодно тот же вопрос к DaylightIsBurning.
DaemonGloom
24.10.2016 14:44Если видеокарты ещё нет — то radeon пробрасывается проще, приятнее и быстрее. И мигрировать, вероятно, лучше на http://openelec.tv/, если у вас нет потребности в дополнительных сервисах внутри данной виртуальной машины.
Ну и линк на официальную документацию: https://pve.proxmox.com/wiki/Pci_passthrough (в ней всё просто и понятно).
Впрочем, в первую очередь вам необходимо проверить наличие настройки vt-d в uefi вашей платы. Идеальный вариант — найти у друзей подходящую видеокарту и проверить работоспособность всей системы. После этого можно уже покупать.
(Спасибо за ваши статьи :) )Meklon
24.10.2016 15:07Всегда пожалуйста) насчет дискретной видеокарты — беда. Это mini-itx. Единственный PCI-E занят звуковой картой.
DaemonGloom
24.10.2016 18:04Увы, виртуализация встроенной видеокарты (KVMGT) не возможна для поколений ниже четвёртого. Так что придется или жертвовать звуком (у вас же всё равно hdmi устройство на втором конце кабеля выводит звук), или менять железо целиком.
DaemonGloom
24.10.2016 18:08Ну или уйти на связку «файловый сервер» + «коробочка для kodi». Здесь помогут всевозможные устройства с Android TV, например. Либо любое иное устройство с поддержкой нормальных дистрибутивов линукс и аппаратным ускорением.
Meklon
24.10.2016 19:04У меня на втором телевизоре RaspberryPie так работает. С HDMI звуком тоже не пойдет. Ниже по течению акустика домашнего кинотеатра. Это позволяет в том числе включать музыку через Kodi без телевизора.
DaylightIsBurning
26.10.2016 23:19Если есть IOMMU (поддержка нужна не только от ЦПУ, но и материнки), то проброс в KVM делается легко. Проброс звуковухи можно не делать, а просто по TCP/IP Pulseaudio соеденить. Не знаю, можно ли пробросить встроенное видео (даже если есть Vt-d). Если IOMMU не работает — можно пробросить видео в контейнер (не ВМ). Я так сделал на проксмосе. У меня встроенное видео от AMD, пробросил его в контейнер (KUbuntu) — всё работает, даже проприетарные дрова. На этом контейнере у меня Kodi. Можно даже пару таких контейнеров сделать, один «десктоп» и один медиацентр и запускать по очереди.
DaylightIsBurning
27.10.2016 14:40По поводу того, как настроить lxc контейнер в роли десктопа/медиацентра я в свое время исчерпывающего мануала не нашел, но по кускам инфу в гугле собирал. Ключевые слова lxc, desktop, gui, container, passthrough, gpu, video, pulseaudio и т.п. На гитхабе есть соотв. проект, но у меня не вышло его запустить, да и версия контейнера тогда вроде была 12.04, а я предпочитаю свежие версии для десктопной ОС. На тот момент мне удалось запустить контейнер с ubuntu 15.10, я установил Kodi и больше не трогал. Как будет время, попытаюсь воспроизвести процедуру и поставить 16.10… Я сначала просто добавил контейнер стандартным путём в проксмоксе, потом его менял.
Тут могут быть полезные куски конфигов:
https://www.stgraber.org/2014/02/09/lxc-1-0-gui-in-containers/
https://www.flockport.com/run-gui-apps-in-lxc-containers/
http://unix.stackexchange.com/questions/191289/docker-how-to-run-x-desktop-in-a-container
miron36357
23.10.2016 11:44+1«Как поставить Windows в KVM» — это точно статья для хабра, а не Компьютерры какой-нибудь?
dcc0
23.10.2016 13:24+4В принципе эта статья — руководство.
Подумайте сами: если исключить из хабра руководства, статьи на исторические темы по IT, то остаётся только два крупных направления —
1) реклама компаний
2) рассказы о том, как я написал игру/взломал чего-нибудь/нашёл уязвимость/восхваления и поругания отдельных языков программирования.
Ну и алгоритмы с математикой, в которые очень не часто что-то пишут.
Т.е. в принципе хабр остается рекламной площадкой для компаний и отдельных индивидуумов.
Это ж вроде бы не учебник и не ВикипедияDaylightIsBurning
23.10.2016 19:08-2Вы могли бы в дисклеймер просто добавить, что статья не решает никаких нетривиальных проблем и тем кто знаком с QEMU скорее всего будет неинтересна.
YourChief
23.10.2016 19:48+2Это подразумевается тэгом tutorial. Автор обозначил категорию материала и материал ей соответствует.
DaylightIsBurning
23.10.2016 20:36тоже верно, но мне кажется, добавить подобный дисклеймер не повредит, а негатива от аудитории, ожидающей большего и разочарованной поубавится.
YourChief
23.10.2016 17:32Даже стабильные драйверы для гостевой системы иногда вызывают проблемы, так что стоит рассмотреть использование образа с последними драйверами.
rader90
24.10.2016 11:14Хотелось уточнить версии по номерам. Какие посоветуете версии без глюков для установки Virtio драйверов, которые проверены и стабильны для windows 8.1, linux, unix, windows server 2012R2. На какую лучше систему поставить linux/unix(debian, freebsd10, ubuntu)?
YourChief
24.10.2016 11:54+1Последняя версия драйверов virtio для windows 0.1.126 — их я и советовал бы использовать. Со старыми версиями драйверов были проблемы, драйверы на некоторый устройства даже не устанавливались.
На FreeBSD нет KVM. Debian/Ubuntu/CentOS — вопрос вкуса, как вам больше нравится. Главное чтобы ПО было достаточно актуальное.
habrauser007
24.10.2016 11:53помнится, когда с этим возился, общий вектор развития был в сторону дисков virtio-scsi, а нормальный гостевой видео-драйвер я в итоге брал тут
AllexIn
Ну… Прямо скажем — установка винды под виртуалкой — это тривиальная вещь, с которой справится практически кто угодно.
Ожидал, что в статье будет затронут и подробно рассмотрен вопрос проброма PCI устройств(видеокарты, например). Т.к. это действительно важная часть удобного использования винды под виртуалкой. И в то же время не самая простая часть настройки виртуалки. Особенно благодаря вендорам типа NVidia, которые намеренно блокируют возможность проброса в драйверах.
Это была бы интересная и познавательная статья… А how-to установки видны, как я уже выше писал — это просто и врядли вызывает у кого-то вопросы.
temujin
Не могу с Вами согласиться. Мне пришлось помучиться с видео, звуком, сетью. Tpm не получается задействовать. Возможно, сама установка и легко происходит, но вот получить на выходе рабочую как надо систему, сложнее.
Во второй части я затрону эти вопросы, документация там запутана и есть над чем поколдовать.