share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.05.11 TUE

WSL1をWSL2へ移行する手順

新川 貴章

WRITTEN BY 新川 貴章

概要

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

WSL1をWSL2へ移行する手順

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

  • BIOS の Intel Virtualization Technology, Intel VT-d Feature の設定を有効化します。
  • 先ず、BIOS Setup Utility を起動します。下記手順を参考にして下さい。
概要 Lenovo PC + Windows 10 使用時のBIOS起動方法を紹介します。Lenovo以外のPC においても、Windows 10 であれば、基本的な手順は同じだと思います。 Lenovo PC のモデルは、ThinkPad X1 Yoga です。 Lenovo + Windows 10 BIOS起動方法 Windows アイコンをク...
  • 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 が起動できることを確認します。

参考資料

概要 Lenovo PC + Windows 10 使用時のBIOS起動方法を紹介します。Lenovo以外のPC においても、Windows 10 であれば、基本的な手順は同じだと思います。 Lenovo PC のモデルは、ThinkPad X1 Yoga です。 Lenovo + Windows 10 BIOS起動方法 Windows アイコンをク...
WSLをインストールしてbashをはじめようWSLについてWindows Subsystem for Linux(WSL)は、Linuxのバイナリ実行ファイルをWindows 10およびWindows Server上でネイティブ実行するための互換レイヤーを提供します。WSLにUbuntuのOSをインストールして、bashシェルやa...
Linux 用 Windows サブシステムのバージョン 1 とバージョン 2 を比較します。 WSL 2 の新機能について説明します。
Ubuntu、Debian、SUSE、Kali、Fedora、Pengwin、Alpine などの Linux ディストリビューションを、Bash ターミナルを使用して、Windows 10 マシンにインストールする方法について説明します。
Windows Pro Insider Preview Build 19541.rs_prerelease.200102-1216. WSL 2.0 Ubuntu. All commands directed to any wsl-linux end up with instant echo "The attempted operation is not supported for...
For an workaround provided by Proxifier, see #4177 (comment) Please fill out the below information: Your Windows build number: 10.0.18917.1000 What you're doing and what's happening: After ...

元記事はこちら

WSL1をWSL2へ移行する手順

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。