-
Notifications
You must be signed in to change notification settings - Fork 0
MS_WSLToWSL2
- 戻る(Windows Subsystem for Linux)
- WSL → WSL2
- Linuxサブシステム
- コンテナ技術
-
互換レイヤではなくなり、単に Hyper-Vでホストされる Linux
- Hyper-V は、WSL2 専用にカスタマイズされた軽量版を使用。
- という事で、Home Edition でも利用可能になっている。
- Linux カーネルも独自パッチで軽量化を実現している。
-
UI/UX は WSLと同じ(UX を踏襲)
- ホストと異なる IP アドレスだったが、Build 18945 で改善されたもよう。
- DrvFs → P9 の影響はどうなるか?
補足(この 1 行が全て): 「互換レイヤではなくなり、単に Hyper-V で
ホストされる Linux」というのが WSL 2 の本質である。
帰結として次が変わった。
WSL 1 WSL 2 実体 Windows カーネル上の互換レイヤ( lxcore.sys)軽量 VM 上の実 Linux カーネル syscall互換性一部未実装(Docker 等が動かない) 完全 Linux 側 I/O(ext4) 遅い 速い(ネイティブ) Windows 側 I/O( /mnt/c)速い 遅い(9P プロトコル経由) ネットワーク ホストと同一 別 IP(NAT。後述) メモリ 必要なだけ VM に確保( .wslconfigで制限可)「DrvFs → P9 の影響」という懸念はそのとおりで、
/mnt/c越しのファイル アクセスは目に見えて遅くなった。
開発時はソースを Linux 側(~/)に置くのが鉄則である。
- 「Windows 10 20H1」(バージョン 2004)で正式版がリリースされた。
- 従来通り WSL1 をインストールしてから、
PowerShellで WSL2 に変換する
補足(最新化:現在は 1 コマンド): 「WSL1 を入れてから変換」という
手順は当時のもので、現在は不要である。wsl --install # 機能有効化・カーネル導入・Ubuntu 導入まで一括既定のバージョンも WSL 2 である。
-
共存可能とのこと
- いつでも、WSL2 にアップグレード、ダウングレード可能
(PowerShellで)。 - この操作は、ディストリビューション毎に行うことが出来るらしい。
- いつでも、WSL2 にアップグレード、ダウングレード可能
-
エミュレーション環境(互換レイヤ)から仮想環境に変更されたが、
UX を踏襲(DrvFs → P9 とか)するので、
敢えて、WSL1, 2 を共存させなくても良さそう。
補足(WSL 1 を選ぶ理由が残る場面): 「共存させなくても良さそう」は
概ね正しいが、WSL 1 の方が有利な場面もある。
場面 推奨 一般的な Linux 開発・Docker WSL 2 /mnt/c上の Windows ファイルを大量に扱うWSL 1(P9 のオーバーヘッドが無い) ネットワークをホストと同一にしたい WSL 1 入れ子の仮想化が使えない環境 WSL 1 ディストリビューションごとに切り替えられる。
wsl --set-version <Distro> 1
色々な記事が出ているが、ザックリ以下のような感じ。
-
WSL2 と Docker は別物で、Docker Desktop で組合せて利用。
-
- WSL2 上で Docker を動作することができるよう進化。
-
以下のような特徴があり、
- Windows の GUI 操作性
- Linux の CUI 活用
- Linux コンテナへのデプロイ
-
端的に言うと、
- IDE だけ Windows 側にあって、
- 開発環境(e.g. LAMP スタックなど)は、WSL2 + Docker 側にある。
- 故に、WSL2 + Docker Desktop WSL2 Backend +
Visual Studio Code等を組合せた開発が可能。
補足(現在の定番構成): この構成は現在、Windows での開発の標準形に
なっている。[Windows] VS Code(UI) │ Remote - WSL / Dev Containers 拡張 ▼ [WSL 2] Linux(ソース・ツールチェーン・Docker Engine) │ ▼ [Docker] コンテナ(DB / Redis / アプリ)要点は VS Code のサーバー側プロセスが WSL 内で動くことで、
拡張機能・ターミナル・デバッガがすべて Linux 側で完結する。
これにより/mnt/cの遅さを踏まずに済む。なお コンテナ技術で述べたとおり
Docker Desktop は有償化されているため、
WSL 2 内にdocker-ceを直接入れる構成も広く採られている。
GUIサポート(WSLg)
-
前提: WSL(1) インストール済み。
-
手順
-
OS のアップデート(20H1 以降)
-
「仮想マシン プラットフォーム」オプション機能を有効化
(Hyper-V は必須ではないので Home Edition でも OK) -
WSL 2 を既定のバージョンとして設定
wsl --set-default-version 2
-
WSL のバージョンを確認する。
> wsl --list --verbose NAME STATE VERSION * Ubuntu-18.04 Stopped 1 -
WSL のバージョンを変更する。
> wsl --set-version Ubuntu-18.04 2 変換中です。この処理には数分かかることがあります... -
再確認
> wsl --list --verbose NAME STATE VERSION * Ubuntu-18.04 Running 2
-
-
動作確認(相互運用)
-
Linux 側から Windows 側のファイル システム
dir /mnt/c # 問題なくアクセスできた -
Linux 側から Windows 側へネットワーク アクセス
cat /etc/resolv.conf # nameserver 172.29.96.1 ← ホストの IP(自動生成) curl http://172.29.96.1/iisstart.htm # 問題なくアクセスできた
-
Windows 側から Linux 側へネットワーク アクセス
(WSL(1) はローカル・プロセスだったが、WSL2 では VM になったので)
→nc -lk 9999に対し127.0.0.1:9999で問題なく接続&受信できた。
-
補足(ネットワークの要点): 上の検証結果が示すとおり、
方向によって扱いが違う。
方向 挙動 Windows → WSL localhostで通る(localhost フォワーディングが働く)WSL → Windows localhostでは通らない。ホストの IP が要る後者のために
/etc/resolv.confのnameserverを見る、
という上記のやり方は当時の定番だった。
現在は Windows 11 以降でcurl http://$(hostname).local:80 # または cat /etc/resolv.conf | grep nameserverのほか、ミラー モード ネットワーク(
.wslconfigで
networkingMode=mirrored)を有効にすると
WSL とホストの IP が同一になり、双方向ともlocalhostで通る。
WSL 1 の使い勝手が戻ってくる形なので、
ネットワーク周りで詰まったらこれを検討したい。
PowerShellから。
wsl --list --online # 可能なディストリビューションの一覧
wsl --install -d <DistroName>Microsoft Store から、一覧に表示されないものをインストールすることもできる。
WSL2 環境は簡単に再インストール的なリフレッシュができる。
wsl --unregister <DistroName> # 削除(データも消える)
wsl --install -d <DistroName> # 入れ直し補足(
.wslconfigによるリソース制御): WSL 2 は VM なので、
放っておくとメモリを大きく確保する(既定でホストの 50% または 8GB)。
C:\Users\<user>\.wslconfigで制御できる。[wsl2] memory=4GB processors=4 swap=2GB networkingMode=mirrored「WSL を使っていると Windows が重い」という相談の多くは、
この設定で解決する(vmmemプロセスのメモリ消費)。
反映にはwsl --shutdownが必要である。
-
WSL2をWindows10に公式の手順でインストールする
https://t-dilemma.info/official-install-wsl2/ -
WSL2からWindowsホストで動作しているアプリケーションにアクセスする – Logico Inside
https://logico-jp.io/2019/08/26/access-an-app-running-on-windows-host-via-wsl2/
-
WSL 1 と WSL 2 の比較
https://learn.microsoft.com/windows/wsl/compare-versions -
WSL の詳細設定構成(
.wslconfig)
https://learn.microsoft.com/windows/wsl/wsl-config -
WSL でのネットワークに関するアプリケーション
https://learn.microsoft.com/windows/wsl/networking
Tags: 移行, Windows, Linux, Linuxサブシステム, 仮想化
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。