В Hyper-V в отличии от VMWare нет встроенной функции клонирования виртуальной машины (клонирование есть только в Virtual Machine Manager). Чтобы создать полную копию существующей ВМ придется использовать функцию импорта/экспорта. В этой статье мы рассмотрим, как клонировать виртуальную машину в Hyper-V через импорт/экспорт через графический интерфейс Hyper-V Manager, PowerShell и Windows Admin Center (WAC).
%WINDIR%\system32\sysprep\sysprep.exe /generalize /shutdown /oobe
ВМ будет выключена и при следующей загрузке как оригинальной ВМ, так и ее клона для Windows будет сгенерирован новый SID. Также нежелательно клонировать ВМ, включенные в домен Active Directory.
Экспорт/импорт ВМ из консоли Hyper-V Manager
Сначала нужно экспортировать ВМ в отдельный каталог.
Запустите консоль Hyper-V manager, выберите ВМ и в контекстном меню выберите Export.
Укажите каталог, в который нужно экспортировать виртуальную машину.
Статус экспорта ВМ будет отображен в строке состояния ВМ в консоли Hyper-V.
Чтобы импортировать ВМ щелкните в консоли Hyper-V Manager по имени хоста и выберите Import Virtual Machine.
Затем нужно указать путь к каталогу, в котором находятся папки с файлами импортируемой ВМ. При импорте ВМ в Hyper-V предлагается 3 варианта регистрации ВМ на хосте:
- Register the virtual machine in-place (use the existing unique ID) —зарегистрировать ВМ в каталоге с импортируемыми файлами, ID ВМ сохраняется;
- Restore the virtual machine (use the existing unique ID) — скопировать файлы ВМ в другой каталог, сохранить исходный идентификатор ВМ;
- Copy the virtual machine (create a new unique ID) — скопировать ВМ в другую каталог и сгенерировать новый ID.
Если вы попробуете импортировать ВМ с дублирующим ID, появится ошибка:
The operation failed because a virtual machine with the same identifier already exists. Select a new identifier and try the operation again.
Чтобы создать клон ВМ с новым ID мы выбрали 3 вариант. Мастер предложит указать в каких каталогах нужно разместить файлы ВМ. По умолчанию, используются каталоги, заданные в настройках хоста Hyper-V.
Затем укажите каталог для хранения виртуальных дисков vhdx ВМ.
После этого новая клонированная виртуальная машина появится в консоли Hyper-V.
Клонирование ВМ через экспорт/импорт в Hyper-V с помощью PowerShell
Рассмотрим, как клонировать виртуальную машину Hyper-V через импорт/экспорт из консоли PowerShell.
Для экспорта ВМ воспользуйтесь такой командой:
Export-VM -Name win10 -Path 'C:\VHD\export'
Если вы хотите экспортировать запущенную ВМ, вы можете использовать параметр CaptuteLiveState, в котором определяется как нужно копировать оперативную память ВМ. Доступны три опции
- CaptureSavedState – экспортировать оперативную память (по-умолчанию);
- CaptureDataConsistentState – экспортировать состояние ВМ из Production checkpoint;
- CaptureCrashConsistentState – не сохранять содержимое памяти.
Export-VM -Name win10 -Path 'C:\VHD\export' -CaptureLiveState CaptureCrashConsistentState
Если вы хотите экспортировать состояние ВМ в определеном снимке, нужно указать его имя.
Сначала выведите список снимков для указанной ВМ:
Get-VMSnapshot -VMName win10
Затем выполните экспорт нужного снимка по его имени:
Export-VMSnapshot -Name “win10 - (2/17/2021 - 9:52:20 PM) Standard” -VMName win10 -Path 'C:\VHD\export'
После завершения экспорта ВМ вы можете импортировать ее. Если нужно зарегистрировать ВМ по месту хранения файлов, выполните команду:
Import-VM -Path "C:\VHD\export\win10\Virtual Machines\1117A061-0B50-4BC2-850C-88CCD4C114FB.vmcx"
В параметре Path указываем расположение vmcx файла конфигурации ВМ (формат vmcx заменил XML формат конфигурационных файлов ВМ в Hyper-V Server 2016). Для копирования ВМ в другой каталог с тем же ID используйте параметр Copy. Чтобы сгенерировать нового идентификатор ВМ, используйте параметр GenerateNewId:
Import-VM -Path "C:\VHD\export\win10\Virtual Machines\1117A061-0B50-4BC2-850C-88CCD4C114FB.vmcx" -VhdDestinationPath "C:\VHD\win10_2" -VirtualMachinePath "C:\VHD\win10_2"
В параметре VhdDestinationPath указывается каталог, куда нужно скопировать VHDX файлы ВМ, а в параметре VirtualMachinePath — каталог конфигурационных файлов ВМ. Если эти параметры не задать, файлы ВМ будут скопированы в дефолтный каталог, указанный в настройках хоста Hyper-V (C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\).
SnapshotFilePath
) и файла подкачки (
SmartPagingFilePath
).Обратите внимание, что клонированная ВМ появилась в консоли Hyper-V с оригинальным именем. Переименуем новую ВМ, но сначала нужно получить ее ID:
get-vm | select VMNAME,VMId
Как вы видите в консоли есть две ВМ с одинаковым именем и разными ID. Нужно переименовать ВМ с ID, который отличается от ID импортируемой ВМ. Скопируйте ID новой ВМ и переименуйте ее:
get-vm | Where-Object {$_.VMId -eq "24ad8934-f650-46f6-9caa-2a3b79b79bd5"} | Rename-VM -NewName win10_2
Затем для удобства можно переименовать виртуальный жесткий диск.
Get-VHD -VMId 24ad8934-f650-46f6-9caa-2a3b79b79bd5| Select Path | Rename-Item -NewName win10_2.vhdx
Remove-VMHardDiskDrive -VMName win10_2 -ControllerType SCSI -ControllerLocation 0 -ControllerNumber 0
Add-VMHardDiskDrive -VMName win10_2 -ControllerType SCSI -ControllerNumber 0 -ControllerLocation 0 -Path "C:\VHD\win10_2\win10_2.vhdx"
Изменим MAC адрес виртуального адаптера (можно указать новый статический MAC или настроить динамическое получение MAC адреса).
Set-VMNetworkAdapter -VMName win10_2 -DynamicMacAddress
Start-VM -Name win10_2
Прежде, чем подключить новую ВМ в сеть, желательно переименовать ее и изменить IP адрес на новый (если используется DHCP адресация, этот шаг можно пропустить). В данном случае мы можем подключиться к новой ВМ через PowerShell Direct с помощью командлета Invoke-Command или Enter-PSSession:
Enter-PSSession -ComputerName win10_2 -Credential (Get-Credential)
Rename-Computer win10_2
Remove-NetIPAddress -InterfaceAlias “Ethernet” -AddressFamily IPV4
New-NetIPAddress -IPAddress 192.168.31.50 -InterfaceAlias “Ethernet” -AddressFamily IPv4 -PrefixLength 24
Restart-Computer
Клонирование виртуальных машин Hyper-V через Windows Admin Center
Возможно клонировать ВМ Hyper-V напрямую без промежуточного экспорта/импорта появилась в Windows Admin Center v2009.
Запустите WAC, выберите раздел Virtual Machines, выберите ВМ -> Manage -> Clone.
Затем нужно указать имя новой ВМ и каталог, в который нужно поместить ее файлы.
Обратите внимание, что мастере клонирования есть опция “I have already run sysprep on my VM”. Если вы не выполнили генерализацию образа с помощью Sysprep, и не включили эту опцию, Hyper-V создаст снапшот исходной ВМ, выполните ее Sysprep и склонирует в новую (исходная ВМ будет несколько раз перезагружена и не доступна для работы). После этого исходная ВМ будет возвращена в первоначальное состояние, а снапшот удален.
Дождитесь окончания клонирования ВМ. Новой ВМ автоматически будет присвоен новый ID.
А какие есть бесплатные способы сделать клон ВМ из ESXi в Hyper-V?
Из приличных был StarWind V2V Converter, вроде это функционал там бесплатные. можно еще тулзой disk2vhd
«зарегистрировать ВМ по хранения файлов» — что это?
Отсуствие грамотного редактора для вычитки 🙂
речь про «по месту хранения файлов»
Copy и GenerateNewId вместе. Не ошибка?
Очень интересует последний способ, спасибо за него! Я поставил Windows Admin Center, она отлично встала на Windows Server 2022, я попробовал клонировать Windows 10 (заведено 2 юзера, оба админы).
Вот какую ошибку получаю:
Подробная информация об уведомлении
Ошибка
Не удалось клонировать виртуальную машину
00:43:25
Источник
Перейти в Виртуальные машины
Тип
Ошибка
Сообщение
Не удалось клонировать виртуальную машину «Win10_1». Ошибка: «Sysprep could not be completed.2021-12-11 00:39:41, Error SYSPRP Package Microsoft.LanguageExperiencePackru-RU_19041.28.77.0_neutral__8wekyb3d8bbwe was installed for a user, but not provisioned for all users. This package will not function properly in the sysprep image.2021-12-11 00:39:41, Error SYSPRP Failed to remove apps for the current user: 0x80073cf2.2021-12-11 00:39:41, Error SYSPRP Exit code of RemoveAllApps thread was 0x3cf2.2021-12-11 00:39:41, Error SYSPRP ActionPlatform::LaunchModule: Failure occurred while executing ‘SysprepGeneralizeValidate’ from C:\Windows\System32\AppxSysprep.dll; dwRet = 0x3cf22021-12-11 00:39:41, Error SYSPRP SysprepSession::Validate: Error in validating actions from C:\Windows\System32\Sysprep\ActionFiles\Generalize.xml; dwRet = 0x3cf22021-12-11 00:39:41, Error SYSPRP RunPlatformActions:Failed while validating Sysprep session actions; dwRet = 0x3cf22021-12-11 00:39:41, Error [0x0f0070] SYSPRP RunDlls:An error occurred while running registry sysprep DLLs, halting sysprep execution. dwRet = 0x3cf22021-12-11 00:39:41, Error [0x0f00d8] SYSPRP WinMain:Hit failure while pre-validate sysprep generalize internal providers; hr = 0x80073cf2»
В образе установлен Microsoft.LanguageExperiencePackru-RU_19041.28.77.0_neutral__8wekyb3d8bbwe. На этом прилжении падает sysprep.
Нужно удалить его:
_https://docs.microsoft.com/en-us/troubleshoot/windows-client/deployment/sysprep-fails-remove-or-update-store-apps
Хотелось бы поинтересоваться, как можно победить следующую проблему. Из-за расплодившихся снапшотов, на физическом диске закончилось место и виртуалка не запустилась. Перенес один из виртуальных дисков на другой физический диск. Система запустилась, преждевременно спросив где тот самый диск. Теперь все работает, но место может закончиться.
Клонировать систему не дает, перенести не дает, и удалить снапшоты тоже не дает.
Подскажите как решить проблему? Можно ли скопировать всё на внешний диск и путем подмены букв дисков запустить виртуалку? И если можно, то как отключить службу hyper-v на время подмены букв?
Спасибо, надеюсь на ответ
Вот так не дает переместить файлы ВМ?
Move-VMStorage "VMname" -DestinationStoragePath "FullPathtothenewfolder"
Я так понимаю эту команду можно запустить при работающей машине? Или желательно отключить?
Ошибка выходит
Move-VMStorage: Не удалось выполнить операцию, так как файл не найден.
Move-VMStorage позволяет делать онлайн миграцию. другая проблема в том, что если виртуальный диск во времея миграции нагружен из гостевой ВМ, это может занять дополнительное время иил просто не хватит места для хранения изменнеия.
файл не найден — проверьте путь к файлам
Почему не видит работающую машину?
PS C:\Users\IMorozov> Export-VM -Name POSTER -Path ‘E:\Hyper-V\_EXPORT\POSTER’
Export-VM : Недопустимый параметр. Hyper-V не удалось найти виртуальную машину с именем POSTER.
строка:1 знак:1
+ Export-VM -Name POSTER -Path ‘E:\Hyper-V\_EXPORT\POSTER’
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (POSTER:String) [Export-VM], VirtualizationInvalidArgumentException
+ FullyQualifiedErrorId : InvalidParameter,Microsoft.HyperV.PowerShell.Commands.ExportVMCommand
get-vm
что возвращает?Добрый день. Тоже возникает ошибка при экспорте ВМ. В чем может быть проблема? Спасибо.
Export-VM : Не удалось скопировать файл во время экспорта.
строка:1 знак:1
+ Export-VM -Name ‘NetFlowAnalyzer’ -Path ‘E:\Mainserver\NetFlowAn …
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (Microsoft.HyperV.PowerShell.VMTask:VMTask) [Export-VM], VirtualizationOpe
rationFailedException
+ FullyQualifiedErrorId : OperationFailed,Microsoft.HyperV.PowerShell.Commands.ExportVMCommand
Из событий лог:
Не удается найти описание для идентификатора события 18110 из источника Microsoft-Windows-Hyper-V-VMMS. Вызывающий данное событие компонент не установлен на этом локальном компьютере или поврежден. Установите или восстановите компонент на локальном компьютере.
Если событие возникло на другом компьютере, возможно, потребуется сохранить отображаемые сведения вместе с событием.
К событию были добавлены следующие сведения:
%%2147942401
0x80070001
C:\Hyper-V\Virtual Hard Disks\NetFlowAnalyzer\NetFlowAnalyzer.vhd
E:\Mainserver\NetFlowAnalyzer\NetFlowAnalyzer\Virtual Hard Disks\NetFlowAnalyzer.vhd
Отсутствует специальный ресурс языкового стандарта для нужного сообщения
Добавлю, что некоторые виртуалки экспортнулись, а вот несколько не хотят… в чем проблема я не понимаю.
Попробуйте проверить vhdx диски проблемных машин на ошибки с помощью Test-VHD.
Пробовали экспортировать эту ВМ через Hyper-V GUI? Можем там юудет более понятна ошибка
Через GUI ошибка еще больше неинформативна.
А зачем в случае клонирования через консоль Hyper-V Manager сначала нужно экспортировать? Оно безо всякого предварительного экспорта замечательно импортирует если просто указать папку существующей ВМ, которую нужно клонировать.
Спасибо за ваш вариант. Всё получилось без экспорта. Просто импортировал с уже рабочей виртуалки.
Поскольку клонировал доменный компьютер, то у клонированной виртуалки удалил сетевую карту, вывел из домена, переименовал, сменил SID с помощью программы SIDCHG64 (64-bit Windows), добавил сетевую карту (как раз сменился MAC адрес) и добавил в домен.
Подскажите как отключить автобекап ВМ в Hyper-V Managere , заметили по мониторингу, что место в кластере на одном из дисков стало уменьшаться с каждым днём , нашли Виртаульную машину и обнаружили что рядом с ней стала делаться снапшот диска в формате *.AVHD . Как отключить ?
Чекпоинты у ВМ есть?
Get-VMCheckPoint -VMName myVM1
Чекпоинтов нету в том то и прикол.
Get-VMCheckPoint -VMName myVM1 — делал , вот ответ , нет понимает эту команду, не видит ВМ машину.
Get-VMCheckPoint : The term ‘Get-VMCheckPoint’ is not recognized as the name of a cmdlet, function, script file, o
rable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try
.
At line:1 char:1
+ Get-VMCheckPoint -VMName MX
+ ~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Get-VMCheckPoint:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
Причем как не зайти в Hyper-V Managere у этой ВМ постоянно статус Backing Up
Нашел решение проблемы, помогла команда vssadmin list writers
там увидел что служба Microsoft Hyper-V VSS Writer в ошибке, перезапуск служб не помог т.к служба не могла завершиться, нашёл процесс грохнул его, запустилась служба, включил ВМ и автоматом произошло слияние диска AVHD с VHD .
а export-vm (или «экспорт» в меню виртуалки) ничего не делает с дисками (не сжимает) а просто копирует их, вместе с другими данными, в указанную папку? возможно ли как-то делать сжатие (или хотя бы, может, конвертировать в динамический) при экспорте?
Делать дополнительный шаг сжатия диска после окончания экспорта ВМ:
https://winitpro.ru/index.php/2013/12/25/dinamicheskoe-izmenenie-razmerov-virtualnyx-diskov-v-windows-server-2012-r2/
Resize-VHD -Path 'C:\VM\fs01\Virtual Hard Disks\fs01.vhdx' -ToMinimumSize