一台机器跑 3 套 Linux:WSL 多版本管理快速上手指南
【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL
项目 A 还锁在 Ubuntu 20.04 的老依赖上,项目 B 已经迁到 22.04,新框架又点名要 24.04——重装系统?不现实。用微软开源的 WSL(Windows Subsystem for Linux)做 WSL 多版本管理,你可以在同一台 Windows 上装下 3 个不同版本的 Ubuntu 多发行版,各占一个磁盘镜像,想进哪个就wsl -d一下。这篇文章带你把这套环境从零搭起来。
先想清楚这三件事
别急着敲命令,先花 30 秒分清三个词,后面就不会拧巴:
- 发行版:你在哪个 Linux 系统里干活。Ubuntu、Debian、Kali 都行,装几个都行。
- 版本:WSL 有两代运行引擎,1 代和 2 代。1 代靠翻译层把 Linux 系统调用转给 Windows 内核;2 代跑在一个轻量 Linux 虚拟机里,系统调用基本是原样的。
- 默认版本:两条线。一是
wsl不带-d时默认进哪个发行版;二是新装的发行版默认落在 1 代还是 2 代(wsl --set-default-version管这条)。
1 代和 2 代怎么选,看这张表就够了:
| 维度 | WSL 1 | WSL 2 |
|---|---|---|
| 内核实现 | 翻译层,直接调 Windows 内核 | 独立 Linux 内核,Hyper-V 虚拟化 |
/mnt/c读写 | 快 | 明显偏慢 |
| 完整系统调用 | 部分兼容 | 完全兼容 |
| 内存占用 | 低 | 高 |
| 典型用法 | 文件操作密集、老工具链 | 开发测试、跑容器、要 systemd |
一句话记法:碰 Windows 文件多就 1 代,要完整 Linux 行为就 2 代。
从零搭一套多版本环境
下面这套流程走完,你就能在同机上开出 3 个 Ubuntu。命令都给你压到最短。
安装多发行版
一次装一个版本,装两个就够演示:
wsl --install -d Ubuntu-22.04 wsl --install -d Ubuntu-24.04验证 WSL 1 和 WSL 2 状态
装完跑wsl --list --verbose,看三列:NAME、STATE、VERSION。名字前面带*的是当前默认发行版。
NAME STATE VERSION * Ubuntu-22.04 Running 2 Ubuntu-24.04 Stopped 2版本转换的正确姿势
WSL 版本转换用--set-version,单个发行版单独转。比如把 22.04 降到 1 代(读写/mnt/c就快一截),24.04 留在 2 代跑容器:
wsl --set-version Ubuntu-22.04 1 wsl --set-default-version 2转换需要重启该发行版,转换期间别往里写数据。
用 export/import 克隆模板
想给不同项目复制同一套环境,导出成 tar,再按项目分别导入:
wsl --export Ubuntu-22.04 base.tar wsl --import proj-a C:\wsl\proj-a base.tar --version 2 wsl --import proj-b C:\wsl\proj-b base.tar --version 1导入时用--version直接指定目标代次,省得再转一次。想看命令背后的实现,仓库里有 wsl.exe 说明。
给每个版本划清边界
版本多起来后,真正让你省心的是“边界”——谁用多少资源、数据放哪、怎么互不污染。
资源边界,交给.wslconfig。文件放在用户目录,[wsl2]段管所有 2 代发行版,单独一段可以按发行版名再调:
[wsl2] memory=4GB processors=2 localhostForwarding=true [ubuntu-22.04] memory=2GB改完wsl --shutdown生效。给轻量的 22.04 压到 2GB,把内存让给 24.04,同机就不挤了。
项目级隔离,靠镜像不靠文件夹。每个项目一个独立发行版(上一步的proj-a、proj-b),系统包、环境变量各归各的,升级 A 不会连累 B。
跨环境同步,走共享盘 + 软链。三个发行版都能看见/mnt/c,把它当公共交换区:
ln -s /mnt/c/wsl/shared ~/shared-workspace需要写性能的地方(比如node_modules)留在/home,别跨到/mnt/c。
避坑与排错速查
| 现象 | 大概率原因 | 处理 |
|---|---|---|
版本转换报0x80070057 | 磁盘写满 | 清临时文件和旧镜像,腾出空间再转 |
| 启动超过 30 秒 | 2 代内存/核数给太多 | 调小.wslconfig里的memory、processors |
| 联网不通 | 虚拟网卡状态残留 | wsl --shutdown后重进 |
/mnt/c权限报错、杀毒扫盘卡 | Windows 侧干扰 | 项目挪到/home,给杀软放行 WSL 目录 |
再补三条维护习惯:
- 镜像放SSD,2 代冷启动差别明显。
- 内存按实际占用给,别一上来就拉满。
- 每季度
wsl --unregister <name>清掉废弃发行版,释放磁盘。
把工具链接进来
VS Code:按发行版切换开发环境
装好 WSL 后,VS Code 里Ctrl+Shift+P打开命令面板,搜WSL,选WSL: Connect to WSL using Distro...,再挑目标发行版,编辑器直接连进对应那套环境,不用切来切去。
Docker:让 2 代发行版当后端
Docker Desktop 的引擎指向 WSL 2,容器就跑在你选的那个发行版里。给 24.04 单独开一套 Docker,跑新镜像;22.04 留给稳定依赖,互不打架。
写在最后
三句话带走:
- 按负载选代次——文件密集走 1 代,容器和开发走 2 代,别一刀切。
- 一项目一镜像——
wsl --import拆开,升级谁都不连累。 - 定期清理——废弃发行版
--unregister掉,磁盘不膨胀。
现在就wsl --install第二个发行版,把手头的混装环境拆成 3 套干净的。
【免费下载链接】WSLWindows Subsystem for Linux项目地址: https://gitcode.com/GitHub_Trending/ws/WSL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考