AWS / PHP / Python ちょいメモ

amazon web service , PHP, Python を使ったときのメモ。日本語でググってもわからなかった事を中心に。

WinのVM環境 : Hyper-V or VirtualBox

Win上の開発環境を検討していて、VirtualBoxHyper-Vって同居できないという事に気づいたのでメモ。

環境:

最終的に僕の場合は、Hyper-Vはインストール済みだが、BCDの編集で起動時にHyperVisorをOffにする事で通常はVirtualBoxを使うという状態を選択しました。

理由は vagrant 利用する場合 Hyper-V 対応のboxがほぼなかったという点につきます。本番想定では別ですが、開発環境という視点だと vagrant で box が利用できるのは大変助かるので。



背景

Win/Mac/LinuxとOS問わずに動作してくれるので、Mac使い始めてからVirtualBoxを利用してましたが、WinだったらやっぱHyper-V?って思いたったのが始まり。

どちらも仮想化ソフトですが、大きく仕組みが異なります。

  • VirtualBox は ホスト型の仮想化技術。OS上の1アプリとしてゲストVMが動作するタイプ。
  • Hyper-V は ハイパーバイザ型の仮想化技術。ハイパーバイザ層という薄いソフトの上で、Win10(ホストOS)やゲストVMが動作するタイプ。

VirtualBoxの類似ソフトだと、vmware Player とか Microsoft Virutal PC。Hyper-Vの類似ソフトだと、vmware vSphere とかですね。

解決策

BCD (ブート構成データ, Windows Boot Managerで利用。NTLDR の boot.ini相当) で Hyper-V の ハイパーバイザ層のOn/Offが可能でした。

※そもそも、Hyper-Vをインストールしないという人には関係ない手法です

  • 管理者権限でコマンドプロンプトを立ち上げ
  • 次のコマンドを目的に応じて。 ※On/Off後、再起動が必須

# Hyper-V On (有効化)
bcdedit /set hypervisorlaunchtype auto

# Hyper-V Off (無効化)
bcdedit /set hypervisorlaunchtype off


こちらを参考にして、バッチ化するのが楽だなーと思います。

その他

なお BCD で HyperVisor を Off にしても、Hyper-Vマネージャーは利用可能です。ただ、Hyper-Vマネージャー上のVMがOnにできないという制約があるだけ。

vhdx形式の仮想ディスクをvhd形式に変換するとか、そういうことは問題なく操作できます。vhdx形式の仮想ディスクは、Win8以降じゃないと扱えないから、それだけでも価値あるかなって思いました(偶然遭遇してしまったので、活用できましたw)

ちなみに VirtualBoxの仮想ディスクをHyper-Vに変換したい時には、次をつかってやりました。

cd "c:\Program Files\Oracle\VirtualBox"
vboxmanage clonehd CentOS6.3.vdi CentOS6.3.vhd -format VHD

version.5.1.18 現在は clonemedium が正式コマンドのようです。

> VBoxManage.exe clonemedium
Usage:

VBoxManage clonemedium [disk|dvd|floppy]
[--format VDI|VMDK|VHD|RAW|]
[--variant Standard,Fixed,Split2G,Stream,ESX]
[--existing]


しっかりと理由は調べてませんが、Hyper-V (Win10) が Nested に対応してないからかな?と思ったので、WS2016以降ならできちゃうのかも。