最近、Windows で Docker を使ってみようと思い、Windows で Hyper-V を有効にしたわけですが、その結果、VirtualBox 上の仮想マシンが起動できなくなってしまいました。

 

 

Hyper-V と VirtualBox は共存できない

このヘッダータイトルは正確ではないですね。前提として、AMD Ryzen な環境では、という但し書きが付きます。

これが、Intel Core な環境であったら、VirtualBox と Hyper-V は共存できるらしい・・

AMD Ryzen の環境で Hyper-V を有効にした状態で VirtualBox の仮想マシンの起動に失敗した状態

AMD Ryzen の環境で Hyper-V を有効にした状態で VirtualBox の仮想マシンの起動に失敗した状態

 

もちろん、マザーボードの BIOS では CPU の仮想環境サポートは有効にしていますし、タスクマネージャーでの CPU の仮想化は有効になっています。

ところが、HWiNFO では AMD-V がグレーアウトされています。

タスクマネージャーでは仮想化は有効

タスクマネージャーでは仮想化は有効

HWiNFO では AMD-V がグレーアウト

HWiNFO では AMD-V がグレーアウト

 

VDI から VHD に変換

ここで取りうる方法は以下の3通りあります。

  1. Hyper-V を無効にして再起動し、VirtualBox を使う
    → もちろん、Docker は使用できなくなります。
  2. VirtualBox の仮想ディスク (*.vdi) を Hyper-V の仮想マシンに接続できる形式 (*.vhd/*.vhdx) に変換する
  3. 仮想環境の事は忘れて他のことを考える

最後の選択肢はないとして、今回は VirtualBox の仮想ディスクを変換することにします。

仮想ディスクを VDI から VHD に変換するためには、VBoxManage.exe コマンドを実行します。

仮に VDI ファイル名が Windows10 REF.vdi だとして、これを windows10ref.vhd に変換することを考えてみます。この場合、以下のようなコマンドになります。

"C:\Program FIles\oracle\VirtualBox\VBoxManage.exe" clonemedium disk "Windows10 REF.vdi" windows10ref.vhd -format VHD

 

変換した VHD ファイルを Hyper-V で使用する

無事に VHD ファイルに変換できたら、Hyper-V で仮想マシンに組み込んであげます。

Hyper-V マネージャー」を開いて、[操作]メニューから、[新規] » [仮想マシン] で「仮想マシンの新規作成ウィザード」を開きます。

「名前と場所」を指定してから、「世代の指定」という部分で [第2世代] を指定します。

これは、元の VDI ファイルは Windows10 をインストールしている仮想イメージで、GPT で区画を割っているからで、自ずと UEFI ベースのシステムにしないといけないからです。

Hyper-V 仮想マシンの作成: 世代の指定

Hyper-V 仮想マシンの作成: 世代の指定

 

このまま、「メモリの割当」、「ネットワークの構成」ときて、最後に「仮想ハードディスクの接続」画面で、[既存の仮想ハードディスクを使用する] で、先程変換したファイルを指定したところ、「次へ」や、「完了」ボタンがグレーアウトしたままでこのまま進めなくなります。

これは、第2世代の場合は VHDX 形式の仮想ディスクでないといけないからです。

Hyper-V 仮想マシンの作成: 第2世代では VHDX 仮想ディスクを指定しないと詰んでしまう

Hyper-V 仮想マシンの作成: 第2世代では VHDX 仮想ディスクを指定しないと詰んでしまう

 

VHD から VHDX への変換

・・おいおい、

というわけで、VBoxManager で VHDX 形式で出してみようと思ったのだけれども、オプションを見てみると、

VBoxManage clonemedium      [disk|dvd|floppy] <uuid|inputfile> <uuid|outputfile>

                            [--format VDI|VMDK|VHD|RAW|<other>]
                            [--variant Standard,Fixed,Split2G,Stream,ESX]
                            [--existing]

--format オプションの <other> って何?

と思いつつも、

"C:\Program FIles\oracle\VirtualBox\VBoxManage.exe" clonemedium disk "Windows10 REF.vdi" windows10ref.vhdx -format VHDX

とやってみたところ、

VBoxManage.exe: error: Medium 'D:\home\someuser\VirtualBox VMs\Windows10 REF\windows10ref.vhdx' is not accessible
VBoxManage.exe: error: Details: code VBOX_E_INVALID_OBJECT_STATE (0x80bb0007), component MediumWrap, interface IMedium, callee IUnknown
VBoxManage.exe: error: Context: "CloneTo(pDstMedium, ComSafeArrayAsInParam(l_variants), NULL, pProgress.asOutParam())" at line 1068 of file VBoxManageDisk.cpp

っていう具合に怒られてしまいます。

どうやら、VirtualBox からでは VHDX ファイルには変換できない??

 

Hyper-V マネージャーで VHDX に変換

というわけで、VHD から VHDX に変換するには、再び「Hyper-V マネージャー」の力を借りないといけないみたいです。

マネージャーの「操作」メニューから [ディスクの編集] をクリックし、「仮想ハードディスクの編集ウィザード」を開きます。

「ディスクの場所」で、先ほど変換した VHD ファイルを指定し、「ディスクフォーマットの選択」で [VHDX] を選択しそのまま先へ進んで [完了] で VHD から VHDX に無事返還されるはずです。

Hyper-V 仮想ハードディスクの変換: ディスクフォーマットの選択

Hyper-V 仮想ハードディスクの変換: ディスクフォーマットの選択

 

Hyper-V マネージャーで VDI から VHD/VHDX には変換できない

ここで一つ疑問がわきます。

「だったら、最初から Hyper-V マネージャーで VDI から VHDX に変換したほうが良くない?」

と。

でも、Hyper-V マネージャの仮想ハードディスク編集ウィザードでは、そもそもの変換元に、他の仮想環境、例えば VirtualBox の *.vdi だとか、VMWare の *.vmdk のようなファイル形式は選択できないようになっています。

そのために、VDI から VHDX に変換するにはこのようにして2段階の変換プロセスが必要になるみたいです。

 

まとめ

というわけで、VDI から VHDX に変換できて無事仮想マシンとしても起動させることができたんですが、ひとまず

  • VDI から VHDX に変換するには、変換作業を2回行う

必要がある、ということを学習することができました。

ところで最初の方で提示した選択肢、実はもう一つあることに気が付きました。

  • 何か適当なPCに Linux を放り込んで、その上で Docker を動かす

実は、こちらのほうが比較的スッキリと解決しそうな気がします。


 

 
カテゴリー: Windows

zaturendo

中小企業社内SE。

0件のコメント

コメントを残す

アバタープレースホルダー

メールアドレスが公開されることはありません。 が付いている欄は必須項目です