Converting A VMDK To VHD


Answer :

The Microsoft Virtual Machine Converter (MVMC) includes the Microsoft Virtual Disk Converter tool (MVDC.exe) that converts a VMDK file to a VHD file.



http://www.microsoft.com/en-ca/download/details.aspx?id=42497



MVDC SrcDisk  DstDisk  [/?]  [/Dyn]

SrcDisk Specifies the source VMDK disk path to be converted.
DstDisk Specifies the path for the converted disk.
[/?] Show Help
[/Dyn] Indicates the destination disk should be dynamic rather than fixed.


For example:



C:\Program Files (x86)\Microsoft Virtual Machine Converter Solution Accelerator>mvdc "D:\VM\Windows Server 2008 R2 x64\Windows Server 2008 R2 x64.vmdk" "D:\VM\Windows Server 2008 R2 x64\Windows Server 2008 R2 x64.vhd"
Step 1 of 3: Loading Source Disk...
Step 1 of 3: Loading Source Disk Completed.
Source file found of size 40.0 GB.
DiskGeometry:
Cylinders: 5221
Tracks/Cylinder: 255
Sectors/Track: 63
Bytes/Sector: 512
MediaType: FixedMedia
Step 2 of 3: Creating Destination Disk...
Step 2 of 3: Creating Destination Disk Completed.
Destination file created of size 40.0 GB.
DiskGeometry:
Cylinders: 5221
Tracks/Cylinder: 255
Sectors/Track: 63
Bytes/Sector: 512
MediaType: FixedMedia
Step 3 of 3: Copying raw data...
Step 3 of 3: Copying raw data completed.
Conversion Complete! The converted file is located at: D:\VM\Windows Server 2008 R2 x64\Windows Server 2008 R2 x64.vhd


By default it creates a fixed sized VHD, which is also what is required for Azure VMs.



After converting it to VHD, it is a good idea to boot it up locally in Hyper-V, make sure it is configured for a dynamic IP and that RDP is enabled and you are able to successfully RDP into it. Then if you want to use it as a base image, you'll also need to generalize it with sysprep. If you want to use it for a single Azure VM, don't run sysprep, but upload it as a disk instead of as an image (Csupload Add-Disk instead of Add-PersistentVMImage).



See also:
http://www.windowsazure.com/en-us/manage/windows/common-tasks/upload-a-vhd/



I use VirtualBox (actually the CLI vboxmanage, installed with VirtualBox) for this, I had no issues installing VirtualBox alongside Hyper-V, but you can't run them at the same time, thats another thread!



Anyway at an elevated (Admin mode) prompt use



cd %programfiles%\Oracle\VirtualBox

vboxmanage clonehd "C:\tmp\file.vmdk" "C:\tmp\file.vhd" -format VHD


Note, You can extract a VMDK from an OVA with 7zip!



There has been an update to the tool to convert a .vmdk to a .vhdk.



Microsoft Virtual Machine Converter 2.0 was released around April of 2014.



Here is the link to the tool: Microsoft Virtual Machine Converter 2.0



The new tool changes the way to convert from using MVDC.exe to using a powershell cmdlet.



I followed this excellent blog to figure this out. What's new on Microsoft Virtual Machine Converter 2.0



Here is a detalied summary of how to do it.



The default install location is:



C:\Program Files\Microsoft Virtual Machine Converter


Using powershell as a local admin you can then load the cmdlet:



Import-Module .\MvmcCmdlet.psd1


After the cmdlet is loaded you can call the following:



ConvertTo-MvmcVirtualHardDisk


This will ask for the .vmdk file path:



Supply values for the following parameters:



SourceLiteralPath: D:\some.vmdk


It will then start the conversion and place the .vhdk in the following path after its converted:



C:\Program Files\Microsoft Virtual Machine Converter


I hope this helps someone else.



Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android SDK Location Should Not Contain Whitespace, As This Cause Problems With NDK Tools