Windows в KVM без дополнительных драйверов работает на эмулированном железе: диск IDE или SATA, сетевая карта Intel e1000. Это совместимо, но медленно. Каждая операция с диском и сетью проходит через эмуляцию настоящего контроллера, процессор хоста тратит на это много времени, а гость получает высокие задержки.
Решение — паравиртуальные устройства VirtIO. Гость знает, что он в виртуальной машине, и общается с гипервизором напрямую. Для Windows нужны драйверы из ISO-образа virtio-win: диск (vioscsi или viostor), сеть (NetKVM), balloon, последовательный порт для гостевого агента. Плюс несколько настроек ВМ: тип процессора, кэш диска и Hyper-V enlightenments.
Самый частый сценарий — новая ВМ с Windows 11, Windows Server 2022 или 2025 в Proxmox VE или в libvirt. Ставим систему сразу на VirtIO SCSI, загружаем драйвер диска прямо в установщике, после установки запускаем установщик гостевых инструментов. Ниже — пошагово для Proxmox VE 9 и для libvirt на Debian, Ubuntu и AlmaLinux, а также перевод уже установленной Windows с IDE/SATA на VirtIO.
Что ускоряет и за счёт чего
| Компонент | Что даёт | Драйвер или настройка |
|---|---|---|
| VirtIO SCSI | Быстрый диск, TRIM, несколько очередей, поддержка IO thread | vioscsi |
| VirtIO Block | Быстрый диск попроще (одно устройство — один контроллер) | viostor |
| VirtIO Net | Сеть на скоростях 10 Гбит/с и выше без нагрузки на эмуляцию | NetKVM |
| Balloon | Гипервизор видит реальное потребление памяти и может забирать лишнюю | Balloon + служба BalloonService |
| QEMU Guest Agent | Корректное выключение, заморозка ФС для бэкапов, IP-адреса в интерфейсе | vioserial + qemu-ga |
| Тип CPU | Доступ гостя к инструкциям процессора (AES, AVX) | host или x86-64-v2-AES/v3 |
| Hyper-V enlightenments | Меньше нагрузки на CPU в простое, быстрые таймеры и прерывания | Тип ОС Windows в Proxmox, <hyperv> в libvirt |
Для нового сервера выбирайте VirtIO SCSI с контроллером «VirtIO SCSI single». Proxmox рекомендует именно его: каждому диску свой контроллер и свой IO thread.
Где взять virtio-win
Драйверы собирает проект virtio-win (исходники — на GitHub в репозитории virtio-win/kvm-guest-drivers-windows). Стабильная сборка ISO лежит на Fedora People:
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
Ссылка всегда указывает на последнюю стабильную версию. Положите образ туда, где гипервизор держит ISO:
# Proxmox VE (хранилище local)
cd /var/lib/vz/template/iso/
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
# libvirt на Debian, Ubuntu, AlmaLinux
cd /var/lib/libvirt/images/
wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
В Proxmox то же самое можно сделать в интерфейсе: хранилище local → ISO Images → Download from URL.
Структура образа: каталог драйвера, внутри каталог версии Windows, внутри архитектура. Нужные пути:
| Устройство | Windows 11 | Windows Server 2022 | Windows Server 2025 |
|---|---|---|---|
| Диск VirtIO SCSI | vioscsi\w11\amd64 | vioscsi\2k22\amd64 | vioscsi\2k25\amd64 |
| Диск VirtIO Block | viostor\w11\amd64 | viostor\2k22\amd64 | viostor\2k25\amd64 |
| Сеть | NetKVM\w11\amd64 | NetKVM\2k22\amd64 | NetKVM\2k25\amd64 |
| Balloon | Balloon\w11\amd64 | Balloon\2k22\amd64 | Balloon\2k25\amd64 |
В корне образа лежат установщики для уже работающей системы: virtio-win-guest-tools.exe (все драйверы, гостевой агент и SPICE-агент одним пакетом), virtio-win-gt-x64.msi (только драйверы) и guest-agent\qemu-ga-x86_64.msi (только агент).
Драйверы подписаны, Windows ставит их штатно. Отключать проверку подписи (bcdedit -set TESTSIGNING ON), как делали со старыми драйверами Xen, не нужно и вредно: это ослабляет защиту ядра, а с включённым Secure Boot такой режим вообще недоступен.
Новая ВМ в Proxmox VE
Актуальная ветка — Proxmox VE 9.x на базе Debian 13. Если Proxmox ещё не стоит, начните со статьи Установка Proxmox VE на свой сервер.
Мастер создания ВМ
- OS. ISO с Windows, Type: Microsoft Windows, Version: 11/2022/2025. Отметьте «Add additional drive for VirtIO drivers» и выберите
virtio-win.iso— Proxmox подключит его вторым CD-приводом. - System. Machine: q35, BIOS: OVMF (UEFI), добавьте EFI-диск с включёнными «Pre-Enroll keys» (Secure Boot), добавьте TPM версии 2.0 — без них установщик Windows 11 откажется работать. SCSI Controller: VirtIO SCSI single. Включите «Qemu Agent».
- Disks. Bus/Device: SCSI. Cache: Default (No cache). Включите Discard, IO thread и SSD emulation, если диск на SSD или NVMe.
- CPU. Минимум 2 ядра. Type:
hostдля одиночного сервера илиx86-64-v2-AES(значение по умолчанию) для кластера с разными процессорами. - Memory. Для Windows 11 минимум 4 ГБ. Оставьте устройство Ballooning включённым.
- Network. Model: VirtIO (paravirtualized).
Тип ОС Windows важен не только для подсказок мастера. По нему Proxmox включает Hyper-V enlightenments и выставляет часы RTC в локальное время, как ожидает Windows. Если сменили тип ОС у существующей ВМ, нужна полная остановка и запуск, не перезагрузка изнутри гостя.
Те же настройки из командной строки
Для существующей ВМ с номером 101:
qm set 101 --ostype win11 --scsihw virtio-scsi-single --agent enabled=1
qm set 101 --cpu x86-64-v2-AES
qm config 101
Тип win11 подходит и для Windows Server 2022 и 2025. Параметры диска и сети меняются в той же команде, но при смене модели сетевой карты указывайте старый MAC-адрес, иначе Proxmox сгенерирует новый: --net0 virtio=BC:24:11:AA:BB:CC,bridge=vmbr0.
Установка Windows с драйвером VirtIO
Установщик Windows не знает про VirtIO и не видит диск. Это нормально.
- Дойдите до экрана выбора диска. Список пуст.
- Нажмите «Загрузить драйвер» → «Обзор», откройте CD-привод с virtio-win.
- Выберите
vioscsi\w11\amd64(для Server 2022 —2k22, для 2025 —2k25). Если диск подключён как VirtIO Block, беритеviostor. Появится «Red Hat VirtIO SCSI pass-through controller», диск станет виден. - Тем же способом загрузите
NetKVM\w11\amd64иBalloon\w11\amd64. Сетевой драйвер особенно важен для Windows 11: установка Home и Pro на этапе OOBE требует сети. - Продолжайте установку как обычно.
Драйверы, загруженные на этом шаге, попадают и в установленную систему.
После установки
Откройте CD-привод virtio-win внутри Windows и запустите virtio-win-guest-tools.exe. Он доставит оставшиеся драйверы (последовательный порт, генератор случайных чисел, ввод, видео), службу BalloonService и QEMU Guest Agent. Если SPICE не используете, его компоненты можно не ставить.
Проверьте в Диспетчере устройств, что не осталось неизвестных устройств с жёлтым значком. Должны быть видны:
- «Контроллеры запоминающих устройств» → Red Hat VirtIO SCSI pass-through controller;
- «Сетевые адаптеры» → Red Hat VirtIO Ethernet Adapter;
- «Системные устройства» → VirtIO Balloon Driver и VirtIO Serial Driver.
В «Службах» должны работать QEMU Guest Agent и Balloon Service. Проверка агента с хоста Proxmox:
qm guest cmd 101 ping
qm guest cmd 101 network-get-interfaces
Первая команда при успехе ничего не выводит и завершается без ошибки. Во вкладке Summary появятся IP-адреса ВМ.
Новая ВМ в libvirt (Debian, Ubuntu, AlmaLinux)
На хосте нужны QEMU, libvirt, virt-install, прошивка UEFI и эмулятор TPM:
# Debian 12/13, Ubuntu 24.04
apt install qemu-system-x86 libvirt-daemon-system virtinst ovmf swtpm swtpm-tools
# AlmaLinux/Rocky 9 и 10
dnf install qemu-kvm libvirt virt-install edk2-ovmf swtpm swtpm-tools
Создание ВМ с Windows 11 и диском VirtIO:
virt-install \
--name win11 \
--osinfo win11 \
--memory 8192 --vcpus 4 \
--cpu host-passthrough \
--boot uefi --tpm default \
--disk size=80,bus=virtio,cache=none,discard=unmap \
--cdrom /var/lib/libvirt/images/Win11.iso \
--disk /var/lib/libvirt/images/virtio-win.iso,device=cdrom \
--network network=default,model=virtio \
--graphics spice
Здесь диск подключён как VirtIO Block (bus=virtio), поэтому в установщике грузите viostor\w11\amd64. Для VirtIO SCSI добавьте --controller type=scsi,model=virtio-scsi и укажите у диска bus=scsi. Управлять такой ВМ удобно через virt-manager с рабочей станции: virt-manager на удалённом хосте.
Канал для гостевого агента virt-install с --osinfo win11 обычно добавляет сам. Проверить: virsh dumpxml win11 | grep -A2 guest_agent. Если его нет, добавьте --channel unix,target.type=virtio,target.name=org.qemu.guest_agent.0.
Тип процессора
Тип CPU определяет, какие инструкции видит гость. Чем ближе к реальному процессору, тем быстрее шифрование, сжатие и всё, что использует AVX.
host(в libvirthost-passthrough) — гость видит процессор хоста как есть. Максимальная скорость. Минус: живая миграция возможна только на узел с таким же процессором.x86-64-v2-AES— значение по умолчанию в Proxmox VE. Совместимо почти со всеми серверными процессорами последних десяти лет, есть AES-NI.x86-64-v3— добавляет AVX2. Подходит, если все узлы кластера поддерживают этот уровень.kvm64— старое значение по умолчанию. Не используйте его для Windows 11 24H2 и Server 2025: им нужны SSE4.2 и POPCNT, которых вkvm64нет, и система может не загрузиться.
Если в Windows включена виртуализация на основе безопасности (VBS, «Целостность памяти») и ВМ видит расширения виртуализации, гостю приходится работать поверх собственного гипервизора. Это заметно замедляет ВМ. Если вложенная виртуализация (WSL2, Hyper-V внутри гостя) не нужна, это стоит учитывать при выборе host.
Кэш диска
| Режим | Как работает | Когда использовать |
|---|---|---|
none | Кэш хоста не используется, запись идёт напрямую на устройство; сбросы гостя честно доходят до диска | По умолчанию. Безопасно, хорошо на SSD, LVM, ZFS, Ceph |
writeback | Запись через кэш страниц хоста, сбросы гостя передаются на диск | Быстрее на медленных дисках; при сбое хоста теряются данные, которые гость ещё не сбросил |
writethrough | Чтение из кэша, каждая запись синхронная | Безопасно, но запись медленная |
directsync | Без кэша и с синхронной записью | Максимальная надёжность, минимальная скорость |
unsafe | Сбросы гостя игнорируются | Только для временных ВМ, которые не жалко. Никогда в продакшене |
Proxmox в руководствах по Windows допускает writeback ради скорости, но по умолчанию оставляет none. Без ИБП и при важных данных выбирайте none. Формат образа (raw или qcow2) и его конвертация разобраны в статье Образы дисков виртуальных машин.
Включённый Discard вместе с SSD emulation позволяет Windows отправлять TRIM. Тонкие тома (LVM-thin, ZFS, qcow2) тогда освобождают место после удаления файлов. Проверить можно в «Оптимизации дисков»: тип носителя должен быть «Твердотельный накопитель».
Hyper-V enlightenments
Windows умеет работать под Hyper-V и использовать его паравиртуальные интерфейсы: часы, таймеры, уведомления о спин-блокировках, быстрые межпроцессорные прерывания. KVM умеет эмулировать эти интерфейсы. Без них Windows грузит процессор хоста даже в простое и хуже переносит нагрузку на много ядер.
Proxmox VE включает их сам, если тип ОС — Windows. Ничего дописывать не нужно.
libvirt: virt-install и virt-manager при выборе Windows тоже добавляют базовый набор. Проверьте XML (virsh edit win11) и при необходимости дополните:
<features>
<acpi/>
<apic/>
<hyperv mode='custom'>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vpindex state='on'/>
<runtime state='on'/>
<synic state='on'/>
<stimer state='on'/>
<frequencies state='on'/>
<tlbflush state='on'/>
<ipi state='on'/>
</hyperv>
</features>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
<timer name='hypervclock' present='yes'/>
</clock>
Изменения применяются после полной остановки ВМ (virsh shutdown, затем virsh start). Таймер hypervclock заодно решает многие проблемы с уходом времени, подробнее — в статье Синхронизация времени в виртуальных машинах.
Перевод установленной Windows с IDE/SATA на VirtIO
Если просто переключить шину загрузочного диска на VirtIO, Windows упадёт с синим экраном INACCESSIBLE_BOOT_DEVICE: драйвер диска не установлен или не помечен как загрузочный. Надёжный порядок для Proxmox:
- В работающей Windows запустите
virtio-win-guest-tools.exeс образа virtio-win. - Выключите ВМ. Добавьте временный маленький диск на VirtIO SCSI:
qm set 101 --scsihw virtio-scsi-single --scsi1 local-lvm:1 - Включите ВМ, дождитесь, пока Windows увидит новый диск в «Управлении дисками». Драйвер vioscsi теперь используется системой. Выключите ВМ.
- Отключите системный диск от IDE/SATA и подключите на SCSI:
qm set 101 --delete ide0
qm config 101 | grep unused
qm set 101 --scsi0 local-lvm:vm-101-disk-0,discard=on,iothread=1,ssd=1
qm set 101 --boot order=scsi0
qm set 101 --delete scsi1
Имя тома берите из выводаqm config(строкаunused0). Временный диск после отключения тоже станетunused, удалите его в интерфейсе. - Запустите ВМ. Если загрузилась — смените сетевую карту на VirtIO с сохранением MAC-адреса.
Перед этим сделайте резервную копию или снимок. Если система не загрузилась, верните диск на прежнюю шину — данные не пострадали.
Симптом, причина, решение
| Симптом | Причина | Решение |
|---|---|---|
| Установщик не видит диск | Нет драйвера VirtIO в WinPE | «Загрузить драйвер» → vioscsi\w11\amd64 или viostor |
| «Этот компьютер не соответствует требованиям Windows 11» | Нет UEFI, Secure Boot или TPM 2.0 | OVMF, EFI-диск с ключами, TPM 2.0 (в libvirt — пакет swtpm) |
| Windows 11 24H2 / Server 2025 не загружается | Тип CPU kvm64 без SSE4.2/POPCNT | x86-64-v2-AES или host |
BSOD INACCESSIBLE_BOOT_DEVICE после смены шины | Драйвер диска не загружается при старте | Трюк с временным VirtIO-диском, см. выше |
| Нет сети на этапе OOBE | Не загружен NetKVM | Загрузить NetKVM\w11\amd64 в установщике |
| Proxmox показывает занятой всю память ВМ | Нет драйвера Balloon или службы BalloonService | Установить guest tools, проверить службу |
| ВМ не выключается из интерфейса, бэкап без заморозки ФС | Не работает гостевой агент | Включить Qemu Agent в ВМ, проверить службу и qm guest cmd ping |
| Высокая нагрузка на CPU хоста в простое | Нет Hyper-V enlightenments | Тип ОС Windows в Proxmox, блок <hyperv> в libvirt |
Исторически: драйверы для Xen
Раньше Windows Server 2008 в Xen ускоряли драйверами GPLPV. Они не были подписаны Microsoft, поэтому в госте включали тестовый режим подписи (bcdedit -set TESTSIGNING ON), а в конфиге ВМ прописывали type=paravirtualized для сетевого интерфейса и timer_mode = 1. Сейчас так делать не нужно. Для KVM и Proxmox есть подписанные драйверы virtio-win. Для XCP-ng есть собственные подписанные гостевые инструменты Windows PV Tools, их ставят штатно.
Частые вопросы
Что выбрать: VirtIO SCSI или VirtIO Block?
Для большинства случаев — VirtIO SCSI с контроллером «VirtIO SCSI single». Он поддерживает TRIM, много дисков и IO thread на каждый диск, его рекомендует Proxmox. VirtIO Block чуть проще и в отдельных тестах быстрее, но выигрыш обычно незаметен. Главное — не оставлять IDE или SATA.
Нужно ли обновлять драйверы virtio-win?
Да, время от времени. Новые версии исправляют ошибки и добавляют поддержку свежих Windows. Скачайте новый ISO, подключите к ВМ и запустите virtio-win-guest-tools.exe — он обновит установленные драйверы. Перед обновлением сделайте снимок.
Можно ли включить ballooning для Windows-сервера с базой данных?
Лучше не надо. SQL Server и Exchange сами управляют памятью и плохо реагируют на её изъятие. Задайте одинаковые минимум и максимум памяти: устройство balloon останется, Proxmox будет показывать реальное потребление, но забирать память не станет.
Тип CPU host или x86-64-v2-AES?
На одиночном сервере — host, это самый быстрый вариант. В кластере с разными процессорами — общий для всех узлов уровень, обычно x86-64-v2-AES или x86-64-v3, иначе живая миграция не сработает. Для WSL2 и Hyper-V внутри гостя нужен host и включённая вложенная виртуализация на хосте.
Подходят ли эти драйверы для Windows 7, 2008 R2 и 2012?
Свежие выпуски virtio-win эти системы больше не поддерживают. Для них нужны старые выпуски ISO из архива проекта на Fedora People. Сами системы давно без обновлений безопасности, такие ВМ лучше не выпускать в интернет и планировать переход.
Нужен ли QEMU Guest Agent, если и так всё работает?
Да. Без агента Proxmox не может корректно выключить ВМ (только через ACPI, на который Windows реагирует не всегда), не замораживает файловую систему через VSS при резервном копировании и не показывает IP-адреса. Агент ставится одним MSI-пакетом и почти не потребляет ресурсов.