
1. 为什么需要从WSL1升级到WSL2Windows Subsystem for LinuxWSL是微软在Windows 10和Windows 11上提供的Linux兼容层。WSL1和WSL2虽然名字相似但架构完全不同。WSL1本质上是一个翻译层它将Linux系统调用转换为Windows系统调用。而WSL2则是一个轻量级的虚拟机运行真正的Linux内核。WSL2相比WSL1有几个关键优势完整的系统调用兼容性WSL2使用真实的Linux内核可以运行Docker等需要特定内核功能的应用程序文件系统性能在Linux文件系统操作上WSL2比WSL1快得多特别是git操作、npm安装等内存管理WSL2有更高效的内存管理机制网络功能支持完整的网络栈和本地主机连接注意如果你的工作主要涉及跨Windows和Linux文件系统的操作比如频繁在/mnt/c下工作WSL1的文件访问性能可能反而更好。2. 升级前的准备工作2.1 系统要求检查在开始升级前需要确认你的系统满足以下要求Windows 10版本1903或更高版本内部版本18362或更高对于x64系统版本19041或更高虚拟化功能已启用在BIOS中开启VT-x或AMD-V可以通过WinR运行winver命令查看当前Windows版本。2.2 启用必要的Windows功能以管理员身份打开PowerShell运行以下命令dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart完成后需要重启计算机。2.3 安装WSL2内核更新包从微软官网下载并安装WSL2 Linux内核更新包 https://aka.ms/wsl2kernel这个包大约50MB安装过程很简单一路点击下一步即可。3. 将现有WSL1发行版转换为WSL23.1 查看当前WSL版本在PowerShell中运行wsl -l -v这会列出所有已安装的Linux发行版及其当前运行的WSL版本。输出类似NAME STATE VERSION * Ubuntu-20.04 Stopped 13.2 设置默认WSL版本在转换特定发行版前建议先设置默认使用WSL2wsl --set-default-version 23.3 转换现有发行版对于每个要转换的发行版使用以下命令wsl --set-version 发行版名称 2例如wsl --set-version Ubuntu-20.04 2转换过程可能需要几分钟时间具体取决于发行版的大小。提示如果转换过程中遇到问题可以尝试先导出再导入发行版wsl --export Ubuntu-20.04 Ubuntu-20.04.tar wsl --unregister Ubuntu-20.04 wsl --import Ubuntu-20.04 C:\WSL\Ubuntu-20.04 Ubuntu-20.04.tar --version 24. WSL2的常见问题与解决方案4.1 网络访问问题WSL2使用虚拟网络与主机不在同一个网络栈。这意味着从Windows访问WSL2中的服务使用localhost最新版本已支持从WSL2访问Windows中的服务使用host.docker.internal或Windows主机的IP可以通过在WSL2中运行cat /etc/resolv.conf查看nameserver这就是Windows主机的IP。4.2 文件系统性能虽然WSL2的Linux文件系统性能很好但访问Windows文件系统/mnt/c等的性能可能不如WSL1。如果需要在Windows和Linux之间频繁操作文件可以考虑将项目放在Linux文件系统中如~/projects使用VS Code的Remote - WSL扩展直接在WSL中编辑文件4.3 内存使用WSL2默认会使用最多50%的物理内存。如果发现内存占用过高可以在用户目录下创建或修改.wslconfig文件[wsl2] memory4GB swap2GB然后运行wsl --shutdown重启WSL2使配置生效。5. WSL2的高级配置与优化5.1 使用自定义内核WSL2默认使用微软提供的内核但你也可以使用自己编译的内核从https://github.com/microsoft/WSL2-Linux-Kernel获取源码并编译在.wslconfig中指定内核路径[wsl2] kernelC:\\path\\to\\your\\kernel5.2 启用systemdWSL2默认不使用systemd但可以通过以下方式启用在/etc/wsl.conf中添加[boot] systemdtrue退出所有WSL实例在PowerShell中运行wsl --shutdown重新启动WSL5.3 图形界面支持WSL2支持运行图形界面程序需要安装X Server如VcXsrv安装VcXsrv并启动勾选Disable access control在WSL2中设置DISPLAY环境变量export DISPLAY$(cat /etc/resolv.conf | grep nameserver | awk {print $2}):0现在可以运行图形程序了如gedit或nautilus6. 回退到WSL1如果遇到兼容性问题需要回退可以使用wsl --set-version 发行版名称 1或者设置默认版本为WSL1wsl --set-default-version 1我在实际使用中发现WSL2对于大多数开发场景都是更好的选择特别是需要运行Docker或使用Linux特有功能时。唯一需要回退到WSL1的情况可能是需要高性能访问Windows文件系统中的文件。