去年为了安装WSL2,将windows10切换到内部体验版,最后发现WSL2没办法直接访问windows的分区,同时内部体验版各种不稳定,就又恢复为正式版。最近升级到2004可以正式安装WSL,于是又手痒升级到WSL2.
安装WSL请参考WSL体验
升级到WSL2
- Windows 10必须升级到version 2004, Build 19041 或更高.
- 确认BIOS已开启Hyper-V.
Windows启用“虚拟机平台”可选组件,在powershell中执行
1
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
手动更新WSL2 kernel内核.
下载下面安装包后直接安装即可1
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
默认使用WSL2
1
wsl --set-default-version 2
之后如果安装新的发行版将会在WSL2下
发行版转换
使用下面命令检查发行版1
wsl --list --verbose
如下表示发行版还在WSL下1
2 NAME STATE VERSION
* Ubuntu-18.04 Running 1
使用下面命令转换成WSL2的发行版1
wsl --set-version Ubuntu-18.04 2
转换大约要几分钟,转换完再查看发行版,发现会变为1
2 NAME STATE VERSION
* Ubuntu-18.04 Running 2
WSL2下问题处理
新的 WSL2 架构会为 Linux 系统分配一个虚拟网卡,Linux 虚拟机与 Windows 组成了一个局域网,因此WSL2无法通过127.0.0.1访问主机代理,处理方式就是获取主机ip, 以该ip来访问主机。
主机代理软件要设置为支持局域网访问。
控制面板\系统和安全\Windows Defender 防火墙\允许的应用,允许主机代理软件通过防火墙。
使用感受
后文参考链接有WSL2和WSL的对比,WSL 2 使用虚拟化技术在轻量级实用工具虚拟机中运行 Linux 内核,是跑的完整的Linux内核,但访问windows的文件系统非常慢,会导致我在WSL2下编译zephyr速度比WSL慢4倍,鉴于WSL已经能满足我编译Zephyr的需求,因此切回为WSL。
默认使用WSL1
1
2wsl --shutdown
wsl --set-default-version 1转换发行版到WSL
1
wsl --set-version Ubuntu-18.04 1
关闭虚拟机平台
可以不关闭,但vmmem进程会在后台占用内存
在”控制面板\程序\程序和功能\启用或关闭Windows功能”中去掉勾选”虚拟机平台”
参考
https://docs.microsoft.com/en-us/windows/wsl/wsl2-index
https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-kernel
https://docs.microsoft.com/zh-cn/windows/wsl/compare-versions#accessing-windows-networking-apps-from-linux-host-ip