Установка Windows в KVM/QEMU и настройка виртуализации

От ISO до RDP: быстрая установка Windows Server 2022 в KVM/QEMU

Подробная инструкция по работе с Windows Server. Рассказываем, как установить KVM/QEMU, создать и настроить виртуальную машину, подключить гостевой образ, а потом запустить Windows.

Представьте ситуацию: у вас есть надежный сервер на базе Ubuntu, отлично справляющийся со своими задачами. Но вдруг появляется необходимость запустить специфичное приложение или просто протестировать что-то, что работает только под управлением Windows Server. Покупать отдельный физический сервер — дорого, нерационально и порой требует множества согласований. Разворачивать полноценный Hyper-V или VMware ESXi на этой машине может быть избыточно или невозможно из-за лицензий или ресурсов.

В этом случае на помощь приходит аппаратная виртуализация с помощью QEMU/KVM — мощного, гибкого и, что немаловажно, бесплатного инструментария, встроенного в ядро Linux. В этой статье мы расскажем, как превратить сервер в платформу для запуска гостевой ОС Windows Server внутри изолированной виртуальной машины.

Дисклеймер

Эта инструкция не ставит целью развернуть полноценную инфраструктуру на базе QEMU или заменить готовые решения вроде Proxmox, libvirt или VMware. Она предназначена для временного, локального или удаленного теста.

Также подразумевается, что если у вас уже установлена Ubuntu, то по умолчанию вы имеете какое-либо понимание, как работать с каталогами, установкой пакетов из каталога приложений или через deb-пакеты.

Что мы разберем: сценарии использования и установка Windows Server в KVM/QEMU

  • Сценарии использования Windows Server в виртуализации на Linux-хосте. 
  • Подготовка Ubuntu-хоста: установку необходимых пакетов, настройку прав и проверку поддержки виртуализации.
  • Создание и настройка ВМ в QEMU/KVM: выделение ресурсов (CPU, RAM, диск), создание виртуального диска, параметры для работы Windows Server;
  • Установка Windows Server: подключение ISO-образа, настройку загрузки и сам инсталляционный процесс внутри ВМ.
  • Установка VirtIO-драйверов: ключевой этап для обеспечения высокой производительности дисков и сети в гостевой ОС.
  • Базовая постустановочная настройка и проверка работоспособности.

Такой подход дает свои преимущества: максимальную гибкость и контроль над виртуальной средой, отсутствие лицензионных затрат на гипервизор (помимо самой Windows Server), использование проверенной стабильности Linux в качестве хоста и возможность запуска требовательных Windows-серверных нагрузок на имеющемся железе.

Выбор железа для проекта

Прежде чем погружаться в установку и настройку, давайте рассмотрим «железо», на котором развернем Windows Server 2022 в QEMU. 

Я использую этот сервер под разные задачи в проектах и решил специально использовать его. Так я покажу, что без ущерба для основных задач вы можете запускать QEMU-виртуалки по соседству с другими проектами. Но вы можете использовать сервер с меньшими характеристиками. Например, арендовав его в Selectel.

Характеристики.

Характеристики железа.

  • Материнская плата. Intel S2600WFD (2-сокетная платформа).
  • Процессоры. 2× Intel Xeon Platinum 8260C @ 2.3GHz (Turbo до 3.9GHz). Сокетов: 2. Ядер на сокет: 24 (всего 48 физических ядер). Потоков: 96 (с Hyper-Threading).
  • Память. 4× модуля DDR4 Samsung 64GB (общий объём 256GB). Частота: 2933 MHz.
  • Накопители. Системный: Micron 5210 3.5TB (MITPDAK3T80DE). NVMe: Samsung PM1733 1.7TB (MZQL21T9HCJR-00A07).
  • Сеть. 2× порта Intel 10G Ethernet (X722). Пропускная способность: 10Gbit/s на порт.

Перед нами серверный комплекс на базе двухпроцессорной платформы Intel® Server Board S2600WFT с процессорами Xeon Platinum 8260C. Это серьезная аппаратная платформа корпоративного класса, созданная для ресурсоемких задач виртуализации. Два 24-ядерных процессора с поддержкой Hyper-Threading в сумме дают 96 логических потоков, работающих на базовой частоте 2.3 ГГц с возможностью разгона до 3.9 ГГц в турборежиме. Такой вычислительной мощности хватит для одновременного запуска нескольких тяжелых виртуальных машин или выделения 20-30 ядер одной ВМ без потери производительности.

Сервер оснащен 256 ГБ оперативной памяти DDR4-2933 — это четыре модуля по 64 ГБ от Samsung с низкими задержками. Объем памяти позволяет комфортно работать с памятью как хостовой системе, так и виртуальным машинам, выделяя до 128 ГБ для одной ВМ при необходимости.

В качестве системы хранения используются два диска: высокоскоростной NVMe-накопитель Samsung PM1733 объемом 1.7 ТБ и более вместительный, но менее производительный SATA SSD Micron 5210 на 3.5 ТБ.

Сетевая подсистема представлена двумя 10-гигабитными интерфейсами Intel X722, что позволяет организовать изолированные сетевые окружения для виртуальных машин с минимальными задержками. Также внимания заслуживает аппаратная поддержка виртуализации — процессоры поддерживают VT-x и VT-d.

Для хранения образов и файлов виртуальных машин используем NVME диск, а в качестве диска под операционную систему и программы — наш SSD.

В качестве хост-OS используется SelectOS:

Видим, что в качестве хост-OS используется Selectel OS.

В большинстве случаев можно установить QEMU из стандартного репозитория, однако для максимальной совместимости с новыми функциями, улучшенной поддержкой оборудования и Windows Server 2022 рекомендуется собрать QEMU из исходного кода.

Установка QEMU 

Как работает связка QEMU/KVM?

QEMU — это эмулятор и менеджер виртуальных машин (гипервизор второго типа). Он работает как обычное приложение в вашей основной ОС (Ubuntu).

KVM (Kernel-based Virtual Machine) — это модуль ядра Linux. Он предоставляет QEMU прямой доступ к аппаратным возможностям виртуализации процессора (Intel VT-x / AMD-V) и памяти.

Вместе: QEMU управляет виртуальными устройствами (диски, сеть, видео), эмулирует то, что не поддерживается аппаратно, и предоставляет пользовательский интерфейс. KVM берет на себя критически важную для производительности задачу — выполнение кода гостевой ОС (Windows Server 2022) «напрямую» на физических ядрах CPU сервера. Флаг `-enable-kvm` в командах запуска QEMU активирует использование этого механизма.

Перейдем к установке

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


      sudo apt update

      ninja-build gcc meson bzip2 flex bison libslirp-dev zlib1g-dev -y

Эти пакеты обеспечивают корректную сборку QEMU и включают поддержку сети, графики и других необходимых функций.

Загрузим исходный код QEMU с официального GitHub-репозитория и перейдем в папку:


      git clone https://github.com/qemu/qemu.git

      cd qemu

По умолчанию клонируется последняя стабильная ветка master, что нам в сейчас и нужно. 

Создаем директорию и запускаем сборку конфигурации:


      mkdir build

      cd build

      ../configure

      make -j$(nproc)

      sudo make install

После завершения установки можно проверить версию QEMU:


      qemu-system-x86_64 --version

QEMU emulator version 10.0.50 (v10.0.0-1382-g3e82ddaa8d)

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

После сборки и установки QEMU создадим отдельную директорию для хранения образов виртуальных машин. Такой подход поможет организовать структуру и упростит управление несколькими VM.

Я создам каталог на отдельном диске:


      ​​mkdir -p qemu_images

      cd qemu_images

Создадим виртуальный диск для установки Windows Server 2022 объемом 50 ГБ в формате qcow2:


      qemu-img create -f qcow2 ws2022.qcow2 50G

  • -f qcow2 — указывает формат диска (QEMU Copy-On-Write v2), поддерживающий сжатие и снапшоты;
  • ws2022.qcow2 — имя файла-диска, на который будет установлена ОС;
  • 50G — максимальный размер диска (файл будет расти по мере использования).

Совет: чтобы повысить производительность, размещайте образы виртуальных машин на самом быстром хранилище — в нашем случае это NVMe-диск Samsung PM1733.

Чтобы установить Windows Server 2022 в гостевой виртуальной машине, мы используем графический интерфейс установки через VNC. Подключение к VNC осуществляется через SSH-туннель, что удобно и безопасно при доступе к удаленному серверу.

Выполните следующую команду на клиентской машине, например, вашем ноутбуке с Windows, Linux или macOS:


      ssh -L 5900:localhost:5900 root@ip-адрес вашего сервера

Теперь запустим виртуальную машину с загрузочным ISO-файлом установщика Windows Server 2022:


      qemu-system-x86_64 \
  -drive file=ws2022.qcow2,format=qcow2 \
  -boot d \
  -cdrom ./ru-ru_windows_server_2022_x64_dvd_d8fd3d54.iso \
  -m 10240 \
  -enable-kvm \
  -smp 10 \
  -vnc :0

  • -drive file=ws2022.qcow2,format=qcow2 — путь к нашему ранее созданному виртуальному диску;
  • -boot d — загрузка с CD/DVD (ISO-файла);
  • -cdrom … — путь к ISO-образу установочного диска Windows Server;
  • -m 10240 — пул оперативной памяти равный 10 ГБ;
  • -enable-kvm — включение аппаратной виртуализации для повышения производительности;
  • -smp 10 — выделение 10 логических ядер процессора;
  • -vnc :0 — запуск VNC-сервера QEMU на дисплее :0, то есть порт 5900.

Важно: не закрывайте это окно, так как у вас запущена виртуальная машина не в фоне.

Теперь можно открыть VNC Viewer и подключиться по адресу localhost:5900.

Localhost:5900.

Вы увидите загрузку:

Шкала загрузки.

Далее, используя это окно VNC, устанавливаем Windows Server 2022 или любую другую ОС на ваш вкус. После установки остановите ранее запущенную ВМ, чтобы перейти к следующему этапу.

Установка ОС.
Настройка параметров.

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

После установки Windows Server внутри виртуальной машины рекомендуется скачать гостевой образ и установить VirtIO-драйверы от проекта virtio-win. Это необходимо для высокой производительности и корректной работы виртуального оборудования, в том числе сетевых и дисковых контроллеров. Скачайте его и положите в папку с образами. 

Перезапускаем виртуальную машину. На этот раз без ISO Windows, но с подключенным образом VirtIO:


      qemu-system-x86_64 \
  -drive file=ws2022.qcow2,format=qcow2 \
  -cdrom ./virtio-win.iso \
  -m 10240 \
  -enable-kvm \
  -smp 10 \
  -vnc :0

Теперь запускается Windows Server, внутри нее вы увидите новый CD-привод с драйверами (обычно это D:\ или E:\):

Новый CD-привод.

Далее необходимо запустить автоустановку из ISO с помощью virtio-win-gt-x64.exe. Это установит сразу все доступные драйверы и службы VirtIO.

После перезагрузки система будет использовать высокопроизводительные VirtIO-драйверы, что значительно улучшит скорость доступа к дискам и сетевым интерфейсам.

На данном этапе необходимо:

  • в Windows включить RDP-доступ;
  • настроить учетные записи с паролем (не пустым);
  • разрешить входящие подключения на порт 3389 в брандмауэре Windows.

Чистый запуск Windows

После установки Windows и VirtIO-драйверов можно перевести виртуальную машину в режим постоянной работы, без VNC и графического интерфейса. Все будет работать в фоне с доступом по RDP.

Вот команда, которой я запустил итоговую виртуальную машину:


      qemu-system-x86_64 \
  -name "Windows-Server-2022" \
  -machine type=q35,accel=kvm \
  -cpu host,hv_relaxed,hv_vapic,hv_time,hv_vendor_id=mshv \
  -smp 10,sockets=1,cores=10,threads=1 \
  -m 10240 \
  -drive file=ws2022.qcow2,format=qcow2 \
  -netdev user,id=net0,hostfwd=tcp::3389-:3389 \
  -device virtio-net-pci,netdev=net0 \
  -device virtio-gpu-pci \
  -display none \
  -daemonize

  • -name “Windows-Server-2022” — имя виртуальной машины (видно в логах и ps);
  • -machine type=q35,accel=kvm — выбирается современная чипсет-модель Q35 + ускорение через KVM;
  • -cpu host,… — передаются возможности хост-процессора + оптимизации Hyper-V:
  1. hv_relaxed, hv_vapic, hv_time — ускорение Windows-гостя;
  2. hv_vendor_id=mshv — маскирует гипервизор как Microsoft Hyper-V.
  • -smp 10,sockets=1,cores=10,threads=1 — конфигурация CPU (1 сокет, 10 ядер);
  • -m 10240 — 10 ГБ оперативной памяти;
  • -drive file=…,format=qcow2 — подключение основного диска;
  • -netdev user,…hostfwd=tcp::3389-:3389 — проброс порта 3389 для подключения по RDP (можно указать любой другой внешний порт);
  • -device virtio-net-pci,… — использование VirtIO-сетевого адаптера;
  • -device virtio-gpu-pci — базовая поддержка графики — нужна, даже если -display none;
  • -display none — отключение графического интерфейса (работа в headless-режиме);
  • -daemonize — запуск в фоне, не блокируя текущую сессию.

Теперь можно подключиться к виртуальной Windows Server напрямую по RDP и проверить работу удаленного сеанса:

Окно с параметрами — характеристики устройства.

Если вы не планируете держать виртуальную машину запущенной постоянно, можно запускать ее вручную по мере необходимости. Это особенно удобно для тестов, работы по расписанию или экономии ресурсов хоста.

После запуска виртуальной машины полезно проверить, действительно ли QEMU-процесс активен. Для этого используем команду:


      ps aux | grep -i qemu

Пример вывода:

Проверяем, что QEMU-процесс активен.

Если хотите завершить виртуальную машину, используйте kill с PID, но аккуратно, чтобы не повредить гостевую ОС. Лучше сначала попробовать завершение через Windows (внутри VM), а затем, если нужно:


      kill 365258

Если вы используете Linux с графической оболочкой, то для вашего удобства может использовать virtual machine manager (Virt-Manager). Он визуально покажет вам ваши ВМ и легок в управлении.

Virt-Manager.

Завершение

В рамках этой статьи мы пошагово:

  • подготовили сервер на базе Ubuntu — в нашем случае использовали SelectOS с ядром 6.1 и платформой Intel Xeon Platinum;
  • установили QEMU из исходников — чтобы использовать свежую и гибкую версию.
  • создали виртуальный диск и запустили установку Windows Server 2022 через VNC;
  • установили VirtIO-драйверы для улучшения производительности;
  • настроили проброс порта для подключения по RDP;
  • научились запускать виртуальную машину вручную и в фоновом режиме.

Напомню читателям: эта инструкция не ставит целью развернуть полноценную инфраструктуру на базе QEMU или заменить готовые решения вроде Proxmox, libvirt или VMware. Напротив — она предназначена для временного, локального или удаленного теста. Например, она будет полезна в рамках:

  • проверки совместимости приложения с Windows Server,
  • демонстрации или защиты проекта,
  • быстрого запуска без GUI и без сложной настройки сети и хранилищ,
  • использования имеющихся ресурсов без закупки нового оборудования.

Все настроено просто и вручную, без слоев абстракции. Именно для тех, кто хочет получить прямой контроль, посмотреть, как это работает «под капотом», или использовать временное окружение без глубокого погружения в виртуализационные стеки.