Windows

[Windows 10] WSL2 まとめ

投稿日:

ようやく手元の環境でも WSL2 が導入できるようになったので、やったことまとめ。


 

WSL2

Windows Subsystem for Linux の ver2。
WSL1 が Linux の system-call を Windows API に変換していたのに対して、WSL2 は仮想マシン実装。
WSL専用で軽量実装、専用Linux-kernel らしい。。。

そのため、WSL1 にあった各種制約はかなり緩和される。
しかし、仮想上の "別" マシンなので、例えばネットワークや Xサーバー などは取り扱い方が変わってくる。
 

Windows 10 1903/1909 でも導入可能に

Windows 10 2004 の評判があまりよろしくないので、WSL2 を目的とした導入を見送ってきたが、
(そもそもMS自社ハードの Surface Pro 7 すら、いまだに 2004 のアップデートが "できない" 状態だし。。。)
ver 1903/1909 にバックポートされたので導入可能となった。

なお、導入には「KB4566116」が必要で、適用後は OS リビジョンナンバーが “1049” 以降になる。

Google Adsense



[安定版] WSL2 の導入

"WSL2 install" などで検索すると、preview版での導入方法、あるいはそれを引きずった記事が散見されるが、
このタイミングなら、以下で導入できる。

(管理者権限のある PowerShell から)

再起動後、以下で以降のデフォルトを WSL2 にできる(一般権限で可)。

 

既存環境(WSL1) の移行

上記を設定しても、既存の環境は WSL2 には移行されず、WSL1 のまま残る。
(逆を言うと、WSL1, WSL2 を併用することが可能)
既存環境を WSL2 に移行する場合は以下。

 

Xサーバーの対応

前述したように、WSL2 は "別" の仮想マシン上で動作している。
格好として、別のマシンからの通信に見えるため、いくつかの対処が必要になる。

Google Adsense



環境変数 DISPLAY の設定

私は WSL用のXサーバーとしてVcXsrvを利用している。
通常 VcXsrv に限らず、Xサーバーの指定として DISPLAY 環境変数 localhost:0.0 などを設定する。
しかし、前述したようにホストの Windows10 上で動くXサーバーに対して、WSL2 は別の仮想マシン上で動作している。
そのため、Xサーバーを指定する DISPLAY 環境変数には、仮想ネットワーク上のホストアドレスを指定する必要がある。

では、仮想ネットワーク上のホストのIPを指定しようとなるわけだが、
このIPは動的に振られるため、毎度調べて適切に変更する必要がある。
以下を .bashrc などに記述すると毎回自動で適切に設定される。

 

ファイアーウォールの設定

Xサーバーへの信号は、別マシンからの通信にみえるため、ファイアーウォールも通過させる必要がある。
Windows 標準のファイアーウォールの場合なら、Xサーバー・アプリケーションへの通信を許可すると良い。
 

Xサーバーアプリケーションの設定

Xサーバーのアプリケーションによるが、アプリ自身でも外部からのアクセスを許可する必要がある。
VcXsrv の場合は、"Additiona parameters for VcXsrv" に "-ac" を設定すればよい。
 

メモリ肥大化の対応

仮想マシンである WSL2 へのメモリ割り当ては、必要に応じて動的になされるが、
Linux はメモリがあるだけ、ファイルキャッシュなどをメモリ上に展開する。
すると Windows はメモリが足りなくなったと判断して、割当メモリを増加させる。
これが連鎖的に起こって WSL2 がホストのメモリを食いつぶす問題が起こるようだ。
初期設定ではホストの全メモリの8割まで、WSL2への割当メモリが増加する。

これを回避するには WSL2 への割り当てメモリサイズを固定する。
設定ファイルは、C:\Users\xxxx\.wslconfig。
以下の例は WSL2 へのメモリ割り当てを 4GB, スワップを無効化している。

Google Adsense



WSL2 で、できるようになったこと

 

WSL側のファイルなどを Windows側から読み書きする

WSL1 では、Windows のファイルを WSL から読み書きできたが、その逆はできなかった。
WSL2 では、WSLのファイルを Windows側から読み書きできるようになった。

エクスプローラからアクセスする場合は、アドレスバーに "\wsl$" と入力する。
するとその下に WSL の distribution名で、各WSLのファイル群が配置されている。
 

WSL上で NFS を利用する

WSL1 では kernel に nfs が組み込まれておらず、利用できなかった。
WSL2 では kernel が nfs をサポートしているので、
"$ mount -t nfs ..." のようにして普通にマウントできる。
 

Google Adsense

Google Adsense

-Windows
-,

Copyright© HEPtech, 2024 All Rights Reserved.