手元の Windows 10 で WSL2 を使いたくて Hyper-V を有効にしようと思ったら意外にも苦戦した。
環境
環境は以下。
- Windows 10 Pro バージョン 2004 (OS ビルド 19041.630)
systeminfo
コマンドでは以下が表示されているので Hyper-V の使用条件は満たしている。
>systeminfo
・
・
・
Hyper-V の要件: VM モニター モード拡張機能: はい
ファームウェアで仮想化が有効になっています: はい
第 2 レベルのアドレス変換: はい
データ実行防止が使用できます: はい
エラー発生時の手順
- Hyper-V を有効にすると他の仮想環境が動かなくなるとのことなので、使用している VMware や VirtualBox を Hyper-V と共存可能なバージョンに更新
- [コントロールパネル] - [プログラムと機能] - [Windows の機能の有効化または無効化] で以下をチェック
- Hyper-V
- Linux 用 Windows サブシステム
- Windows ハイパーバイザー プラットフォーム
- 仮想マシン プラットフォーム
- OK をクリックするとインストールされ、完了したら再起動
これで通常なら入るはずだが、再起動後プログレスバーが 90 % 辺りで「機能を構成できませんでした」となり、その後「元に戻しています」となって有効化できない。
原因を調べる
このメッセージからは原因が全く推定できないので、「Hyper-V 機能を構成できませんでした」などのワードで検索した結果を試してみる。
-
bcdedit
コマンドから一旦 off にしてから有効化する- 変わらず
- Kaspersky をアンインストールしてから有効化する
- Kaspersky 使っていない
- ディスク容量が十分空いていないと有効化できないことがある
- 空いてる
再起動待ちに飽きたので、何か手がかりにならないかとイベントビューアを見ると Setup に以下が記録されていた。
- Update Microsoft-Hyper-V-Management-Clients of package Microsoft-Hyper-V-ClientEdition? failed to be turned on. Status: 0x800f0922.
- Update Microsoft-Hyper-V-Services of package Microsoft-Hyper-V-ClientEdition? failed to be turned on. Status: 0x800f0922.
- Update Microsoft-Hyper-V-Hypervisor of package Microsoft-Hyper-V-ClientEdition? failed to be turned on. Status: 0x800f0922.
- Update Microsoft-Hyper-V-Management-PowerShell? of package Microsoft-Hyper-V-ClientEdition? failed to be turned on. Status: 0x800f0922.
- Update Microsoft-Hyper-V-All of package Microsoft-Hyper-V-ClientEdition? failed to be turned on. Status: 0x800f0922.
今度はこのメッセージでググってみると、以下の記事に辿り着いた。
Unable to install hyperv on Windows 10
https://social.technet.microsoft.com/Forums/ie/en-US/4d373cc1-faec-41e5-84cd-f56bc464b3a9/unable-to-install-hyperv-on-windows-10?forum=win10itprovirt
この記事ではパフォーマンスカウンタの再構築をすることで解消した、と言っている人がいる。
イベントログに出ていた Status の値も同じなので、ダメモトで試してみる。
解決した時の手順
パフォーマンスカウンタの再構築の手順については上記記事内にもあったが、一応公式ドキュメントを参照した。
実行。
>cd c:\windows\system32
>lodctr /R
エラー: パフォーマンス カウンターの設定をシステムのバックアップ ストアから再構築できませんでした。エラー コードは 2 です
いきなりのエラーで一瞬焦るが、ググってみると正常終了するまで実行してみろ、という情報があったので何もせずに再度実行。
>lodctr /R
情報: パフォーマンス カウンターの設定をシステムのバックアップ ストアから正常に再構築しました
今度は上手く行った模様。
続けて以下も実行した。
>cd c:\windows\sysWOW64
>lodctr /R
>cd C:\Windows\System32\Wbem\
>winmgmt.exe /RESYNCPERF
これでパフォーマンスカウンタの再構築は完了したはずなので、今度は Hyper-V だけにチェックを付けて再起動。
今度は無事に有効化された!
その後その他の機能も有効化して再起動。
問題なく入ったので以下を実行して WSL2 を有効化した。
>wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
できれば有効化できなかった理由はもう少し分かりやすく出力して欲しいと心から思った。