2016-05-27 12 views
24

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

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 
+0

, пожалуйста, посмотрите на это http://sebmatthews.net/2014/06/from-the-datacenter-converting -vmware-to-hyper-v-got-even-easy-part-1-of-2/ – piyushj

+0

@piyushjaiswal фактически шаги, описанные в блоге, такие же, как в ссылке, которую я следил. Но интересно, что в комментариях к блогу некоторые люди сообщали о подобной проблеме, как и я. Я ответил им ссылкой на мое решение (но мой комментарий ждет модерации, поэтому я полагаю, что уведомление модерации заканчивается спамом, и оно никогда не будет опубликовано :)) – eXavier

ответ

45

Я нашел некоторое решение 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 и, конечно же, инструменты от Dariusz Stanislawek.

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

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

REMARK

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

bootrec.exe/fixBoot 

Наконец, ботинки VM и бежит .. конец истории.

+0

отлично, спасибо! – Elad

+2

безупречный ответ! Однако для меня оскорбительная строка была 'ddb.uuid.image =" bb194edb-6cd9-416d-9241-bef35d41745f "', поэтому я удалил все записи 'ddb.uuid. *'. (Это был vmdk, но ранее созданный с помощью виртуального бокса, а не vmware, так что это могло быть причиной) – pHiL

+0

@pHiL Я должен был сделать то же самое. Я конвертировал виртуальные машины Oracle в Hyper-V. – johnny

8

У меня также возникла проблема с преобразованием изображения 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 без проблем.

+0

Это работает. У меня был некоторый конец 0 на последней строке (.... vmdk "0), но я оставил его, и это сработало, никаких проблем. Спасибо. –

5

Я пробовал вышеуказанное решение, но в моем дескрипторе не было свойства 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 к новой виртуальной машине, и она началась успешно.

+0

Я знаю, что это старый, но просто хотел добавить, что вы можете видеть прогресс на глядя на растущий размер файла в выходном каталоге.Если вы знаете размер входного файла, вывод будет примерно таким же. –

+0

Я использовал этот инструмент для преобразования vmdk в vhdx. Инструмент работал, но полученный vhdx не был загрузочным. Есть ли уловка, чтобы сделать ее загрузочной? – Dan

2

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

В моем методе случае 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