MAATRIX / Блог / Windows в KVM: virtio-драйверы и типичные грабли

Windows в KVM: virtio-драйверы и типичные грабли

MAATRIX

Ставите Windows на KVM или Proxmox, а установщик на этапе выбора диска показывает пустое место — «мы не нашли ни одного диска»? Это не баг и не битый образ, а нормальное поведение: Windows не умеет работать с virtio из коробки, в отличие от Linux. Разберём, откуда растёт эта проблема, как правильно подключить драйверы на каждом этапе и какие грабли поджидают, если сделать всё не по порядку.

Почему Windows не видит virtio-диск при установке

Linux-ядро уже больше десяти лет несёт в себе драйверы virtio-blk, virtio-scsi и virtio-net прямо в составе установочного образа — воткнули ISO, система сама опознала диск и сеть, установка идёт как обычно. Windows устроена иначе: у Microsoft нет причин включать в дистрибутив драйвер для паравиртуализированного устройства Red Hat/QEMU, поэтому ни в установщике Windows 10, ни в Windows 11, ни в Windows Server такого драйвера нет и не будет.

Если виртуальный диск в конфигурации VM подключён как virtio (или virtio-scsi) и вы просто загружаете установщик Windows с эмулируемым CD-приводом, происходит следующее: установщик долистывает до экрана выбора раздела для установки — и там пусто. Диск физически существует, гипервизор его честно предоставляет, но ОС не может к нему обратиться, потому что не знает, как разговаривать с этим контроллером. Для установщика такой диск как будто не существует вовсе.

Здесь важно не путать причину со следствием: сам факт использования virtio — это правильный путь (о разнице virtio и эмуляции по накладным расходам и I/O мы разбирали отдельно — см. где виртуализация теряет производительность). Проблема не в том, что virtio плохой, а в том, что для Windows нужен отдельный шаг — подсунуть драйвер вручную, до того как установщик доберётся до диска.

Готовим VM: два ISO одновременно

Решение — драйверы для Windows распространяются отдельным ISO-образом virtio-win (проект courtesy Red Hat/Fedora, доступен в открытом виде). Он содержит драйверы диска, сети, баллона памяти, QEMU Guest Agent и ещё десяток служебных устройств — под все поддерживаемые версии Windows сразу, разложенные по папкам.

Логика простая: подключаем виртуальной машине не один CD/DVD-привод, а два — один с установочным образом Windows, второй с virtio-win.iso. В Proxmox это делается через веб-интерфейс или консольно:

# Основной установочный ISO уже подключён как ide2 при создании VM.
# Добавляем второй виртуальный привод под virtio-win:
qm set 101 --ide3 local:iso/virtio-win-0.1.271.iso,media=cdrom

В virt-manager/virsh то же самое — второе устройство cdrom в XML-описании домена:

<disk type='file' device='cdrom'>
  <driver name='qemu' type='raw'/>
  <source file='/var/lib/libvirt/images/virtio-win.iso'/>
  <target dev='sdb' bus='sata'/>
  <readonly/>
</disk>

Важный нюанс: сам диск данных при этом должен быть настроен как virtio или virtio-scsi контроллер с самого начала — если вы создаёте VM «на будущее», нет смысла сначала ставить эмулируемый SATA/IDE-диск, а потом переключать (к этому вернёмся ниже, это отдельная и более болезненная грабля). Правильный порядок: диск сразу virtio, но рядом — второй привод с драйверами.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Загрузка драйвера на этапе установки: пошагово

Дальше всё решается в несколько кликов внутри установщика Windows:

  1. Загружаетесь с установочного ISO как обычно, доходите до экрана выбора языка и раздела для установки.
  2. На экране «Куда установить Windows?» список дисков пуст (или в нём нет вашего virtio-диска) — это ожидаемо, не пытайтесь ничего пересоздавать.
  3. Нажимаете «Загрузить драйвер» (Load driver) внизу экрана.
  4. Установщик просит указать путь — выбираете второй виртуальный привод (обычно виден как отдельная буква диска, например E: или F:).
  5. Внутри virtio-win.iso драйверы разложены по папкам вида NetKVM, viostor, vioscsi, каждая — по подпапкам версий Windows: w10, w11, 2k22, 2k25 и архитектуре amd64/x86. Для диска на virtio-blk нужна папка viostor, для virtio-scsi — vioscsi. Указываете конкретный путь, например E:\vioscsi\w11\amd64\.
  6. Установщик находит драйвер (обычно один-два варианта в списке), подтверждаете — и диск наконец появляется в списке для установки.

Частая ошибка на этом шаге — выбрать не ту папку: перепутать viostor (virtio-blk, старый последовательный контроллер) с vioscsi (virtio-scsi, более гибкий, поддерживает TRIM/discard и горячее подключение). Смотрите, какой контроллер диска вы выбрали в конфигурации VM — под него и нужен драйвер, они не взаимозаменяемы.

Если у вас несколько виртуальных дисков на разных шинах (например, системный на virtio-scsi, а дополнительный на virtio-blk) — драйвер придётся загрузить для каждого типа контроллера, иначе увидите только часть дисков.

После установки: сеть, память, гостевой агент

Установка ОС на этом не заканчивается — драйвер диска решил только одну проблему из нескольких. После первой загрузки Windows вы почти наверняка увидите в Диспетчере устройств группу «Другие устройства» с жёлтыми восклицательными знаками:

  • Ethernet Controller (не определён) — это virtio-net, без драйвера сети не будет вообще, даже RDP не подключится по внутренней сети, если вы физически не за консолью гипервизора.
  • PCI Device / Base System Device — это virtio-balloon (баллон памяти для динамического управления памятью хоста) и virtio-serial (канал для QEMU Guest Agent).
  • SCSI Controller — если у вас несколько дисков и не все драйверы подцепились автоматически на установке.

Дальше два варианта: смонтировать virtio-win.iso ещё раз (он никуда не делся, просто отключите его от установщика и подключите заново к уже установленной системе) и вручную обновить каждый драйвер через Диспетчер устройств → «Обновить драйвер» → «Поиск на этом компьютере» → указать папку NetKVM\w11\amd64. Либо — быстрее — запустить из корня ISO инсталлятор virtio-win-guest-tools.exe, который поставит разом все драйверы и сам QEMU Guest Agent (нужен для корректного завершения работы из хоста, снятия консистентных снапшотов и получения IP-адреса гостя в веб-интерфейсе Proxmox).

# Из смонтированного ISO (например, диск E:):
E:\virtio-win-guest-tools.exe /S

После установки гостевого агента не забудьте включить его и на стороне гипервизора — в Proxmox это отдельная галка в настройках VM (Options → QEMU Guest Agent → Enabled), без неё хост не будет с ним разговаривать, даже если агент установлен и работает внутри гостя.

Грабля посерьёзнее: переключение с эмуляции на virtio задним числом

Вторая типичная ошибка возникает не при установке, а позже — когда VM изначально создали с эмулируемыми устройствами «для простоты» (например, IDE-диск и e1000 сетевая карта, чтобы не возиться с драйверами на старте), Windows поставили и она нормально работает, а потом решили «оптимизировать» и переключили диск на virtio-scsi через настройки VM без каких-либо предварительных действий внутри гостя.

Результат предсказуем и неприятен: при следующей загрузке Windows видит новый контроллер диска, для которого драйвер не установлен, — точно та же проблема «невидимого диска», что и на установке, только теперь система не грузится вообще. Экран загрузки Windows обрывается синим экраном (обычно INACCESSIBLE_BOOT_DEVICE) или уходит в бесконечную попытку восстановления.

Разница с ситуацией на установке в том, что здесь нет экрана «Загрузить драйвер» — Windows уже установлена и должна была подготовить драйвер заранее, а её об этом никто не предупредил. Восстановление возможно, но болезненнее:

  1. Откатить конфигурацию VM обратно на эмулируемый контроллер диска (IDE/SATA) — Windows снова загрузится, потому что этот драйвер у неё встроен.
  2. Внутри уже загруженной системы вручную установить драйвер vioscsi/viostor через Диспетчер устройств (или через pnputil из командной строки восстановления), даже если сам virtio-диск сейчас физически не используется — драйвер должен быть в системе и в списке загрузки ДО переключения контроллера.
  3. Только после этого переключать конфигурацию VM обратно на virtio и загружаться.

Альтернативный путь — загрузиться с установочного ISO Windows в режим восстановления (Repair your computer → Command Prompt) и вручную добавить драйвер в офлайн-систему через dism /image:C:\ /Add-Driver /Driver:E:\vioscsi\w11\amd64\vioscsi.inf, если откат конфигурации по какой-то причине недоступен. Это рабочий путь, но менее предсказуемый: если разметка диска или буквы дисков в среде восстановления отличаются от ожидаемых, легко добавить драйвер не в тот образ.

Практический совет: с чего начинать VM

Самая дешёвая профилактика этой грабли — не откладывать virtio на потом. Создавайте VM для Windows сразу с virtio-диском и virtio-сетью, а проблему «пустого списка дисков» на установке решайте штатно через «Загрузить драйвер» — это буквально два клика и тридцать секунд, а не источник проблем.

Единственный сценарий, где эмуляция на старте оправдана, — это когда вы заведомо не собираетесь держать под рукой virtio-win.iso во время установки (например, устанавливаете с флешки на физическом железе, а не в VM, и виртуализация тут вообще ни при чём). Для аренды сервера с гипервизором это не ваш случай: ISO с драйверами весит около 700 МБ, скачивается один раз и остаётся в хранилище ISO-образов гипервизора для всех следующих VM.

Небольшая памятка по подключению устройств — как это обычно выглядит в Proxmox при создании VM для Windows:

УстройствоТипКомментарий
ДискVirtIO SCSI singleКонтроллер SCSI — «VirtIO SCSI single» в настройках VM
СетьVirtIO (paravirtualized)Не e1000, не rtl8139
CD 1Windows install ISOide2
CD 2virtio-win.isoide3 или sata1
Guest AgentEnabledOptions → QEMU Guest Agent

Если параллельно вы ещё выбираете между Proxmox и «голым» KVM/libvirt для такой VM — базовые шаги с virtio одинаковы что в веб-интерфейсе, что через virsh, разница только в интерфейсе управления, а не в логике драйверов (общий процесс первого запуска VM в Proxmox описан в статье Proxmox VE с нуля: первая виртуалка за 20 минут).

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Обязательно ли использовать virtio-scsi, а не virtio-blk для диска Windows?

Нет, оба варианта рабочие, но virtio-scsi гибче — поддерживает TRIM/discard (важно для тонких дисков и SSD-хранилищ) и позволяет добавлять диски на лету без перезагрузки. Для новых VM в 2026 году разумно по умолчанию брать virtio-scsi single.

Можно ли просто скачать virtio-win.iso с любого зеркала?

Официальный источник — проект virtio-win на Fedora (fedorapeople.org) либо его репозиторий на GitHub с готовыми релизами ISO. Не берите образ с сомнительных сайтов — это исполняемые драйверы уровня ядра, доверие к источнику здесь критично.

После установки всех драйверов через virtio-win-guest-tools нужно перезагружать Windows?

Да, инсталлятор сам предложит перезагрузку — драйверы уровня ядра (диск, сеть) применяются только после рестарта, использование системы «на живую» до перезагрузки может быть нестабильным.

Что делать, если в списке версий внутри virtio-win.iso нет папки под мою версию Windows (например, самую новую)?

Обычно новые версии Windows совместимы с драйверами ближайшей предыдущей ветки (папка w11 часто подходит и для более свежих сборок того же поколения) — но правильнее скачать актуальную версию virtio-win.iso, где производитель уже добавил нужную папку, чем угадывать совместимость руками.

Можно ли обойтись без QEMU Guest Agent, если диск и сеть уже на virtio и всё работает?

Технически да, система будет работать. Но без агента хост не увидит IP-адрес гостя в панели управления, корректное выключение из веб-интерфейса превратится в жёсткий сброс питания, а снапшоты будут делаться без учёта консистентности файловой системы — для рабочей нагрузки это не та экономия, ради которой стоит пропускать один установщик.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →