Содержание

Миграция виртуальных машин из Hyper-V в Proxmox

В этой публикации рассмотрим выполнение миграции виртуальных машин из Hyper-V в Proxmox (как ВМ первого поколения, так и ВМ второго поколения). Приведенная ниже последовательность действий покрывает основные типовые сценарии миграции. Поскольку дополнительных вводных при миграции может быть много, то маловероятно, что эту статью можно рассматривать как универсальную и всеобъемлющую.

В руководстве от Proxmox не так много пояснительной информации о процессе миграции с Hyper-V. Поэтому постараемся наглядно показать весь процесс.

Исходные данные

Для тестового сценария создал несколько виртуальных машин.

Виртуальная машина 1.

Виртуальная машина 2.

Немного забегая на перед скажу, что миграция виртуальных машин Linux чуть проще, т.к. драйвер для Virtio уже на есть на борту. Для виртуальных машин Windows этот драйвер нужно будет установить вручную.

В качестве исходного гипервизора Hyper-V выступал Windows Server 2022.

В качестве целевого гипервизора выступает Proxmox 7.2-7.

Предварительная подготовка

Шаги по предварительной подготовке виртуальных машин одинаковы, как для платформы Linux, так и для платформы Windows:

  1. Создание копии vhd/vhdx диска.
  2. Копирование vhd/vhdx диска на сервер Proxmox.

Создание копии vhd/vhdx диска

На самом деле здесь есть несколько вариантов. В зависимости от того, насколько возможен перерыв в работе виртуальной машины Hyper-V.

Итак, для создания копии диска есть следующие варианты:

1. Первый вариант самый оптимальный – вы просто останавливаете виртуальную машину и загружаете диски на сервер Proxmox. Этот метод обеспечит вам гарантированную целостность данных на диске. К тому же, если после этого вы не будите запуска ВМ на сервере Hyper-V, то по завершении миграции получите на Proxmox самую актуальную версию ВМ. И вам не нужно будет думать о том, как перенести дельту изменений виртуальной машины.

2. Если виртуальная машина критическая и нельзя выполнять её остановку, то вы можете выполнить экспорт виртуальной машины. В результате вы получите копию всех файлов работающей виртуальной машины Hyper-V, в т.ч. и виртуальных дисков. Недостаток этого метода в том, что выполняется экспорт всех дисков. Если какие-то из дисков нужно исключить, то это не ваш метод. Однако, именно этим методом пользовался я. Из своей практике скажу – я ни разу не получал “битых” дисков при использовании этого метода.

3. Если виртуальную машину останавливать нельзя и нужно выполнить экспорт только части дисков. (например, нужен только системный диск), то вы можете использовать утилиту Disk2vhd. На своей практике я тоже её использовал довольно часто. Лично у меня проблем с консистенцией данных не было. Но это самый относительно ненадежный метод, т.к. на высоконагруженных системах есть шанс получить не совсем консистентные данные.

Повторюсь – я использовал метод №2.

Копирование vhd/vhdx диска на сервер Proxmox

Это тоже относительно понятный шаг. Все, что вам нужно сделать – это скопировать виртуальный диск (или диски) на сервер Proxmox в локальную директорию. Инструмент для копирования можете использовать любой. Если вы выполняете копирования из среды Windows, то можете использовать WinSCP.

Если вы работаете в среде Linux, то можете использовать старую добрую утилиту scp. Формат команды для scp следующий:

scp <source_vhdx> <proxmox_user>@<proxmox_ip>:<proxmox_folder_path>

Пример:

scp tst-lin.vhdx root@10.10.10.20:/mnt/pve/HDD
scp tst-win.vhdx root@10.10.10.20:/mnt/pve/HDD

По итогу вы должны увидеть ваши vhd(x) диски в директории на сервере Proxmox:

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

После того, как вы выполнили конвертацию жестких дисков можно создавать виртуальные машины. Процесс настройки виртуальных машин после создания немного отличается. Для Linux машин особо дополнительных действий не требуется. Для машин Windows необходимо будет установить драйвер virtio. Но обо всех подробностях ниже.

Для ОС Linux

Итак, создает заготовку виртуальной машины для Linux:

1. Указываем сервер Proxmox (если у вас их несколько) и имя виртуальной машины:

2. Указываем тип операционной системы – Linux.

3. Далее необходимо указать ряд важных параметров:

Тип эмулируемого аппаратного обеспечения – я укажу i440fx.

Тип BIOS – выберу OVMF (UEFI) (т.к. исходная ВМ использовала UEFI BIOS).

Тип SCSI контроллера – VirtIO SCSI, т.к. его поддержка есть в Linux из коробки.

Также необходимо выбрать формат и хранилище для UEFI раздела.

4. На странице конфигурации виртуальных дисков я удалю вообще все диски:

5. Указываем количественные ресурсы процессора:

6. Указываем количество оперативной памяти:

7. И параметры сети:

Обратите внимание на тип сетевого адаптера – VirtIO. Аналогично контроллеру SCSI его поддержка есть в Linux из коробки.

8. На странице со сводными параметрами создаваемой виртуальной машины нажмите кнопку “Finish“.

9. Импортируем виртуальный жесткий диск:

qm importdisk 104 /mnt/pve/HDD/tst-lin.vhdx NVMe

Формат команды следующий:

qm importdisk <vmid> <source> <storage>

10. После этого в настройках виртуальной машины у на должен появиться неиспользуемый виртуальный жесткий диск:

11. Перейдем в настройки виртуального жесткого диска (кнопка “Edit“) и добавим его в используемые диски виртуальной машиной (кнопка “Add“):

12. Также убедитесь, что в настройках виртуальной машины новый диск из п. 11 используется в качестве загрузочного диска:

13. Вот теперь вы можете попробовать запустить виртуальную машину на сервере Proxmox:

По крайней мере в моем случае результат был положительный. Единственный нюанс с которым я столкнулся – это то, что сетевой интерфейс был переименован с eth0 на ens18. Соответственно, нужно было скорректировать файл с настройками сети и изменить имя адаптера на ens18:

nano /etc/netplan/00-installer-config.yaml

И изменить имя сетевого адаптера:

И применить изменения в конфигурации сети:

netplan apply

После этого виртуальная машина успешно получила IP адрес от сервера DHCP:

Для ОС Windows

В целом миграция виртуальных машин Windows выполняется аналогично миграции виртуальных машин Linux. Но есть ряд нюансов. Собственно, именно нюансам и будет посвящен этот раздел.

Я лишь очень верхнеуровнево опишу процесс миграции виртуальных машин Windows, но буду подробно останавливаться на тех шагах, где есть отличия от платформы Linux:

1. Как и для платформы Linux сначала создаем виртуальную машину без дисков. Отличия будут только на шаге выбора типа гостевой операционной системы:

Очень важный момент – выбор типа SCSI контроллера. В Windows из коробки нет драйвера для virtio. Поэтому я укажу другой тип контроллера – LSI 53C895A.

Так же на этапе выбора модели сетевого адаптера укажите Intel E1000

Причины аналогичны – в Windows из коробки нет поддержки адаптеров типа VirtIO.

2. Импортируем виртуальный жесткий диск:

qm importdisk 105 /mnt/pve/HDD/tst-win.vhdx NVMe

3. Подключаем импортированный виртуальный жесткий диск.

Не забудем в параметрах очередности загрузки выбрать подключенный диск:

4. Запускаем виртуальную машину.

5. Если запуск прошел успешно, то теперь необходимо установить драйвер VirtIO. ISO образ с драйвером для Windows можно загрузить вот по этой ссылке. Можете либо непосредственно выполнить загрузку в гостевой ОС, либо выполнить загрузку через в локальное хранилище Proxmox, а затем примонтировать ISO образ в гостевую ОС. Здесь будет использован второй метод – через загрузку в локальное хранилище Proxmox и подключение ISO в гостевую ОС.

6. Примонтирем ISO образ.

7. Установим драйвер VirtIO.

8. Меняем тип контроллера SCSI на VirIO.

И снова запускаем виртуальную машину. Проверяем, что ВМ запустилась успешно.

9. Так же можем поменять тип сетевого адаптера на VirtIO. Но нужна будет перезагрузка ВМ.

Надеюсь, что и в вашем случае миграция будет завершена успешно.

Если что-то пошло не так

Думаю, что с конвертацией виртуальных машин Linux проблем возникнуть не должно. Могут быть нюансы с Windows. В случае каких-то затруднений можно рекомендовать ознакомиться вот с этим руководством. Вероятнее всего там вы сможете найти ответы на какие-то ваши вопросы или ошибки.