Процедура миграции виртуальных машин с ESXi на Hyper-V

В поисках оптимального решения виртуализации в условиях ограниченного бюджета  были перепробованы различные системы от VirtualBox до Hyper-V. Соответственно, не всегда конвертация машин из одной системы виртуализации в другую происходит просто. Основная сложность при такой миграции состоит в переконвертации жестких дисков, т.е. по сути конвертация VMDK в VHDX. Ниже описан собственный опыт по переезду виртуальной машинки с установленной ОС Windows 2008R2, которая жила на ферме с гипервизором ESXi на другую ферму под управлением Hyper-V.

Процедура миграции ВМ с ESXi на Hyper-V

Конвертация с использованием Microsoft Virtual Machine Converter (MVMC).

Попытка прямой конвертации с использованием Microsoft Virtual Machine Converter (MVMC) не прошла, после начала конвертации вылетела ошибка, связанная с ограничением на используемую  редакцию ESXi.

Конвертация с использованием StarWind V2V Image Converter (только сами диски)

Не прошла, ругательство не помню. Требует много места и шустрых дисков.

Конвертация с использованием 5nine EasyConverter не отражена в документации - то ли руки не дошли, то ли не сработала и не записано. А может просто был найден рабочий вариант, см. ниже.

Конвертация с использованием PowerShell  (только диск, затем создание новой машины на Hyper-V) - рабочий вариант

По инструкции с http://rmlinar.net/blog/2014/07/29/convert-single-vmdk-to-vhdx-with-microsoft-virtual-machine-converter-2-0-mvmc/

Проводится на машине с установленным Microsoft Virtual Machine Converter (MVMC).

Запуск PowerShell от администратора

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

PS C:\WINDOWS\system32> get-command -Module mvmccmdlet

Вывод должен показать нечто вроде:

PS C:\WINDOWS\system32> get-command -Module mvmccmdlet

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          ConvertTo-MvmcAzureVirtualHardDisk                 2.0        MvmcCmdlet
Cmdlet          ConvertTo-MvmcP2V                                  2.0        MvmcCmdlet
Cmdlet          ConvertTo-MvmcP2VVirtualHardDisk                   2.0        MvmcCmdlet
Cmdlet          ConvertTo-MvmcVirtualHardDisk                      2.0        MvmcCmdlet
Cmdlet          ConvertTo-MvmcVirtualHardDiskOvf                   2.0        MvmcCmdlet
Cmdlet          Disable-MvmcSourceVMTools                          2.0        MvmcCmdlet
Cmdlet          Get-MvmcHyperVHostInfo                             2.0        MvmcCmdlet
Cmdlet          Get-MvmcP2VSourceSystemInformation                 2.0        MvmcCmdlet
Cmdlet          Get-MvmcSourceVirtualMachine                       2.0        MvmcCmdlet
Cmdlet          New-MvmcHyperVHostConnection                       2.0        MvmcCmdlet
Cmdlet          New-MvmcP2VRequestParam                            2.0        MvmcCmdlet
Cmdlet          New-MvmcP2VSourceConnection                        2.0        MvmcCmdlet
Cmdlet          New-MvmcSourceConnection                           2.0        MvmcCmdlet
Cmdlet          New-MvmcSourceVirtualMachineSnapshot               2.0        MvmcCmdlet
Cmdlet          New-MvmcVirtualMachineFromOvf                      2.0        MvmcCmdlet
Cmdlet          Restore-MvmcSourceVirtualMachineSnapshot           2.0        MvmcCmdlet
Cmdlet          Stop-MvmcSourceVirtualMachine                      2.0        MvmcCmdlet
Cmdlet          Uninstall-MvmcSourceVMTools                        2.0        MvmcCmdlet

Если вывод пустой, выполняем импорт модулей:

PS C:\WINDOWS\system32> Import-Module "C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1"

И проверяем, что необходимые командлеты появились

PS C:\WINDOWS\system32> get-command -Module mvmccmdlet

Собственно конвертация дисков проводится командой, где srv-dc1-1.vmdk – файл с описанием диска, реальный контент во втором файле - srv-dc1-1-flat.vmdk :

ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "e:\VM\VMware\srv-dc1-1.vmdk” -DestinationLiteralPath “E:\VM\Hyper-V\Disks” -VhdType DynamicHardDisk -VhdFormat Vhdx

 

Еще один пример – конвертация тестовой машины с 1С (ws-test-1c):

Windows PowerShell

(C) Корпорация Майкрософт (Microsoft Corporation), 2015. Все права защищены.

PS C:\WINDOWS\system32> get-command -Module mvmccmdlet
PS C:\WINDOWS\system32> Import-Module "C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1"
PS C:\WINDOWS\system32> get-command -Module mvmccmdlet

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Cmdlet          ConvertTo-MvmcAzureVirtualHardDisk                 2.0        MvmcCmdlet
Cmdlet          ConvertTo-MvmcP2V                                  2.0        MvmcCmdlet
Cmdlet          ConvertTo-MvmcP2VVirtualHardDisk                   2.0        MvmcCmdlet
Cmdlet          ConvertTo-MvmcVirtualHardDisk                      2.0        MvmcCmdlet
Cmdlet          ConvertTo-MvmcVirtualHardDiskOvf                   2.0        MvmcCmdlet
Cmdlet          Disable-MvmcSourceVMTools                          2.0        MvmcCmdlet
Cmdlet          Get-MvmcHyperVHostInfo                             2.0        MvmcCmdlet
Cmdlet          Get-MvmcP2VSourceSystemInformation                 2.0        MvmcCmdlet
Cmdlet          Get-MvmcSourceVirtualMachine                       2.0        MvmcCmdlet
Cmdlet          New-MvmcHyperVHostConnection                       2.0        MvmcCmdlet
Cmdlet          New-MvmcP2VRequestParam                            2.0        MvmcCmdlet
Cmdlet          New-MvmcP2VSourceConnection                        2.0        MvmcCmdlet
Cmdlet          New-MvmcSourceConnection                           2.0        MvmcCmdlet
Cmdlet          New-MvmcSourceVirtualMachineSnapshot               2.0        MvmcCmdlet
Cmdlet          New-MvmcVirtualMachineFromOvf                      2.0        MvmcCmdlet
Cmdlet          Restore-MvmcSourceVirtualMachineSnapshot           2.0        MvmcCmdlet
Cmdlet          Stop-MvmcSourceVirtualMachine                      2.0        MvmcCmdlet
Cmdlet          Uninstall-MvmcSourceVMTools                        2.0        MvmcCmdlet

PS C:\WINDOWS\system32> ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "E:\VM\VMware\ws-test-1c-2016-04-04_10-14-15\ws-test-1c.vmdk" -DestinationLiteralPath “E:\VM\Hyper-V\Disks” -VhdType DynamicHardDisk -VhdFormat Vhdx

Destination                         Source
-----------                         ------
E:\VM\Hyper-V\Disks\ws-test-1c.vhdx E:\VM\VMware\ws-test-1c-2016-04-04_10-14-15\ws-test-1c.vmdk

После конвертации, которая заняла около 40 мин, (исходный диск – 60 ГБ, формат VMDK)  получаем новый диск для новой машины в Hyper-V (формат VHDX, объем 20ГБ – по реально занятому месту). Далее на Hyper-V ферме создаем новую машину, подключаем полученный диск, выставляем  правильный MAC-адрес для сетевухи (у нас доступ в Интернет по MAC-адресам) и продолжаем работать уже на другой системе виртуализации.

После запуска MS Windows Server 2008 в виртуальной среде Hyper-V в диспетчере устройств появляются неизвестные устройства VMBUS. Как утверждает Microsoft, их можно игнорировать. Если же есть желание избавиться от них, то необходимо подключить  integration Service setup disk (можно сделать через 5nine manager) , вытащить оттуда Windows6.2-HyperVIntegrationServices-x64 (cabinet file), распаковать его и указать системе найти драйвера на неизвестные устройства среди распакованных файлов (там ставятся виртуальные устройства и Automatic Virtual Machine Activation - AVMA). После установки требуется перезагрузка ВМ.

Решение с неизвестными устройствами взято отсюда: http://www.aidanfinn.com/2014/01/kb2925727-unknown-device-vmbus-in-device-manager-in-virtual-machine-for-avma/

Временные затраты:

2 часа - копирование 60ГБ диска на машину с конвертером

40 минут на преобразование диска

30 минут – копирование нового VHDX диска на Hyper-V ферму.

10 минут на создание новой машины.

20 минут (это много) на установку новых устройств и перезагрузку на Hyper-V ферме.

 

Итого примерно 4 часа, из которых основное время занимает пересылка образов дисков по сети.