====================== トラブルシューティング ====================== WSL ====== WSL が root で実行される ------------------------- 初回起動時のユーザー名、パスワード登録中に WSL で別のインスタンスを実行すると以下のように、 プロンプトの末尾が # になり、スーパーユーザーである root で入力待ちのになることがあります。 .. code-block:: console root@HOSTNAME:/mnt/c/Users/USERNAME# おそらく初回起動時のユーザー名、パスワード登録を行っているウインドウがあるはずですなので前面に戻して、登録を完了させてください。 root で入力待ちになっているウインドウ閉じましょう。 登録完了後、新たなインスタンスを実行すると以下のような状態で入力待ちになるはずです。 .. code-block:: console USERNAME@HOSTNAME:~$ 上手く解決出来ない場合は powershell から ``wsl --unregister Ubuntu`` して一旦 Ubuntu の登録を解除した後、 再度 install し直すと解決するかもしれません。 .. code-block:: powershell :class: forCnP wsl --unregister Ubuntu wsl --install -d Ubuntu WSL 2 の動作要件を確認する -------------------------- WSL 2 を利用するためには仮想化メカニズムである Hyper-V が利用可能である必要があります。 Hyper-V が利用可能か否かを調べるには ``systeminfo`` コマンド実行して末尾の「Hyper-V の要件」を確認してください。 .. code-block:: powershell :class: forCnP systeminfo 実行例 1 .. code-block:: ps1con PS C:\WINDOWS\system32> systeminfo ホスト名: ******** OS 名: Microsoft Windows 10 Pro OS バージョン: 10.0.19044 N/A ビルド 19044 OS 製造元: Microsoft Corporation OS 構成: スタンドアロン ワークステーション OS ビルドの種類: Multiprocessor Free ... ... <中略> ... Hyper-V の要件: VM モニター モード拡張機能: はい ファームウェアで仮想化が有効になっています: はい 第 2 レベルのアドレス変換: はい データ実行防止が使用できます: はい 実行例 2 .. code-block:: ps1con PS C:\WINDOWS\system32> systeminfo ホスト名: ******** OS 名: Microsoft Windows 11 Pro OS バージョン: 10.0.22000 N/A ビルド 22000 OS 製造元: Microsoft Corporation OS 構成: スタンドアロン ワークステーション OS ビルドの種類: Multiprocessor Free ... ... <中略> ... Hyper-V の要件: ハイパーバイザーが検出されました。Hyper-V に必要な機能は表示されません。 上記、実行例 1 のように「Hyper-V の要件」の項目がすべて「はい」になっているか、 実行例 2 のように既に動作中のハイパバイザーが検出された場合は、 WSL2 を実行するために必要な「Hyper-V の要件」は満たされています。 Hyper-V の要件が満たされてない場合は、BIOS や UEFI の設定画面から VT-x や VT-d を有効にする必要があります。 UEFI の設定画面に入るには、:kbd:`SHIFT` キーを押しながら Windows の再起動を実行して、 「トラブルシューティング」→「詳細オプション」→「UEFIファームウェアの設定」に移動し、再起動します。 UEFI の設定画面に入ったら、Virtualization や VT-x、VT-d 等の項目を見つけて、 無効になっているものがあれば有効にしてください。 WSL 2 の実行ができない ---------------------- WindowsOptionalFeature の VirtualMachinePlatform (仮想マシン プラットフォーム) が無効な状態で WSL の既定バージョンを 2 にして ``wsl --install -d Ubuntu`` すると、Ubuntu の初回起動時に以下のようなエラーが発生します。 .. code-block:: ps1con PS C:\Users\USERNAME> wsl --install -d Ubuntu Ubuntu は既にインストールされています Ubuntu を起動しています... PS C:\Users\USERNAME> .. code-block:: ps1con Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x80370102 Please enable the Virtual Machine Platform Windows feature and ensure virtualization is enabled in the BIOS. For information please visit https://aka.ms/enablevirtualization Press any key to continue... この場合、powershell から ``wsl`` コマンドを実行してみると、以下のような案内が確認出来るはずです。 .. code-block:: ps1con PS C:\Users\USERNAME> wsl Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。 詳細については、https://aka.ms/wsl2-install を参照してください 前述の Hyper-V の要件が満たされてない場合は、案内に従って BIOS や UEFI の設定画面から VT-x や VT-d を有効にしてください。 UEFI の設定画面に入るには、:kbd:`SHIFT` キーを押しながら Windows の再起動を実行します。 もし、Hyper-V の要件が既に満たされているのに、この案内が出る場合は、WindowsOptionalFeature の VirtualMachinePlatform (仮想マシン プラットフォーム) が無効になっているケースが考えられます。 管理者権限で実行した PowerShell から以下のコマンドで確認しましょう。 .. code-block:: powershell :class: forCnP Get-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform もし管理者権限が得られない端末の場合でも、以下のコマンドを使うと状況の確認は可能です。 .. code-block:: powershell :class: forCnP Get-WmiObject Win32_OptionalFeature |? Name -m VirtualMachinePlatform 実行例 .. code-block:: ps1con PS C:\WINDOWS\system32> Get-WmiObject Win32_OptionalFeature |? Name -m VirtualMachinePlatform __GENUS : 2 __CLASS : Win32_OptionalFeature __SUPERCLASS : CIM_LogicalElement __DYNASTY : CIM_ManagedSystemElement __RELPATH : Win32_OptionalFeature.Name="VirtualMachinePlatform" __PROPERTY_COUNT : 6 __DERIVATION : {CIM_LogicalElement, CIM_ManagedSystemElement} __SERVER : SURFACEPRO5 __NAMESPACE : root\cimv2 __PATH : \\SURFACEPRO5\root\cimv2:Win32_OptionalFeature.Name="VirtualMachinePlatform" Caption : 仮想マシン プラットフォーム Description : InstallDate : InstallState : 2 Name : VirtualMachinePlatform Status : PSComputerName : SURFACEPRO5 上記 InstallState : 2 は Disabled を意味します。 VirtualMachinePlatform が無効になっていた場合、 管理者権限で実行した PowerShell から以下のコマンドで有効にします。 .. code-block:: powershell :class: forCnP Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform 管理者権限を得られない端末の場合は、以下のコマンドを用いて WSL の既定のバージョンを 2 から 1 に変更しましょう。 .. code-block:: powershell :class: forCnP wsl --set-default-version 1 実行例 .. code-block:: ps1con PS C:\Users\USERNAME> wsl --set-default-version 1 この操作を正しく終了しました。 ``wsl --status`` で現在の既定のバージョンが確認出来います。 .. code-block:: powershell :class: forCnP wsl --status 実行例 .. code-block:: ps1con PS C:\Users\USERNAME> wsl --status 既定のバージョン: 1 Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。 詳細については、https://aka.ms/wsl2-install を参照してください あとは、インストール済みの Ubuntu を WSL 1 に変更するか、一旦 Ubuntu の登録を解除してから再度 install するために、 以下のいずれかのコマンドを実行しましょう。 .. code-block:: powershell :class: forCnP wsl --set-version Ubuntu 1 .. code-block:: powershell :class: forCnP wsl --unregister Ubuntu wsl --install -d Ubuntu 仮想化ソフトウェア ==================== .. _conflict_of_WSL_and_other_virtualization: WSL の導入後、仮想化ソフトウェアが動かなくなった -------------------------------------------------- WSL2 は Hyper-V による仮想化機構を利用しているため、VMWare や VirtualBox 等、 他の仮想化機構を利用しているソフトウェアと競合して動作を妨げることがあります。 まず、「設定」→「アプリ」→「プログラムと機能」→「Windows の機能の有効化または無効化」 (以上の手順で ``C:\Windows\System32\OptionalFeatures.exe`` が起動する) から、 以下の項目を有効にして再起動する必要があります。 * ☑ Windows ハイパバイザー プラットフォーム 管理者権限で実行した PowerShell から :numref:`Windows ハイパバイザー プラットフォームをインストールするコマンド` のコマンドを実行する事でも Windows ハイパバイザー プラットフォームを有効化することができます。 .. code-block:: powershell :caption: Windows ハイパバイザー プラットフォームをインストールするコマンド :name: Windows ハイパバイザー プラットフォームをインストールするコマンド :class: forCnP Enable-WindowsOptionalFeature -online -FeatureName HypervisorPlatform 詳しくは以下の記事を参考にしてください。 * @IT / クラウド / Windows Server Insider / Windows 10 Hyper-V入門 / 2021-07-29: `Hyper-Vとサードパーティー製仮想マシン環境を共存させる `__ Windows ハイパバイザー プラットフォームの有効化では問題を解決出来なかった場合は、 「:ref:`WSL_version_conversion_for_each_distro`」の方法で WSL1 にバージョンダウンして使う方法もあります。