Время на прочтение6 мин
Количество просмотров179K
Хотим мы того или нет, но программы, для которых необходима 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, поэтому завершим в следующей. А там будет самый смак, командный интерфейс, разрешение экрана максимум 1024×768, Сцилла pulseaudio и Харибда сети, команда virsh
и настройка ВМ из конфиг файла, фейл с tpm
, двоичный синтаксис устройств и прочие тихие радости.
- ↑TUN/TAP interfaces
- ↑Ethernet bridging
- ↑От английского root
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
2024-05-29
·
4 мин. для прочтения
Установка Windows на KVM.
Содержание
1 Пререквизиты
- Необходимо иметь установленный libvirt (см. Виртуализация. Libvirt).
- Можно устанавливать с помощью какого-либо графического интерфейса управления qemu, например с помощью virt-manager:
- Gentoo:
emerge app-emulation/virt-manager
- Рекомендуется использовать драйвера Virtio для Windows.
- Работа через устройства Virtio осуществляется быстрее, чем через эмуляцию SCSI и т.д.
- Gentoo:
emerge app-emulation/virtio-win
- Можно просто скачать с репозитория:
- https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md
- Скачаем драйвера для qemu:
cd /var/lib/libvirt/images wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
- Проще всего использовать образ iso-диска и подмонтировать его как второй cdrom.
2 Установка Windows
- При установке следует выбрать пункт о дополнительной конфигурации перед установкой.
- На этом этапе следует добавить второй виртуальный cdrom с драйверами virtio-win.
- У жёсткого диска установите шину VirtIO.
- В разделе Обзор убедитесь, что для чипсета выбрано значение Q35, а для прошивки — UEFI.
- Для запуска Windows 11 под QEMU KVM необходимы Secureboot и TPM, в файле конфигураций это выглядит так:
<os> <type arch="x86_64" machine="q35">hvm</type> <loader readonly="yes" type="pflash">/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd</loader> <nvram template="/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd"/> <boot dev="hd"/> </os> ... <tpm model="tpm-tis"> <backend type="emulator" version="2.0"/> </tpm>
3 Использование virt-install
-
Конфигурацию можно создать с помощью virt-install:
virt-install \ --connect qemu:///system \ --disk /var/lib/libvirt/images/win11.iso,device=cdrom \ --disk /var/lib/libvirt/images/virtio-win.iso,device=cdrom \ --disk pool=default,size=120,bus=virtio,format=qcow2 \ --name windows11 \ --os-variant=win11 \ --machine q35 \ --ram 4096 \ --memballoon driver.iommu=on \ --vcpus=2 \ --network network=default,model=virtio \ --graphics spice \ --channel spicevmc \ --hvm \ --virt-type=kvm \ --features kvm_hidden=on,smm=on \ --tpm backend.type=emulator,backend.version=2.0,model=tpm-tis \ --boot uefi \ --check path_in_use=off \ --boot cdrom,hd,menu=on
--name windows11
: название виртуальной машины;--os-type=win11
: тип ОС;--cdrom /var/lib/libvirt/images/win11.iso
: путь к ISO-образу установочного диска ОС;--graphics spice
: графическая консоль;--disk pool=default,size=160,bus=virtio,format=qcow2
: хранилище;- образ виртуальной машины будет создана в пространстве хранения объёмом 160 ГБ, которое автоматически выделяется из пула хранилищ default;
- образ диска для этой виртуальной машины будет создан в формате qcow2;
--ram 4096
: объём оперативной памяти;--vcpus=2
: количество процессоров;--network network=default
: виртуальная сеть default;--hvm
: полностью виртуализированная система;--virt-type=kvm
: использовать модуль ядра KVM, который задействует аппаратные возможности виртуализации процессора.
-
В качестве видео-интерфейса ставим QXL.
- После установки драйверов следует перевести в Virtio.
4 Установка
- Вначале Windows не видит диск.
- Необходимо установить драйвер диска из папки
e:\amd64\w11
. - Далее, для подключения к сети потребуется установить драйвер.
- Для этого выберите весь диск с драйверами
e:\
.
5 После установки
- Для загрузки используйте
virt-manager
. - Установите сертификат RedHat с CD-диска:
e:\cert\Virtio_Win_Red_Hat_CA.cer
- После загрузки установите необходимые драйвера Virtio:
- Установите гостевые утилиты:
e:\virtio-win-guest-tools.exe
- Отмонтируйте установочный диск Windows.
- Поменяйте в настройках virt-manager типы устройств:
- видео на Virtio + 3D;
- в разделе Spice добавьте OpenGL.
- Возможно, следует отключить масштабирование экрана в меню (Вид -> Масштабирование экрана -> Никогда) (чтобы шрифты не смазывались).
6 Общая папка
- Будем использовать встроенный метод создания общей папки с помощью virt-manager.
- Нажмите на значок с надписью Показать виртуальное оборудование (Show virtual hardware details) на панели инструментов.
- Нажмите Память (Memory) на левой панели.
- Проверьте, что выбрана опция Включить общую память (Enable shared memory).
- Нажмите Применить.
- Внизу нажмите Добавить оборудование (Add hardware).
- Выберите Файловая система (File system) на левой панели в окне добавления нового оборудования.
- Затем выберите Driver=virtiofs на вкладке Подробности.
- Нажмите на browse > browse local и выберите путь к хосту из вашей системы Linux, например
/home
. - В целевом пути укажите любое имя, например
home
.
- Установите в системе Windows WinFSP (FUSE для Windows).
- Можно скачать с сайта https://github.com/winfsp/winfsp/releases/.
- Можно установить с Chocolatey (см. Пакетный менеджер для Windows. Chocolatey):
- Установите
virtio-win-guest-tools.exe
(уже установили).- Возьмите из комплекта
virtio-win.iso
или скачайте напрямую из https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/. - После завершения установки перезагрузите виртуальную машину Windows.
- Возьмите из комплекта
- Откройте меню “Пуск” и найдите “Службы”.
- Найдите службу Служба VirtIO-FS (VirtIO-Sevice-FS).
- Щелкните правой кнопкой мыши и нажмите “Запустить”, чтобы запустить службу.
- Можно запустить из командной строки:
- Установите её на автозапуск (VirtIO-Sevice-FS > Properties > Startup type > Manual to Automatic).
- После запуска службы откройте Проводник, и вы должны увидеть метку монтирования, которую вы создали в первом шаге выше, и которая должна быть отображена как диск
Z:
.
7 Буфер обмена
- Должно работать само после установки драйверов virtio.
- Проверьте, что есть Канал (spice) типа
spicevmc
. - Установите в Windows SPICE Guest Tools (возможно установить из следующих источников):
- установите
virtio-win-guest-tools.exe
(уже установили). - https://www.spice-space.org/download/windows/spice-guest-tools/spice-guest-tools-latest.exe.
- Можно установить с помощью Chocolatey:
choco install spice-agent
- установите
8 Видео
- RuTube
- Платформа
- VKvideo
- Youtube
Установка Windows на KVM
Provide feedback
Saved searches
Use saved searches to filter your results more quickly
Sign up
These are the steps I arrived at in order to install a Windows 10 Guest on an Ubuntu 18.04 host using virt-manager to install a Qemu VM with KVM acceleration and VirtIO drivers.
Prerequisites
Create a directory to work in and install the tools we will need. The virtio-win ISO image contains the drivers we will need in order to make Windows bootable.
1 |
mkdir windows |
You will also need to copy your Windows 10 installer ISO into your windows/
directory.
Disk Setup
This creates a blank image that will be attached as a virtual hard drive to the Windows instance. We use qcow2 because it supports some nice extensions above those on the raw format, like thin provisioning of storage.
1 |
qemu-img create -f qcow2 windows_10_x64.qcow2 75G |
Creating the VM
Call virt-install
to create the VM.
1 |
virt-install \ |
Verify the running VMs with the virsh
command:
1 |
~/windows $ virsh list |
Connecting to the VM
Now that the VM is running, you need to connect to it and install Windows. VNC to the host machine on port 5900 using the password you specified in the virt-install
command. You did change that password, didn’t you?
On Mac OS you can use open
to call the built in VNC client.
1 |
open vnc://<host>:5900 |
Windows Install
There will be a few extra steps to install Windows above and beyond a normal install. Because the accelerated VirtIO drivers required to interface with the virtual disk controller are not bundled with Windows, we need to load them into the installer before it will be able to talk to the virtual hard drive.
When asked to do an Upgrade or a Custom install, select Custom Install.
Select Load Driver to point the installer to your driver file.
Navigate to E:\viostor\w10\amd64
There should only be one option, the VirtIO SCSI Controller.
The installer should now see your virtual disk. Hit next to let Windows automatically partition it.
Next steps
Once the installer finishes and you get into Windows you may want to do a few more things
- Install the other drivers on the virtio-win ISO (network, etc…)
- Apply Updates
- Enable RDP
Для начала нам необходимо запустить сервер в режиме Resque. Авторизуемся.
Переходим в каталог /tmp
:
Загружаем ПО vKVM:
wget https://mirror.spacecore.info/software/vkvm-latest.tar.gz && tar xvf vkvm-latest.tar.gz
Скачиваем необходимый нам образ ОС:
wget https://mirror.spacecore.info/os/windows/Windows_10_x64_1909.iso
Далее запускаем ПО:
/tmp/qemu-system-x86_64 -net nic -net user,hostfwd=tcp::3389-:3389 -m 10000M -localtime -enable-kvm -cpu core2duo,+nx -smp 2 -usbdevice tablet -k en-us -cdrom Windows_10_x64_1909.iso -hda /dev/nvme0n1 -vnc :1 -boot d
После аргумента «-cdrom» необходимо указать название Вашего образа ОС.
А после «-hda» — название диска, на который будет производиться установка.
Если Вы столкнетесь с ошибкой рода:
«cannot set up guest memory ‘pc.ram’: Cannot allocate memory»
То ее решением станет смена параметра «-m 10000M» на значение МегаБайт, которое доступно в Вашей системе.
В случае успешного выполнения команды не последует никакого ответа, запустится процесс KVM в активном окне.
Далее устанавливаем и запускаем программу UltraVNC. В ней мы указываем в поле ввода адрес нашего сервера + порт «1» в формате: «IP:1».
Подключаемся к серверу и начинаем процесс установки ОС Windows:
Следом создаем разделы и устанавливаем ОС на основной накопитель с достаточным количеством памяти.
После завершения основной установки переходим к настройке пользователя. Первым делом указываем имя.
А далее пароль пользователя.
Пароль необходимо указать, в противном случае Вы не будете иметь доступа к RDP.
Как только установка будет полностью завершена, нам необходимо перейти в настройки брандмауэра Windows и полностью отключить его для избежания блокировок соединения.
Далее необходимо включить удаленный доступ Windows (RDP) в соответствующих настройках.
А также не забываем убрать галочку с параметра «Разрешить подключения только…».
Сохраняем изменения. После чего выключаем нашу Windows.
Когда ОС выключится, процесс vKVM прекратится на нашем основном сервере
Теперь загружаем наш выделенный сервер с основного диска, на который была установлена ОС Windows и подключаемся по созданной учетной записи.