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

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

## Hyper-Vの環境について
* Windows 10 Enterprise

```powershell
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](https://www.microsoft.com/en-us/download/details.aspx?id=42497)をダウンロードして、インストールする。

---

##### ハマりポイント
この`Microsoft Virtual Machine Converter 3.0`、PowerShell 3.0以上じゃないとエラーになるというトラップがあるらしい。

WindowsServer 2008R2とかだとPowerShell 2.0なので、[Windows Management Framework 3.0](https://www.microsoft.com/en-us/download/details.aspx?id=34595)をインストールして、Version 3.0にする必要がある。

[technetの投稿](https://social.technet.microsoft.com/Forums/en-US/91dd5bae-97f6-4d31-b8fe-b22affa6d0b1/microsoft-virtual-machine-converter-error-converting?forum=MVMC)が参考になると思う。

---

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

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](https://stackoverflow.com/questions/37481737/error-when-converting-vmware-virtual-disk-to-hyperv)の投稿が役にたった。

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

```powershell

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](http://members.ozemail.com.au/~nulifetv/freezip/freeware/dsfok.zip)というのをダウンロードして、任意の場所に解凍する。

出力する。

```powershell
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"

あとなんか色々〜
```

そして、戻す

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

---

### 仮想マシンの作成

<img width="705" alt="スクリーンショット 2018-10-06 19.52.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/33101/83c96292-70b6-69d8-b545-4118565b46f0.png">

<img width="704" alt="スクリーンショット 2018-10-06 19.52.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/33101/54dbc184-fa4c-008b-41d6-37d5a9d2dd20.png">

<img width="701" alt="スクリーンショット 2018-10-06 19.53.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/33101/03967541-c2dc-5bb6-c106-a079c4b4869f.png">

取り敢えずコンソール接続するから、ネットワークはいいかな。
<img width="704" alt="スクリーンショット 2018-10-06 19.53.24.png" src="https://qiita-image-store.s3.amazonaws.com/0/33101/c7fb532b-b3e3-1bcf-dcdf-492c5006f2a8.png">

<img width="702" alt="スクリーンショット 2018-10-06 19.54.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/33101/44e9c8bc-ae0f-8398-b310-bf3596a3dfb2.png">

<img width="703" alt="スクリーンショット 2018-10-06 19.57.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/33101/fd09aed4-ac98-23c9-b39d-a7fecf7c6db4.png">

んで、起動する。

![スクリーンショット 2018-10-06 19.58.09.png](https://qiita-image-store.s3.amazonaws.com/0/33101/ed1fe5c9-c119-3c9a-c7b2-eac3a574d57e.png)

**わーい起動したー**

<img width="643" alt="スクリーンショット 2018-10-06 19.58.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/33101/11982c3c-00f6-ae7c-3c89-2010440422fd.png">