WSL2 †
WSL2のオプション †
appendWindowsPath: WinのPATHの追加を止めてIOの高速化 †
- デフォルトではWSLの$PATHに、WinのPATH設定が引き継がれる
- TAB押したときのコマンド補完で、winのコマンドを探すため遅くなる
- dockerやvirtualboxではPATH追加が必要なので個別に対応する
sudo vim /etc/wsl.conf
--
[interop]
appendWindowsPath = false
--
Win/WSLでのファイルアクセス †
- WSLからWin上のファイルへアクセス。/mnt経由でアクセスできる
ls /mnt/
c d wsl
WSL1から2へ移行 †
Docker †
トラブルシューティング †
IOが遅い †
原因:
- /mnt/c,d等(type 9p)にあるファイルにアクセスすると非常に遅くなる
- /home/<user>/dir1 -> /mnt/c/tmp/ のようなsymlinkがあるだけでも遅くなった
解決:
- WSL2側にファイルを置く
mount
/dev/sdb on / type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
...
C:\ on /mnt/c type 9p (rw,noatime,dirsync,aname=drvfs;path=C:\;uid=1000;gid=1000;metadata;umask=22;fmask=11;symlinkroot=/mnt/,mmap,access=client,msize=65536,trans=fd,rfd=8,wfd=8)
...
VirtualBoxと競合する †
- WSL2はHyper-Vを使うので、VirtualBox等のHyper-V非対応のバージョンと競合する。競合する場合は、VirtualBox, Dockerが起動しない。
- VirtualBox 6.1.12ではうまく動作した。
WSL1との違い †
WSL1:
- LXCore/LXSSカーネルドライバが、Linuxのシステムコール等を変換して実行。Linux kernelは使っていない。
- NTFSの拡張メタデータを使って、owner/permission等を実現していている。ファイルアクセスが遅い。
- NTFSの拡張メタデータ非対応のアプリで、linuxファイルを変更すると、owner/permission情報が壊れる。
- ネイティブdockerが動かない。Docker Desktop for WindowsのWSLサポートは動く。WSL上のファイルは直接dockerから参照できないので、docker for windowsから見えるパスにファイルを置く必要がある。 Memo/Windows/10/WSL/Docker#ge39a8e8
- Windowsのドライブのマウントタイプ: drvfs 。/mnt/c, /mnt/d のようにマウントされる。
WSL2:
- 軽量VM上で実行される。
- VM上の独自linux kernelを使うので互換性が高い。
- 仮想ハードウェアディスク(VHD)上にext4等のファイルシステムを使用
- Windowsのドライブのマウントタイプ: 9pfs に変わった。/mnt/c, /mnt/d のようにマウントされる。
- 「\\wsl$\Ubuntu\home」のように Windowsからファイルを参照可能
- WSL2はHyper-Vを使う。VirtualBoxの未対応バージョンと競合し、VirtualBoxが起動しない。
記事: