vmdkファイルのWindowsNTをHyper-Vで動かす


はじめに

超ニッチですが、VMWare Player(vmdkファイル)上で動いていたWindowsNTをHyper-Vで動かすことをやったのでまとめておきます。
地味に色々ハマって、1,2時間かかった。。。

Hyper-Vの環境について

  • Windows 10 Enterprise
PS C:\Users\sakon> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.15063.1292
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.15063.1292
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

大まかな流れ

  1. VMDKファイルをVHDファイルに変換する
  2. Hyper-Vマネージャにて新規VMを作成する

VMDKファイルをVHDファイルに変換する

Microsoft Virtual Machine Converter 3.0のダウンロード・インストール

Microsoftのオフィシャルより、Microsoft Virtual Machine Converter 3.0をダウンロードして、インストールする。


ハマりポイント

このMicrosoft Virtual Machine Converter 3.0、PowerShell 3.0以上じゃないとエラーになるというトラップがあるらしい。

WindowsServer 2008R2とかだとPowerShell 2.0なので、Windows Management Framework 3.0をインストールして、Version 3.0にする必要がある。

technetの投稿が参考になると思う。


VMDKファイルをVHDファイルに変換する


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

PS C:\Users\sakon> ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath D:\WindowsNT\WindowsNT.vmdk -destination D:\WindowsN
T\hyper-v -VhdType DynamicHardDisk -VhdFormat Vhd

Destination                        Source
-----------                        ------
D:\WindowsNT\hyper-v\WindowsNT.vhd D:\WindowsNT\WindowsNT.vmdk

ハマりポイント

これがエグい。
Stackoverflowの投稿が役にたった。

普通に変換すると以下のようなエラーが出力される。


PS C:\Users\sakon> ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath D:\WindowsNT\WindowsNT.vmdk -destination D:\WindowsN
T\hyper-v -VhdType DynamicHardDisk -VhdFormat Vhd
ConvertTo-MvmcVirtualHardDisk : The entry 1 is not a supported disk database entry for the descriptor.
発生場所 :1 文字:1
+ ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath D:\WindowsNT\Windows ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (Microsoft.Accel...nversionService:DriveConversionService) [ConvertTo-MvmcVi
   rtualHardDisk], VmdkDescriptorParseException
    + FullyQualifiedErrorId : DiskConversion,Microsoft.Accelerators.Mvmc.Cmdlet.Commands.ConvertToMvmcVirtualHardDiskC
   ommand

ConvertTo-MvmcVirtualHardDisk : 1 つ以上のエラーが発生しました。
発生場所 :1 文字:1
+ ConvertTo-MvmcVirtualHardDisk -SourceLiteralPath D:\WindowsNT\Windows ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (Microsoft.Accel...nversionService:DriveConversionService) [ConvertTo-MvmcVi
   rtualHardDisk], AggregateException
    + FullyQualifiedErrorId : DiskConversion,Microsoft.Accelerators.Mvmc.Cmdlet.Commands.ConvertToMvmcVirtualHardDiskC
   ommand

そのため、メタデータ的なのを変更してやらないといけないらしい。
dsforkというのをダウンロードして、任意の場所に解凍する。

出力する。

PS C:\Users\sakon> .\dsfo.exe "D:\WindowsNT\WindowsNT.vmdk" 512 1024 descriptor1.txt
OK, 1024 bytes, 0.000s, MD5 = XXXXXXXXXX

出力されたdescriptor1.txtをVisualStudioCodeか何かエディタで開いてddb.toolsInstallType = "1"をコメントアウトして保存。

# Disk DescriptorFile
version=1
encoding="Shift_JIS"
CID=b1e83783
parentCID=ffffffff
createType="monolithicSparse"

# Extent description
RW 8388608 SPARSE "Windows NT.vmdk"

# The Disk Data Base 
#DDB

ddb.adapterType = "buslogic"
ddb.geometry.cylinders = "522"
ddb.geometry.heads = "255"
ddb.geometry.sectors = "63"
ddb.longContentID = "10a28426192e2eb3eeb8f5b1b1e83783"
#ddb.toolsInstallType = "1" ←これをコメントアウト
ddb.toolsVersion = "7392"

あとなんか色々〜

そして、戻す

PS C:\Users\sakon> .\dsfi.exe "D:\WindowsNT\WindowsNT.vmdk" 512 1024 descriptor1.txt
OK, written 1024 bytes at offset 512

仮想マシンの作成

取り敢えずコンソール接続するから、ネットワークはいいかな。

んで、起動する。

わーい起動したー