Qemu kvm windows host

Время на прочтение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, ибо с этой опцией, благодаря волшебному драйверу, мне удалось добиться нормального разрешения экрана.

Подключаться к ВМ можно разнообразно.

  1. Через графический интерфейс virt-manager
  2. Выбрать дисплей VNC-сервер и подключаться через vnc-клиента
  3. Установить Spice-клиента и подключаться через него
  4. К 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, двоичный синтаксис устройств и прочие тихие радости.


  1. ↑TUN/TAP interfaces
  2. ↑Ethernet bridging
  3. ↑От английского root

Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку

LINUX

Setting up a Windows 10 virtual machine (VM) using KVM (Kernel-based Virtual Machine) and QEMU (Quick Emulator) can seem like a daunting task if you’re new to virtualization. However, with the right guidance and tools, you can create a powerful and efficient virtual environment. This article provides a comprehensive, step-by-step guide to help you successfully set up a KVM/QEMU Windows 10 VM on a Linux host.

Table of Contents

  1. Prerequisites

  2. Installing KVM and QEMU

  3. Configuring KVM

  4. Downloading Windows 10 ISO

  5. Creating a Windows 10 VM

  6. Installing Windows 10 on the VM

  7. Optimizing Your Windows 10 VM

  8. Common Troubleshooting Tips

  9. Conclusion

Prerequisites

Before you start, ensure you have the following:

  • A Linux host operating system (Ubuntu, CentOS, Fedora, etc.)

  • At least 4 GB of RAM (8 GB recommended) and sufficient disk space (at least 20 GB for the Windows VM)

  • Administrative access to install packages and configure settings

  • Basic knowledge of command-line operations

Installing KVM and QEMU

Step 1: Check if your CPU supports virtualization

Run the following command to check if your CPU supports virtualization:

egrep -c '(vmx|svm)' /proc/cpuinfo

A value greater than 0 indicates your CPU can support KVM.

Step 2: Install KVM and QEMU

For Ubuntu, use these commands:

sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

For CentOS, run:

sudo yum install qemu-kvm libvirt libvirt-python libguestfs-tools virt-manager

After the installation, confirm that the KVM modules are loaded:

Step 3: Add your user to the KVM group

Make sure your user account has the necessary permissions:

sudo usermod -aG kvm $USER

Log out and back in for the changes to take effect.

Configuring KVM

Enable the libvirt service to allow managing VMs seamlessly:

sudo systemctl enable --now libvirtd

Check the status of the libvirt service:

sudo systemctl status libvirtd

Downloading Windows 10 ISO

  1. Visit the official Microsoft website.

  2. Download the Windows 10 disk image (ISO file).

  3. Make sure to save the ISO in a directory accessible to your virtual machine.

Creating a Windows 10 VM

Step 1: Create a disk image for the VM

Run the following command to create a virtual disk image for your Windows 10 installation:

qemu-img create -f qcow2 ~/win10.img 50G

This command creates a 50 GB disk image named win10.img in your home directory.

Step 2: Use virt-install to create the VM

You can launch a new VM using virt-install, specifying the appropriate parameters:

virt-install \
    --name win10 \
    --ram 4096 \
    --disk path=~/win10.img,size=50 \
    --vcpus 2 \
    --os-type windows \
    --os-variant win10 \
    --network network=default \
    --graphics vnc \
    --cdrom /path/to/windows10.iso

Explanation of parameters:

  • --name: Name of the VM (Windows 10).

  • --ram: Amount of RAM assigned to the VM.

  • --disk: Path and size of the virtual disk.

  • --vcpus: Number of virtual CPUs to allocate.

  • --os-type: Operating system type.

  • --os-variant: Optimization specifics for the OS version.

  • --network: Networking mode; typically, the default network.

  • --graphics: Graphics display type (VNC in this example).

  • --cdrom: Path to the Windows 10 ISO.

Step 3: Access the VM

Once the VM has been created, access it using a VNC viewer, or use virt-manager for a graphical interface:

Select your VM and open the console to start the installation process.

Installing Windows 10 on the VM

Follow the on-screen instructions once the Windows 10 installer loads:

  1. Choose the language, time, and keyboard preferences.

  2. Select “Install Now.”

  3. Enter the product key (if required) or select “I don’t have a product key”.

  4. Choose the “Custom: Install Windows only (advanced)” option.

  5. Select the virtual disk (unallocated space) for installation.

After the installation completes, you will need to go through Windows setup (user accounts, privacy settings, etc.).

Optimizing Your Windows 10 VM

After installing Windows 10, optimizing the performance of your VM is crucial. Here are some tips:

  • Install VirtIO Drivers: For better disk and network performance, install the VirtIO drivers. Download the drivers from the Fedora Project site and load them during Windows setup.

  • Adjust Resource Allocation: Use virt-manager to fine-tune the RAM and CPU allocation based on your use-case.

  • Disable Unnecessary Services: Inside Windows, you can disable services that are not needed for your specific tasks.

Common Troubleshooting Tips

  • Boot Issues: If the VM fails to boot, double-check that the ISO is correctly attached to the VM and verify the disk settings.

  • Network Issues: Ensure that your network settings in virt-manager or when using virt-install correctly link to an active network bridge.

  • No VNC Connection: If you can’t connect via VNC, ensure that your VNC viewer is correctly configured and the firewall rules on the host allow VNC connections.

Conclusion

Setting up a KVM/QEMU Windows 10 VM can greatly enhance your productivity by allowing you to run Windows applications seamlessly on a Linux host. By following the steps outlined above, you will have a fully functional Windows 10 environment optimized for performance.

If you encounter issues during the setup or have specific questions, the virtualization community is robust and finding help online is just a search away. Happy virtualizing!

Suggested Articles

LINUX

LINUX

LINUX

LINUX

LINUX

LINUX

qemu-kvm-windows

QEMU/KVM setup with GPU passthrough for Windows on an Arch Linux host.

The script should make it comfortable and easy to launch a VM with QEMU/KVM with common and configurable parameters.

If you want to use your GPU inside the VM with PCI passthrough, it cares about driver loading/unloading with no reboot required, so if you are using the GPU on the host OS, you only have to save your work and stop the xserver and when you shutdown the VM, you can continue using the GPU on the host by restarting the xserver. If you have a secondary GPU, you can additionally start another xserver for the host OS while the VM is running.

If you take the cost of partitioning your hard disks, it has the advantage that you can use one single OS installation to natively boot into it (dual-boot) with full performance and use that installation also for the VM. For the VM, it additionally results in having much better IO performance compared with having large file system images on your host linux partition.

System

Mainboard ASRock H87 Pro4
CPU Intel(R) Core(TM) i5-4570
GPU GeForce GTX 760
OS Arch Linux

Host setup

In the BIOS settings of the mainboard, enable VT-d and set the primary GPU to Onboard.

Install QEMU and OVMF UEFI firmware files:

Add intel_iommu=on to the linux command line. If your bootloader is GRUB, edit /etc/default/grub and add it to GRUB_CMDLINE_LINUX and regenerate grub.cfg:

# grub-mkconfig -o /boot/grub/grub.cfg

Configuration

The configuration uses the high performant virtio devices, that require to install the windows guest drivers from here.

The script loads some configuration parameters from the config file.

File systems

The DRIVES parameter contains the paths of file-systems that should be available inside the VM. It can contain file-system images or physical drives, e.g.:

DRIVES="/dev/sda \
        /path/to/filesystem.img"

Input

Mouse and keyboard are passed via evdev, which allows you to easily switch between host and guest by pressing both control keys. The INPUTS parameter contains the paths of input devices, e.g.:

INPUTS="/dev/input/by-id/usb-Logitech_Gaming_Mouse_G402_6D91317A5254-event-mouse \
        /dev/input/by-id/usb-Logitech_G413_Carbon_Mechanical_Gaming_Keyboard_138736523537-event-kbd,grab_all=on,repeat=on"

File share

A SMB share is accessible from within the VM via \\10.0.2.4\qemu and allows access to the path defined in SHARE on your host OS.

VGA

QXL

The default mode uses the virtual GPU qxl on the guest. The VM is accessible via the QEMU window, can be maximized and scaled to fit the screen size and performs great for non intensive rendering tasks, as showing desktop and some UI applications.

Since it is the default, run the VM with:

$ sudo ./start-windows-vm.sh

GPU passthrough

The primary GPU is passed to the guest OS and gives native rendering performance. If the GPU is used by the host, e.g. by a running xserver, the session must be closed before using any of the following modes and can be restarted when the VM is shut down.

Secondary GPU

If you have a second GPU (including Intel Integrated Graphics), you can restart the xserver with an alternate xorg.conf.

To use Intel Integrated Graphics, it could look like this:

Section "Device"
  Identifier "intel"
  Driver "intel"
  Option "TearFree" "true"
EndSection

Section "Screen"
  Identifier "intel"
  Device "intel"
EndSection

Save the config file as /etc/X11/xorg.intel.conf and start a new xserver:

$ startx -- -config xorg.intel.conf

Then run the VM:

$ sudo VGA=passthrough ./start-windows-vm.sh
Looking-Glass

This option uses Looking-Glass, that allows to view the GPU output of the VM via a shared framebuffer with the looking-glass client inside a window on the host OS. It might be useful, if you have only a single monitor. You need to install the IVSHMEM driver, that is also part of the virtio drivers, and run the looking-glass server on the windows guest and afterwards the looking-glass-client on the host.

Run the VM:

$ sudo VGA=passthrough-lg ./start-windows-vm.sh
$ looking-glass-client -s
Single GPU passthrough

Here, the single GPU is passed to the guest VM which leaves the host OS with no display output. It requires to dump the VBIOS of your GPU and patch it according to this guide. Place it as VBIOS.rom in the directory of this script.

Run the VM:

$ sudo VGA=passthrough-single ./start-windows-vm.sh

Resources

  • https://wiki.archlinux.org/index.php/PCI_passthrough_via_OVMF

This article describes the setup of a Windows guest using QEMU.

Configuration

Host

To create a disk image for the virtual machine, run:

user $qemu-img create -f qcow2 WindowsVM.img 25G

Tip
Consider allocating more space if you are aiming for newer Windows versions as e.g. Win 10 Pro 22H2 after fresh install already occupies 20G. You may extend disk images easily by qemu-img resize later on, but as Windows rescue partition is located at the end of the disk this needs further steps.

Download a Windows driver image from this location.

Since QEMU requires a lot of options, it would be a good idea to put them into a shell script, e.g.:

FILE WindowsVM.sh

#!/bin/sh
exec qemu-system-x86_64 -enable-kvm \
        -cpu host \
        -drive file=WindowsVM.img,if=virtio \
        -net nic -net user,hostname=windowsvm \
        -m 1G \
        -monitor stdio \
        -name "Windows" \
        "$@"

Change the path to the disk image WindowsVM.img in the script. Additional options can be used when calling the script. To boot the disk image, run:

user $./WindowsVM.sh -boot d -drive file=WINDOWS.iso,media=cdrom -drive file=DRIVER.iso,media=cdrom

Install the Windows guest. See the guest section for optimum support. After the installation start the script without the additional options.

Note
When upgrading to QEMU 1.3 the -enable-kvm must be added to keep the guest responsive. Also change -net nic to -net nic,model=rtl8139 to have a network interface in the guest.

Note
When upgrading to QEMU 1.5.3, add -display sdl,frame=off,window_close=off" to keep a full screen session full screen. Without this option there may be a (new) menu bar at the top of the screen, pushing the Windows bottom menu off screen.

Note
When upgrading to QEMU 2.0.0 replace qemu-kvm with qemu-system-<CPUTYPE> (e.g. qemu-system-x86_64) (-enable-kvm switch may need to be added); the qemu-kvm wrapper has been removed — see bug #506566

Note
German (and perhaps other) localized Windows versions likely are not able to setup any virtual network card properly on QEMU >=6.0 due to a problem in Windows — see QEMU issue #774

Guest

  • During installation at the partition step Windows doesn’t detect the VirtIO hard drive. Windows will require the viostor driver from the driver image listed above.
  • After installation the VirtIO Ethernet adapter will appear without a driver. Windows will require the netkvm driver from the driver image listed above.
  • For 32-bit Windows 7 a sound driver for the Intel 82801AA AC97 exists.
  • For 64-bit Windows 7 Intel HDA is available as an option (QEMU option: -soundhw hda)
  • Windows 10 guest audio emulation is tricky for ALSA users. Pass these options to QEMU:-audiodev alsa,id=snd0,out.try-poll=off -device ich9-intel-hda -device hda-output,audiodev=snd0
    • This assumes use of the default ALSA device for playback.
    • we cannot use AC97 for Windows 10 because there is no driver for it.
    • out.try-poll=off is an odd option, but without it I got nothing but clicks and pops during playback.
    • there may be more options required for line-in and line-out (-device hda-duplex) or microphone and line-out (-device hda-micro).
    • For PulseAudio, see ArchWiki
  • USB 2.0 pass through can be configured from host to guest with variations of: -usb -device usb-ehci,id=ehci -device usb-host,bus=ehci.0,vendorid=1452
  • For Windows 8.1 USB tablet is available only with USB 2.0 pass through (QEMU option: -device usb-ehci,id=ehci -device usb-tablet,bus=ehci.0
    • The USB tablet device helps the Windows guest to accurately track mouse movements. Without it mouse movements will be jerky.
  • Another device that can be presented to the Windows guest is the random number generator. Add QEMU option: -device virtio-rng-pci . Now install the viorng driver from the driver image.
  • For Windows 10, to boot using UEFI the sys-firmware/edk2-ovmf is required on the host, then add QEMU option: -bios /usr/share/edk2-ovmf/OVMF_CODE.fd. to the qemu call. This option is essential for running Hyper-V guest images.

SPICE

QEMU with SPICE support enables (among other things) the more powerful QXL display device and makes clipboard sharing possible (copy/paste between clients and the virtual machine).

To use SPICE with QEMU enable the following USE flag in package.use:

FILE /etc/portage/package.useSetting USE variable

Build QEMU:

root #emerge app-emulation/qemu

To connect spice server, a client like net-misc/spice-gtk is required.

Guest

On Windows guests, install Windows guest tools.

On Windows 8.1 guest, to set screen resolution more than 1024×768, install drivers from https://fedoraproject.org/wiki/Windows_Virtio_Drivers#Direct_download and QXL WDDM DOD driver. If trying to install Windows guest tool, QXL WDDM DOD driver won’t work well because of Windows SPICE agent .

To try the new qlx-dod driver linked above, in order to use the driver, update’ the basic windows display adapter driver and point it to the unzipped folder for the new driver. This can be found by: Right click the Start button -> Device Manager. Expand ‘Display adapters’ and right click on the sub entry and hit update driver.

Initialization script

To run QEMU from a script (the spicy viewer requires net-misc/spice-gtk):

FILE WindowsVM.sh

#!/bin/sh
SPICE_PORT=5924
qemu-system-x86_64 -enable-kvm -daemonize \
    -cpu host \
    -drive file=WindowsVM.img,if=virtio \
    -net nic -net user,hostname=windowsvm \
    -m 1G \
    -vga qxl \
    -spice port=${SPICE_PORT},disable-ticketing=on \
    -usbdevice tablet \
    -device virtio-serial \
    -chardev spicevmc,id=vdagent,name=vdagent \
    -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \
    "$@"
exec spicy --title Windows 127.0.0.1 -p ${SPICE_PORT}

Or remote-viewer (app-emulation/virt-viewer):

FILE WindowsVM.sh

#!/bin/sh
SPICE_PORT=5924
qemu-system-x86_64 -enable-kvm -daemonize \
    -cpu host \
    -drive file=WindowsVM.img,if=virtio \
    -net nic -net user,hostname=windowsvm \
    -m 1G \
    -vga qxl \
    -spice port=${SPICE_PORT},disable-ticketing=on \
    -usbdevice tablet \
    -device virtio-serial \
    -chardev spicevmc,id=vdagent,name=vdagent \
    -device virtserialport,chardev=vdagent,name=com.redhat.spice.0 \
    "$@"
exec remote-viewer --title Windows spice://127.0.0.1:${SPICE_PORT}

В данной статье мы подробно рассмотрим как правильно настроить систему виртуализации KVM/libvirt в Fedora и установим в качестве гостевой ОС Microsoft Windows 10.

Введение

Многие пользователи для запуска виртуальных машин до сих пор предпочитают использовать VirtualBox, поэтому в данной статье мы решили рассмотреть альтернативу, имеющую ряд серьёзных преимуществ:

  • нет необходимости в установке out-of-tree модулей ядра, т.к. они уже входят в его состав;
  • корректная работа на конфигурациях с активной технологией UEFI Secure Boot;
  • более быстрая работа гипервизора за счёт отсутствия необходимости переключения между режимами ядра и пользователя.

Первым делом установим ряд необходимых пакетов:

sudo dnf install libvirt qemu-kvm virt-manager

По окончании активируем автоматическую загрузку сервиса libvirtd при помощи systemd:

sudo systemctl enable --now libvirtd.service

Внимание! Сразу после этого действия может отключиться текущее сетевое соединение из-за изменения в конфигурации адаптеров и появления новых виртуальных. Это нормальное явление. Именно по этой причине не следует пытаться установить KVM через SSH подключение.

Перезагрузим систему:

sudo systemctl reboot

Выбор режима работы KVM

KVM поддерживает работу в двух режимах:

  • системный сеанс — qemu:///system — виртуальные машины будут запускаться с повышенными правами от имени пользователя libvirt с полноценной поддержкой сети и общими для всех пулами данных;
  • пользовательский сеанс — qemu:///session — виртуальные машины будут запускаться с правами текущего пользователя с индивидуальным пулом и поддержкой сети при помощи qemu-bridge.

Более полное сравнение можно найти здесь (на английском языке).

Системный сеанс считается enterprise-ready решением, а пользовательский наиболее безопасным.

Настройка системного сеанса KVM

Настройка прав доступа

Для работы с виртуальными машинами внутри системного сеанса необходимо состоять в особой группе libvirt, поэтому добавим нашу основную учётную запись в неё:

sudo usermod -a -G libvirt $(whoami)

Создание подключения к пулу

Запустим Менеджер виртуальных машин (virt-manager) из меню используемой графической среды.

Главное окно Virt Manager

Главное окно Virt Manager

Если в списке отсутствует пункт QEMU/KVM, добавим его, вызвав диалог создания нового подключения через меню ФайлДобавить соединение.

Создание подключения

Создание подключения

В поле Гипервизор выберем пункт QEMU/KVM, затем установим флажок в чекбокс Подключаться автоматически и нажмём Подключиться. Новый пункт появится в списке как показано на скриншоте выше.

Создание каталогов для образов

По умолчанию предлагается использовать каталог /var/lib/libvirt/images для хранения дисковых образов виртуальных машин, однако место внутри корневого раздела у большинства ограничено, поэтому мы создадим новое на отдельном разделе диска.

Внимание! Для системного сеанса не следует указывать в качестве хранилища каталоги, расположенные внутри /home, т.к. SELinux настроен на полную блокировку доступа к домашним каталогам пользователей для любых системных сервисов и по этой причине гипервизор не сможет работать с ними.

В главном окне менеджера выделим пункт QEMU/KVM, затем в меню Правка выберем пункт Свойства подключения и переключимся на вкладку Пространство данных.

Стандартные настройки хранения образов

Стандартные настройки хранения образов

Создадим новый раздел диска, отформатируем его в любую поддерживающую Unix-права доступа файловую систему (рекомендуется ext4 или xfs), пропишем в /etc/fstab и смонтируем например в качестве /media/virt.

Перейдём в созданный раздел и создадим два каталога: images для дисковых образов виртуальных машин и iso для ISO образов, из которых будет производиться установка операционных систем:

sudo mkdir /media/virt/{images,iso}
sudo chown $(whoami):libvirt /media/virt/{images,iso}

В левой панели окна менеджера пространств данных нажмём кнопку Добавить пул (с символом плюс).

Добавление нового пула

Добавление нового пула

В поле Название для пула с дисковыми образами укажем images, Типкаталог в файловой системе, а Target Path — каталог на диске (в нашем случае — созданный ранее /media/virt/images). Нажмём Готово и пул появится в списке. Подтвердим сохранение изменений.

Повторим то же самое, но для ISO образов:

  • название — iso;
  • target path — /media/virt/iso.
Настроенные пулы хранения данных и образов

Настроенные пулы хранения данных и образов

Если всё сделано верно, в левой панели появятся два новых пула — images и iso. Выберем каждый и убедимся, что в чекбоксе Автозапуск при загрузке установлен флажок. Если это не так, исправим и нажмём Применить.

Пул с именем default теперь допускается удалить, хотя это и не обязательно. Для этого выберем его, нажмём кнопку Остановить пул, а затем Удалить пул и подтвердим намерение.

На этом базовая настройка завершена и можно приступать к установке гостевых операционных систем.

Настройка пользовательского сеанса KVM

Создание подключения к сеансу

Запустим Менеджер виртуальных машин (virt-manager) из меню используемой графической среды.

Главное окно Virt Manager

Главное окно Virt Manager

В главном окне менеджера виртуальных машин, нажмём правой кнопкой мыши по QEMU/KVM, затем в контекстном меню выберем вариант Отключиться и Удалить. Подтвердим удаление.

В меню Файл выберем Добавить соединение.

Создание пользовательского сеанса KVM

Создание пользовательского сеанса KVM

В поле Гипервизор выберем пункт QEMU/KVM сеанс пользователя, затем установим флажок в чекбокс Подключаться автоматически и нажмём Подключиться. Новый пункт появится в списке.

Создание каталогов для образов

По умолчанию предлагается использовать каталог ~/.local/share/libvirt/images для хранения дисковых образов виртуальных машин, однако для удобства мы создадим новые.

Это опциональное действие. Можно использовать пул default для любых целей.

В главном окне менеджера выделим пункт QEMU/KVM сеанс пользователя, затем в меню Правка выберем пункт Свойства подключения и переключимся на вкладку Пространство данных.

Настройки пула пользовательского сеанса

Настройки пула пользовательского сеанса

Создадим два каталога: images для дисковых образов виртуальных машин и iso для ISO образов, из которых будет производиться установка операционных систем:

mkdir -p ~/virt/{images,iso}

В левой панели окна менеджера пространств данных нажмём кнопку Добавить пул (с символом плюс).

Добавление пользовательского пула

Добавление пользовательского пула

В поле Название для пула с дисковыми образами укажем images, Типкаталог в файловой системе, а Target Path — каталог на диске (в нашем случае — созданный ранее ~/virt/images). Нажмём Готово и пул появится в списке. Подтвердим сохранение изменений.

Повторим то же самое, но для ISO образов:

  • название — iso;
  • target path — ~/virt/iso.
Настроенные пулы пользовательского сеанса

Настроенные пулы пользовательского сеанса

Если всё сделано верно, в левой панели появятся два новых пула — images и iso. Выберем каждый и убедимся, что в чекбоксе Автозапуск при загрузке установлен флажок. Если это не так, исправим и нажмём Применить.

Пул с именем default теперь допускается удалить, хотя это и не обязательно. Для этого выберем его, нажмём кнопку Остановить пул, а затем Удалить пул и подтвердим намерение.

Настройка сети в пользовательском сеансе

Создадим сетевой мост для виртуальных машин:

sudo nmcli con add type bridge autoconnect yes ifname virbr0 ipv4.method shared ipv4.address 192.168.122.1/24

Добавим основное проводное соединение в качестве ведущего для моста:

sudo nmcli con add type bridge-slave autoconnect yes ifname enp3s0 master virbr0

Здесь вместо enp3s0 укажем физический интерфейс проводного соединения (может быть получен из вывода nmcli device status).

Разрешим использование моста в qemu-bridge-helper:

echo allow virbr0 | sudo tee -a /etc/qemu/bridge.conf

Добавим правила для файрвола:

sudo firewall-cmd --zone libvirt --add-interface virbr0 --permanent
sudo firewall-cmd --zone libvirt --add-service dhcp --permanent
sudo firewall-cmd --zone libvirt --add-service dhcpv6 --permanent
sudo firewall-cmd --zone libvirt --add-service dns --permanent
sudo firewall-cmd --reload

На этом настройка пользовательского сеанса завершена и можно приступать к установке гостевых операционных систем.

Подготовка к установке

Для установки нам потребуются:

  1. официальный ISO образ операционной системы Windows 10, который можно скачать с официального сайта Microsoft (30-дневная пробная версия);
  2. ISO образ с набором драйверов Virtio для гостевых операционных систем;
  3. образ дискеты с драйверами Virtio для ранней стадии установки.

Скачаем указанные образы, скопируем их в каталог /media/virt/iso (системный сеанс), либо ~/virt/iso (пользовательский сеанс).

Создание гостевой ОС Windows 10

На главной панели инструментов нажмём кнопку Создать виртуальную машину или выберем одноимённый пункт из меню Файл.

В появившемся окне мастера на первом шаге выберем пункт Локальный ISO или cdrom.

Мастер создания виртуальной машины

Мастер создания виртуальной машины

На втором шаге мастера нажмём кнопку Обзор, выберем из списка загруженный ранее ISO образ и нажмём Выбор тома.

Оставляем флажок в чекбоксе Automatically detect from installation media/source, чтобы Virt Manager самостоятельно подобрал оптимальные параметры для виртуальной машины и жмём Вперёд.

Установка гостевой ОС из ISO образа

Установка гостевой ОС из ISO образа

Указываем выделяемый виртуальной машине объём оперативной памяти и количество ядер процессора.

Выбор ресурсов CPU и GPU

Выбор ресурсов CPU и GPU

Теперь создадим локальный дисковый образ для гостевой ОС.

Выбор пространства данных для VM

Выбор пространства данных для VM

Установим флажок в чекбокс Настроить пространство хранения данных, а также точку около пункта Выбрать или создать дополнительное пространство данных и нажмём кнопку Настроить.

Создание нового тома внутри пула

Создание нового тома внутри пула

В левой панели переключимся на пул images, затем нажмём кнопку Создать том.

Создание нового тома

Создание нового тома

Создадим новый том для гостевой ОС:

  • название — любое, но без пробелов и русских букв;
  • формат — qcow2;
  • максимальный размер — не менее 40 ГБ.
Выбор созданного тома хранения данных

Выбор созданного тома хранения данных

Выберем созданный том в списке и нажмём кнопку Выбор тома.

На заключительном шаге мастера будет предложено указать название для виртуальной машины (пробелы и русские буквы также не допускаются).

Финальный шаг мастера создания VM

Финальный шаг мастера создания VM

Обязательно установим флажок в Проверить конфигурацию перед установкой и нажмём Готово.

Настройка гостевой ОС Windows 10

Мы не будем подробно описывать все параметры конфигурации гостевой ОС, а лишь остановимся лишь на самых важных, от правильной установки которых зависит успех всей нашей задачи.

Переключимся на страницу SATA диск 1, выберем пункт Дополнительные параметры и изменим шину диска с SATA на VirtIO.

Тонкие настройки виртуального накопителя

Тонкие настройки виртуального накопителя

Здесь же допускается явно задать серийный номер накопителя, который будет передан гостевой ОС (если не указано, то генерируется автоматически), а также включить поддержку процедуры TRIM в случае если хранилище было создано на SSD накопителе.

Нажмём кнопку Добавить оборудование, выберем тип Хранилище.

Подключение дискеты с драйверами

Подключение дискеты с драйверами

Изменим Тип устройства на Устройство чтения дискет, затем установим точку в Выбрать или создать дополнительное пространство данных и нажмём кнопку Настроить.

Выбор файла образа дискеты с драйверами

Выбор файла образа дискеты с драйверами

В появившемся окне переключимся на пул iso, выберем образ дискеты, нажмём Выбор тома, а затем Готово.

Переключимся на страницу Видео и в поле Модель убедимся, что установлено значение QXL. Если это не так, внесём правки.

Все остальные параметры оставим по умолчанию и нажмём кнопку Начать установку.

Установка гостевой Windows 10

Запускаем стандартную установку данной ОС, выбираем редакцию, вводим или пропускаем (для получения 30 дневной пробной версии) серийный номер, принимаем лицензионное соглашение с конечным пользователем, затем Выборочная установка ибо нам требуется создать разделы на диске и установить драйвер VirtIO для ранней стадии загрузки системы.

Когда появится сообщение об ошибке о том, что не удалось загрузить драйверы, нажмём кнопку Загрузить, а затем в появишемся окне разрешим автоматический поиск при помощи нажатия OK.

Ошибка, связанная с отсутствием драйвера VirtIO

Ошибка, связанная с отсутствием драйвера VirtIO

Укажем версию драйвера Red Hat VirtIO SCSI controller для Windows 10 и нажмём Далее.

Ручная установка драйвера VirtIO

Ручная установка драйвера VirtIO

С этого момента программа установки наконец обнаружит наш виртуальный накопитель и предложит создать разделы, а затем установить на него операционную систему.

Далее весь процесс установки вполне стандартный и описывать его мы не будем.

Установка драйверов Virtio гостевой ОС

По окончании установки сразу завершаем работу виртуальной машины (ПускВыключение), нажимаем кнопку Показать виртуальное оборудование на панели инструментов, переходим на страницу SATA CDROM 1, жмём Browse и внутри пула iso выбираем ISO-образ с гостевыми драйверами Virtio.

Подключение образа гостевых драйверов

Подключение образа гостевых драйверов

Применим изменения, а затем перейдём на страницу Дисковод 1, нажмём кнопку Удалить и Применить, т.к. он более нам не требуется.

Удаление образа FDD с драйверами

Удаление образа FDD с драйверами

На панели инструментов нажмём кнопку Показать графическую консоль, а затем Включить виртуальную машину.

Откроем Проводник Windows, перейдём на виртуальный CD диск D: и запустим программу установки virtio-win-gt-x64.exe.

Запуск установки гостевых дополнений Virtio

Запуск установки гостевых дополнений Virtio

Выберем рекомендуемые Red Hat компоненты.

Выбор компонентов пакета драйверов Virtio

Выбор компонентов пакета драйверов Virtio

Разрешим установку драйверов с цифровой подписью Red Hat, нажав Установить.

Подтверждение установки драйверов Virtio

Подтверждение установки драйверов Virtio

Установка гостевых дополнений SPICE

Для того, чтобы в гостевой ОС появилась полная поддержка обмена данными с буфером обмена хостовой ОС, динамическое изменение разрешения виртуального дисплея и т.д., установим внутри гостя пакет SPICE Guest Tools по прямой ссылке.

Запустим скачанный файл и выполним установку всех предложенных по умолчанию компонентов, включая дополнительные драйверы виртуального дисплея QXL. Перезагрузим виртуальную машину для вступления изменений в силу.

Установка окончена.

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Global security group windows
  • Tmnt 2 battle nexus не запускается windows 10
  • Windows memory dump viewer
  • Не удается найти secpol msc windows 10 home
  • Скрипт для скачивания windows 10