WSL1をWSL2へ移行する手順

OperatingSystem,Ubuntu(WSL)

概要

  • 以前、こちらの記事でご紹介したWSL1(Windows Subsystem for Linux)およびUbuntu について、今回は2020年にリリースされたWSL2 を利用するため、WSL1からWSL2 へ移行する手順を記載します。
  • なお、私の環境ではUbuntu にRuby をインストールしていたため、Ubuntu のイメージ変換でエラーが発生しました。エラーの対処方法についても記載しています。
  • WSL1、WSL2 の比較については、下記資料を参照ください。

 

WSL1をWSL2へ移行する手順

BIOSの仮想化支援技術を有効化

  • BIOS の Intel Virtualization Technology, Intel VT-d Feature の設定を有効化します。
  • 先ず、BIOS Setup Utility を起動します。下記手順を参考にして下さい。

 

  • BIOS Setup Utility の 「Security」メニューを選択、続けて「Virtualization」の設定を選択します。

 

  • 「Intel Virtualization Technology」および「Intel VT-d Feature」をデフォルトの「Disabled」から「Enabled 」に変更します。

 

  • Intel Virtualization Technology, Intel VT-d Feature の設定が変更されました。

 

  • F10 キーを押し、下記の画面が表示されたら「Yes」を選択します。設定が保存され、PCが再起動します。

 

PowerShell を起動して仮想マシンプラットフォームを有効化

  • PowerShell を管理者として実行します。
  • WSL2をデフォルトバージョンに設定しましたが、「仮想マシン プラットフォーム」が無効であったためコマンドが失敗しました。
PS C:\WINDOWS\system32> wsl --set-default-version 2
Windows の仮想マシン プラットフォーム機能を有効にして、BIOS で仮想化が有効になっていることを確認してください。
詳細については、https://aka.ms/wsl2-install を参照してください

 

  • 下記に記載のコマンドを実行し、「仮想マシン プラットフォーム」を有効化します。「/norestart」オプションを指定しているため、手動で再起動を行います。
PS C:\WINDOWS\system32> dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

展開イメージのサービスと管理ツール
バージョン: 10.0.19041.844

イメージのバージョン: 10.0.19042.928

機能を有効にしています
[==========================100.0%==========================]
操作は正常に完了しました。

 

  • OS を再起動します。

 

カーネル コンポーネントの更新

  • 再度、WSL2をデフォルトバージョンに設定しましたが、Linuxカーネル コンポーネントの更新が必要であったためコマンドが失敗しました。
PS C:\WINDOWS\system32> wsl --set-default-version 2
WSL 2 を実行するには、カーネル コンポーネントの更新が必要です。詳細については https://aka.ms/wsl2kernel を参照してください
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください

 

  • こちらのサイトから「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」をダウンロードして、インストールします。

 

WSL2をデフォルトバージョンに設定

  • 再度、WSL2をデフォルトバージョンに設定します。コマンドは成功しました。
PS C:\WINDOWS\system32> wsl --set-default-version 2
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください

 

  • 以下は、Linuxカーネル コンポーネントの更新前と更新後の実行結果です。

 

ディストリビューションのバージョンを WSL 2 に設定する

  • インストールされているディストリビューションを WSL2 に設定します。対象のディストリビューションのサイズによって、WSL1 から WSL2 への変換が完了するまでに数分かかる場合があります。
PS C:\WINDOWS\system32> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Stopped         1
PS C:\WINDOWS\system32> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
変換が完了しました。
PS C:\WINDOWS\system32> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Stopped         2

 

(参考1)ディストリビューションのインポートが失敗しました

  • 私の環境では、下記のエラーメッセージが出力され、ディストリビューションのインポートが失敗しました。
PS C:\WINDOWS\system32> wsl --set-version Ubuntu 2
変換中です。この処理には数分かかることがあります...
WSL 2 との主な違いについては、https://aka.ms/wsl2 を参照してください
ディストリビューションのインポートが失敗しました。
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/js/jquery.js: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/js/jquery.js' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-Light.ttf' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-LightItalic.ttf' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-Regular.ttf' does not exist.
./usr/lib/ruby/2.5.0/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf: Hard-link target './var/lib/gems/2.5.0/doc/rubygems-update-3.1.2/rdoc/fonts/Lato-RegularItalic.ttf' does not exist.
bsdtar: Error exit delayed from previous errors.
  • エラーメッセージは、Ubuntu にインストールしていたRuby が起因しておりました。terraforming, Ruby をアンインストール後、無事にディストリビューションを WSL2 に設定することができました。
niikawa@niikawa1:~$ sudo gem uninstall terraforming
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:29: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:30: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:29: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:30: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
/usr/lib/ruby/vendor_ruby/rubygems/defaults/operating_system.rb:10: warning: constant Gem::ConfigMap is deprecated
Remove executables:
        terraforming

in addition to the gem? [Yn]  y
Removing terraforming
Successfully uninstalled terraforming-0.18.0

 

niikawa@niikawa1:~$ sudo apt-get purge ruby rubygems
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'ruby' instead of 'rubygems'
The following packages were automatically installed and are no longer required:
  fonts-lato javascript-common libfreetype6 libjs-jquery ruby-did-you-mean ruby-minitest ruby-net-telnet
  ruby-power-assert rubygems-integration
Use 'sudo apt autoremove' to remove them.
The following packages will be REMOVED:
  libruby2.5* rake* ruby* ruby-test-unit* ruby2.5*
0 upgraded, 0 newly installed, 5 to remove and 3 not upgraded.
After this operation, 14.8 MB disk space will be freed.
Do you want to continue? [Y/n] y
(Reading database ... 36778 files and directories currently installed.)
Removing ruby (1:2.5.1) ...
Removing ruby2.5 (2.5.1-1ubuntu1.6) ...
dpkg: warning: while removing ruby2.5, directory '/var/lib/gems/2.5.0' not empty so not removed
Removing libruby2.5:amd64 (2.5.1-1ubuntu1.6) ...
Removing rake (12.3.1-1ubuntu0.1) ...
Removing ruby-test-unit (3.2.5-1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...

 

(参考2)実行しようとした操作は、参照したオブジェクトの種類ではサポートされていません

  • 最後に、Ubuntu の起動を試みましたが、下記のエラーメッセージが出力され、起動できません。詳細は、こちらのIssue を参照ください。
実行しようとした操作は、参照したオブジェクトの種類ではサポートされていません。
(The attempted operation is not supported for the type of object referenced.)
Press any key to continue...

  • この問題を回避するため、先ずWinsock LSP のツールをダウンロードします。次に、PowerShell を管理者として実行します。
  • 下記のコマンドを実行し、「Success!」が表示されることを確認します。

.\NoLsp.exe c:\windows\system32\wsl.exe

 

  • 最後に、Ubuntu が起動できることを確認します。

 

 

参考資料