В статье рассмотрим особенности миграции Windows машин в среду виртуализации Proxmox, включая сценарии миграции физических компьютеров (Physical-to-Virtual, P2V миграция) или виртуальных машин с других гипервизоров (Virtual-to-Virtual, V2V). Мы постарались рассмотреть большинство типовых сценариев миграции, доступные инструменты и проблемы, которые могут возникнуть при переносе настроенной Windows машины в виртуальную машину Proxmox.
Подготовка Windows хоста к миграции в Proxmox
Начнем с подготовки Windows хоста, который вы планируете перенести в Proxmox:
- Создайте полную резервную копию Windows машины для предотвращения потери данных.
- Очистка системы: проанализируйте установленные приложения и файлы на Windows машине, удалите ненужное, очистите временные файлы, кэш, логи, старые пользовательские профили, корзину и прочее
Скачайте последнюю версию ISO образ с драйверами Virt-IO и установите на Windows машине перед миграцией. Это добавит необходимые Virt-IO драйверы, нужные для загрузки системы после смены контролера диска (без них Windows не загрузится с BSOD ошибкой INACCESSIBLE_BOOT_DEVICE), инициализации сетевых адаптеров, гостевой агент QEMU Guest Agent и другие компоненты.

winget install RedHat.VirtIO
Проверьте в исходной Windows, используется ли режим загрузки UEFI и соответственно диски с GPT таблицей разделов (по умолчанию на всех современных компьютерах) или BIOS (Legacy CSM с MBR таблицей разделов на диске). ВМ именно с таким типом прошивки нужно будет создавать в Proxmox.
$env:firmware_type

Миграция виртуальных Windows на Proxmox с других гипервизоров
Миграция с VMware в Proxmox
В Proxmox 8.2 появилась встроенная возможность прямого импорта виртуальных машин с хостов VMware ESXi (vCenter).
Хост ESXi подключается как внешнее хранилище в Proxmox и вам нужно только указать ВМ, которую вы хотите перенести. Proxmox сам прочитает конфигурационный файл .vmx, создаст аналогичную ВМ и скопирует виртуальные диски.
Миграция с Hyper-V в Proxmox
Встроенных инструментов для прямого импорта ВМ из Hyper-V в Proxmox пока нет (формат экспорта виртуальных машин Hyper-V также не поддерживается в Proxmox).
Но администратор может легко смонтировать SMB хранилище с файлами виртуальных машин в Proxmox, создать новые пустые ВМ с аналогичными характеристиками и импортировать vhdx диски командой qm importdisk (ВМ на Hyper-V должна быть остановлена). По сути, этот сценарий мы и рассматриваем дальше в этой статье.
Снимаем образ диска машины Windows
Если вы хотите мигрировать в Proxmox физические Windows машины/сервера (P2V), или ВМ с других гипервизоров или от внешних облачных провайдеров (VPS, VDS), для миграции машины вам нужно будет создать образ ее дисков. В таком образе будет содержаться полная копия Windows со всеми ролями, настройками, приложениями и данными.
Для захвата образа локальных дисков хоста Windows и конвертация их в формат виртуального диска можно использовать различные утилиты:
- Disk2VHD от Microsoft – позволяет прямо в онлайн режиме (из-под работающей системы) через службу теневого копирования (Volume Shadow Copy Service, VSS) создать образ локальных логических дисков и сохранить их в формат виртуального диска VHDX.
- Clonezilla – исходный компьютер нужно загрузить с загрузочной флешки Clonezilla, сохранить образ системы на внешний диск или сетевую папку (по SMB, NFS, SFTP). После этого на Proxmox создаётся новая ВМ, выполняется загрузка с ISO образа Clonezilla и выполняется развертывание захваченного образа.
- Можно установить бесплатный Veeam Agent для Windows на физическую машину и создать ее резервную копию. Затем пустая ВМ загружается с диска восстановления Veeam Recovery Media и выполняется восстановление из бэкапа.
- VMware Converter – также бесплатная утилита которая позволяет выполнить захват образа машины по сети и конвертировать ее в формат виртуального диска VMDK (поддерживается в Proxmox).
- Starwind V2V / P2V Converter
Для захвата образа системы я воспользуюсь утилитой Disk2VHD. Скачайте утилиту и запустите прямо на Windows хост, который вы хотите мигрировать в Proxmox (если на сервере запущены продуктивные службы, нужно корректно остановить их для получения консистентной копии).
Укажите, что вы хотите использовать более современный формат VHDX, разрешите использовать службу VSS и укажите куда нужно сохранить получившийся виртуальный диск с образом (это может быть отдельный локальный диск, внешний USB накопитель или в сетевая папка). Выберите локальные диски (в том числе загрузочный раздел EFI и раздел со средой восстановления), которые нужно захватить.

После того, как захват образа закончен, полученный VHDX файл можно скопировать на хост Proxmox:
scp -r F:\VHD\s-fs01.vhdx root@192.168.158.101:/tmp/

После копирования файла виртуального диска, проверьте его целостность с помощью команды в консоли Proxmox:
# qemu-img check -r all /tmp/s-fs01.vhdx
No errors were found on the image.

Подготовка новой виртуальной машины c Windows в Proxmox
На хосте Proxmox создайте новую пустую ВМ (без диска). В качестве типа гостевой ОС обязательно укажите Windows и версию, соответствующую исходной машине.

Предоставьте ей необходимые ресурсы. Можно оставить столько же ядер CPU и RAM, как на исходной, а можно и как увеличить, так и уменьшить, в зависимости от ситуации.
Выберите тип загрузки (seaBIOS или OVMF UEFI), который использовался на физической машине.

- Удалите виртуальный диск, который предлагается создать по умолчанию

- В качестве сетевого адаптора выберите VirtIO (paravirtualizaed)
Все основные настройки и значимые параметры Windows ВМ в Proxmox мы рассматривали в одной из предыдущих статей.

Не включайте пока новую машину. Запомните ее VM ID (например, 121).
Без предварительной конвертации Proxmox поддерживает следующие основные форматы виртуальных дисков: RAW, QCOW2 и VMDK (формат VMware),RAW, VDI, но не VHD. VHD (VHDX) файл можно предварительно конвертировать в совместимый формат командой:
# qemu-img convert -O qcow2 /tmp/s-fs01.vhdx /mnt/pve/datastore2/images/121/vm-121-disk-1.qcow2
Но в актуальных версиях Proxmox утилита импорта автоматически может определить тип виртуального диска и конвертировать VHDX на лету, поэтому можно сразу импортировать диск в созданную вами виртуальную машину:
# qm importdisk 121 /tmp/s-fs01.vhdx datastore2

В настройках ВМ появится новый неиспользуемый диск (Unused Disk). Дважды щелкните по новому диску и подключите его к ВМ.
Для оптимальной производительности диски в виртуальных машинах Windows на хосте Proxmox лучше подключать через SCSI контроллер. Однако, если сразу подключить новый диск через SCSI, Windows не загрузится, т.к. просто не увидит диска (из-за того, что драйвер контроллера Red Hat Virio SCSI не настроен на автоматический запуск). Этот драйвер можно вручную загрузить из командной строки в среду WinPE, но мы воспользуемся более простым, хотя и запутанным решением.
Идея заключается в том, что мы временно подключаем мигрированный виртуальный диск Windows через SATA шину и добавляем маленький временный 1 Гб диск через SCSI контроллер.


В разделе Options -> Boot Order поставьте SATA диск в качестве первичного загрузочного устройства и запускайте ВМ

Windows должна запустится с SATA контроллера и автоматически установить драйвера для контроллера VirtIO SCSI. Откройте Device Manager и проверьте, что в списке Storage Controller появился Red Hat Virio SCSI pass-through controller. Драйвер vioscsi теперь будет настроен на автоматическую загрузку.

Теперь виртуальную машину можно выключить:
- Перейдите в раздел Hardware в настройках ВМ
- Отключите SATA диск (Detach) и переподключите его через быстрый SCSI VirtIO контроллер.

- Маленький 1 Гб диск можно удалить
- Выберите диск на SCSI контроллере в качестве первого загрузочного устройства.

Можно ли мигрировать Windows машину в Proxmox без таких сложностей с временными SATA контроллерами и SCSI дисками? Да, можно, но официально такой способ не поддерживается.
Идея в том, чтобы до миграции (и захвата образа Windows) создать в Windows фейковый SCSI контроллер VirtIO. Для этого нужно воспользоваться PowerShell скриптом load-virtio-scsi-on-boot, доступным тут https://github.com/croit/load-virtio-scsi-on-boot
Скачайте PS1 скрипт и запустите его:
powershell.exe -ExecutionPolicy Bypass -File .\Downloads\load-virtio-scsi-on-boot.ps1

Скрипт создаст фантомное устройство-контроллер (VirtIO phantom device: Red Hat VirtIO SCSI pass-through controller ROOT\VIOSCSI\0000), загрузит для него драйвер VirtIO SCSI, после чего удалит его.

Заключительный этап миграции
После того, как вы убедились, что мигрированная виртуальная машина Windows успешно запускается на Proxmox проверьте:
- Настройки сетевого интерфейса (возможны сценарии со скрытыми сетевыми адаптерами)
- Проверьте, что в диспетчере устройств определилось все виртуальное оборудование и нет неизвестных устройств
- Удалите старые утилиты и драйвера (например, Hyper-V Integration Services, VMware Tools или драйверы и утилиты физического железа: звук, графика и прочее)
- Проверьте, что в Windows запушена служба Qemu agent:
Get-Service QEMU-GA - Проверьте работу всех служб и приложений. Лицензии некоторых приложений может слететь после замены оборудования на виртуальное. Возможно, потребуется перерегистрация. Проверьте статус активации Windows.
Итак, в статье мы рассмотрели основные шаги, которые помогут вам успешно подготовиться и выполнить миграцию Windows машины в среду виртуализации Proxmox.

