一、起源
Windows 10 2004 发布后,WSL2 也可以在正式版 Windows 10 中使用,相比于 macOS,WSL2 是一个原生 Linux 环境而非类 unix 环境,甚至可以在 App 商店中选择所需要的发行版。而相比于 WSL1,WSL2 采用了 HyperV 虚拟机的方式,解决了 WSL1 不能安装 Docker 等问题。
相比于 WSL1,WSL2 通过虚拟机的方式带来了更完整的 Linux 内核,但这种方式也引入了一些问题;
WSL2 不能和 VMWarework Station、VirtualBox 同时运行这一条已经过时了,VirtualBox 和 VMWare Workstation 都发布了支持 WSL2 和 Hyper-V 的新版。WSL2 跨 OS 的磁盘性能的确低的令人发指,尤其是小文件,安装一个 Python 依赖可能需要等几分钟,安装一个 NodeJS 依赖…当我没说…相关 ISSUE 底下有无数吐槽,不过目前还没有人出来解决,在这里:https://github.com/microsoft/WSL/issues/4197)。不过微软在文档里也说了,有很多方式可以避免跨 OS 使用文件系统,比如使用 VSCode 的 remote deployment 功能,我认为这也是更好的实践,并且也这么做了。当然,如果你必须跨 OS 使用文件系统,还是乖乖留在 WSL1 吧(WSL1 太渣了,还是留在 VirtualBox 吧)。
除了表格里说的,我认为 WSL2 最大的问题在于…资源占用太大了我是一台 16G 内存的电脑,使用 WSL2 后开机就要吃掉 11G 的内存,虽然可以使用 wsl --shutdown 关闭虚拟机释放资源,但是相比于 VirtualBox 和 WSL1,WSL2 的资源占用可以说翻倍了。
二、升级WSL2教程
1、升级 Windows 10 到 2004
升级到 Windows 10 2004 有多种方法,最靠谱的还是从设置 - 更新和安全里进行 OTA 升级,另一种更快速的方法是从官方地址下载镜像升级,访问这个地址下载运行就可以升级到最新的版本 https://www.microsoft.com/software-download/windows10,
2、启用 WSL2 并安装 Linux
升级 Windows 10 的过程不会碰到太多问题,升级后还需要进行一些配置才可以使用 WSL2,首先要启用 Windows 子系统功能,使用管理员权限打开一个 PowerShell 窗口,输入以下命令,并重启系统:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
重启后,Windows 默认启用的是 WSL1,还需要再启用虚拟机平台功能,在 PowerShell 中输入以下命令,并再次重启系统:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启后,在 PowerShell 中输入以下命令,将 WSL 默认版本改为 WSL2:
wsl --set-default-version 2
接下来在 Microsoft Store 中找一个 Linux 发行版进行安装,单击以下链接会打开每个分发版的 Microsoft Store 页面:https://aka.ms/wslstore
- Ubuntu 18.04 LTS
- Ubuntu 20.04 LTS
- openSUSE Leap 15.1
- SUSE Linux Enterprise Server 12 SP5
- SUSE Linux Enterprise Server 15 SP1
- Kali Linux
- Debian GNU/Linux
- Fedora Remix for WSL
- Pengwin
- Pengwin Enterprise
- Alpine WSL
- Raft(免费试用版)
安装后在 PowerShell 中执行 wsl -l -v
可以看到当前的发行版是否跑在 WSL2 中,如果显示版本是1…请重复上面的安装步骤。
祝贺你! 现已成功安装并设置了与 Windows 操作系统完全集成的 Linux 分发!
以下是一些最佳实践:
3、网络互通
Windows 访问 WSL2 启动的网络服务,可以直接使用 localhost,但是 Linux 访问 Windows 启动的网络服务这种方式就不行了,可以使用如下脚本获取 Windows 的 IP,并使用 IP 访问 Windows:
4、文件系统互通
WSL2 访问 Windows 文件系统依然通过挂载分区的方式,Windows 下的磁盘会被挂载在 /mnt 下,例如 /mnt/c。
更加方便的一个方式是,在 Terminal 中,使用 explorer.exe . 可以直接调用资源管理器打开当前目录,有点类似 Mac 下的 open 。
5、使用 Docker
WSL2 带来了完整的 Linux 内核,所以可以参照 Docker 在 Linux 上安装的过程安装 Docker,并且可以正常使用。使用 Docker Desktop,2.3.0.2 以上版本已经支持 WSL2 和 Hyper-V,免去一些折腾。
GPU 支持
Build 2020 发出消息说 WSL2 要支持 GPU,Nvidia 也发出了 CUDA on WSL2 的预览版,在这里:https://developer.nvidia.com/cuda/wsl。这意味着以后可以直接在 Windows 上使用 GPU 加速训练模型了,虽然支持成都还很有限,但是相比于 Mac 可领先了一个身位都不只了。
三、总结:
使用 Windows + WSL2 来构建开发环境已经可以满足大部分的需求。其本质就是一台跑在 Hyper-V 上的虚拟机,你可以使用 VMWare Workstation 或 VirtualBox,经过简单的配置实现其 100% 的功能,并且会有更高的性能,更少的资源占用,但是毕竟 WSL2 是一项原生功能,其配置上的便利性和兼容性,大大减少了使用者花在配置上的精力,最大程度的实现开箱即用,
参考文章:
https://docs.microsoft.com/zh-cn/windows/wsl/install-manual#step-5—set-wsl-2-as-your-default-version