猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

WindowsでVagrantを起動しようとすると Raw-mode is unavailable courtesy of Hyper-V と言われる

f:id:yoshiki_utakata:20181004212834j:plain

Windowsでvagrant upするとRaw-mode is unavailable courtesy of Hyper-V と言われる

m>vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
(略)
==> default: Booting VM...
There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "298775b5-79b1-4e89-8be8-1c957feb9860", "--type", "headless"]

Stderr: VBoxManage.exe: error: Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

追記: こういうエラーの場合もあります

There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "182b76cd-f605-4303-9d53-df87ef87f33a", "--type", "headless"]

Stderr: VBoxManage.exe: error: Call to WHvSetupPartition failed: ERROR_SUCCESS (Last=0xc000000d/87) (VERR_NEM_VM_CREATE_FAILED)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

Hyper-Vを切る

エラーをそのまま読むと「Hyper-Vを起動しているとダメだよ」と言われているので、Hyper-Vを切ってみる。

Hyper-V とは

Hyper-Vとは、Windowsに乗ってる仮想化システムのことで、例えば、Dockerが起動していたりHyper-Vがonになるのだと思います。

Hyper-Vに関する設定を確認

管理者権限で起動したターミナル上で

> bcdedit

とコマンドを入力し、hypervisorlaunchtypeの設定項目を確認します。

hypervisorlaunchtype    Auto

Autoとなっている場合は、必要な場面で勝手にHyper-Vが有効になるようです。おそらくDockerがさっきまで起動していたので、Hyper-Vが現在有効になっているのだと思います。

Hyper-Vを無効にする

管理者権限で起動したターミナル上で以下のコマンドを実行します。

> bcdedit /set hypervisorlaunchtype off
この操作を正しく終了しました。

設定を確認します。

>bcdedit

...

hypervisorlaunchtype    Off

オフになりました。

PCを再起動する

再起動してください

vagrant を起動する

>vagrant up

起動するはず

設定をAutoに戻す

> bcdedit /set hypervisorlaunchtype auto

Offになっているとdockerが起動しないのでこれはこれで不便です。

そこで、設定はAutoにしつつ、ログイン時にdockerを起動する設定をoffにするのがいいでしょう。一回Dockerを起動するとHyper-Vがonになってしまいますが、Dockerを起動しない限りは通常通りVagrantを起動できます。