Подтвердить что ты не робот

Ошибка при преобразовании виртуального диска VmWare в HyperV

Я получил изображение VmWare от моего клиента для некоторых целей тестирования. Мне нужно преобразовать его в Hyper-V. Я выполнил шаги в http://www.askme4tech.com/how-convert-vmware-virtual-machine-hyper-v. Я установил Microsoft Virtual Machine Converter и начал конвертировать виртуальные диски в PowerShell. Однако я получаю eror:

C:\Windows\system32> ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk" -DestinationLiteralPath "c:\data\HyperV\PH\" -VhdType DynamicHardDisk -VhdFormat Vhdx

ConvertTo-MvmcVirtualHardDisk : The entry 1 is not a supported disk database entry for the descriptor.
At line:1 char:1
+ ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (Microsoft.Accel...nversionService:DriveConversionService) [ConvertTo-MvmcVirtualHardDisk], VmdkDescriptorParseException
    + FullyQualifiedErrorId : DiskConversion,Microsoft.Accelerators.Mvmc.Cmdlet.Commands.ConvertToMvmcVirtualHardDiskCommand

ConvertTo-MvmcVirtualHardDisk : One or more errors occurred.
At line:1 char:1
+ ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath "c:\temp\disk2.vmdk"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (Microsoft.Accel...nversionService:DriveConversionService) [ConvertTo-MvmcVirtualHardDisk], AggregateException
    + FullyQualifiedErrorId : DiskConversion,Microsoft.Accelerators.Mvmc.Cmdlet.Commands.ConvertToMvmcVirtualHardDiskCommand
4b9b3361

Ответ 1

Я нашел некоторое решение adhoc - возможно, немного взломанный, но он работает как минимум.

В поисках похожих проблем я пришел к инструменту для извлечения дескриптора диска из файла VMDK. Содержимое дескриптора для моего VMDK было примерно таким:

# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=5379bf0f
parentCID=ffffffff
isNativeSnapshot="no"
createType="monolithicSparse"

# Extent description
RW 209715200 SPARSE "00054_C8PHS1096_151216-disk2.vmdk"

# The Disk Data Base 
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.biosCylinders = "13054"
ddb.geometry.biosHeads = "255"
ddb.geometry.biosSectors = "63"
ddb.geometry.cylinders = "13054"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "64d4e008b7227bcce8aa54995379bf0f"
ddb.toolsInstallType = "1"
ddb.toolsVersion = "10241"
ddb.uuid = "60 00 C2 96 f7 70 f2 fd-b5 02 9e 46 6c df 00 2e"
ddb.virtualHWVersion = "10"

Сообщение об ошибке вместе с содержимым извлеченного дескриптора привлекло мое внимание, в частности строка:

ddb.toolsInstallType = "1"

поскольку он содержит странное значение 1 из моего сообщения об ошибке. Я отредактировал дескриптор - просто закомментируйте, что одна строка с # (хэш-метка), ввела его обратно в VMDK и вуаля - теперь выполняется преобразование.

Кредиты на эту ссылку https://communities.vmware.com/thread/343214?start=0&tstart=0 и, конечно же, инструменты Дариуша Станислава.

Просто для справки, сделанные шаги:

  • скачать и извлечь dsfok tools
  • используйте dsfo.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt для извлечения дескриптора
  • отредактируйте файл дескриптора в Notepad ++: прокомментируйте вышеупомянутую строку (поскольку я добавил дополнительный одиночный символ (#), я также удалил один символ NULL с конца, чтобы сохранить размер файла 1024 байта (не уверен если это необходимо).
  • используйте dsfi.exe "c:\temp\disk2.vmdk" 512 1024 descriptor1.txt, чтобы вставить дескриптор обратно в VMDK
  • повторите эти шаги для другого диска (моя VM имеет два файла .vmdk)
  • переиздайте команду ConvertTo-MvmcVirtualHardDisk

З

После создания VM в Hyper-V машина не загрузилась, она осталась на черном экране с быстрым мигающим курсором (так называемый черный экран смерти). Я не знаю, вызвано ли это преобразованием или тем фактом, что оригинальные диски в VMWare были SCSI, а я прикреплял их как IDE. Чтобы исправить это, я подключил DVD с изображением Windows и загрузился с DVD. Я запустил систему Rapair, запустил командную строку и запустил

bootrec.exe/fixBoot

Наконец, VM загружается и запускается. конец истории.

Ответ 2

У меня тоже возникла проблема с преобразованием образа VMWare в VHD. Мое решение похоже на eXavier, но я смог сделать это только с помощью текстового редактора.

Причина, по которой я мог бы сделать более простое исправление, заключалась в том, что vmdk, который я получил из VMWare, был небольшим текстовым файлом, который ссылался на ряд других файлов. Это выглядело так:

# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=4bd4d907
parentCID=ffffffff
isNativeSnapshot="no"
createType="twoGbMaxExtentSparse"

# Extent description
RW 8323072 SPARSE "Windows Server 2012-s001.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s002.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s003.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s004.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s005.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s006.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s007.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s008.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s009.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s010.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s011.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s012.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s013.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s014.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s015.vmdk"
RW 983040 SPARSE "Windows Server 2012-s016.vmdk"

# The Disk Data Base 
#DDB

ddb.adapterType = "lsilogic"
ddb.geometry.cylinders = "7832"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "439d288830654baf53d1f9594bd4d907"
ddb.toolsInstallType = "1"
ddb.toolsVersion = "10240"
ddb.uuid = "60 00 C2 97 21 a0 4e af-fc 21 68 15 2f 12 7f 22"
ddb.virtualHWVersion = "12"

Исправление заключалось в том, чтобы удалить строку базы данных #Disk и все ниже нее, используя текстовый редактор, чтобы мой файл выглядел так:

# Disk DescriptorFile
version=1
encoding="windows-1252"
CID=4bd4d907
parentCID=ffffffff
isNativeSnapshot="no"
createType="twoGbMaxExtentSparse"

# Extent description
RW 8323072 SPARSE "Windows Server 2012-s001.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s002.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s003.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s004.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s005.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s006.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s007.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s008.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s009.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s010.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s011.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s012.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s013.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s014.vmdk"
RW 8323072 SPARSE "Windows Server 2012-s015.vmdk"
RW 983040 SPARSE "Windows Server 2012-s016.vmdk"

Затем он преобразовывается в VHD без проблем.

Ответ 3

Я попробовал вышеуказанное решение, но в моем дескрипторе не было свойства toolsInstallType, чтобы оно не сработало (с той же ошибкой).

После некоторых исследований я нашел этот инструмент: https://cloudbase.it/qemu-img-windows/

Команда была такой:

qemu-img.exe convert c:\PATH_TO_FILE\disk.vmdk -O vhdx c:\PATH_TO_FILE\disk.vhdx

Он не показывает прогресс, но он работал и спас меня в последнюю минуту. Также мне было легче работать, поскольку это портативный инструмент. В этом конкретном случае не требуется также исправлять загрузчик, я просто привязал vhdx к новой VM, и он начал успешно.

Ответ 4

Дополнительная информация для ответов выше, если вы все еще придерживаетесь преобразования.

В моем случае метод qemu-img.exe convert ... преуспевает, но результат. Не удалось запустить изображение VHD в Hyper-V:

Virtual hard disk files must be uncompressed and unencrypted and must not be sparse.

Используйте шестнадцатеричный редактор (блок редактирования 0x100..0x200) или описанный выше способ dsfi.exe/dsfo.exe, чтобы прокомментировать эти атрибуты в файле .VMDK:

ddb.uuid.image="... Some guid here ..."
ddb.uuid.parent="00000000-0000-0000-0000-000000000000"
ddb.uuid.modification="00000000-0000-0000-0000-000000000000"
ddb.uuid.parentmodification="00000000-0000-0000-0000-000000000000"
ddb.comment=""

Просто замените ddb -> #db.

После этого преобразование MMVC преуспеть для меня без сбоев, выходное изображение работает:

Import-Module "C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1"
ConvertTo-MVMCVirtualHardDisk -SourceLiteralPath .\win10-32-disk1.vmdk -DestinationLiteralPath . -VHDFormat Vhdx -VHDType DynamicHardDisk