WSL 2(Windows Subsystem for Linux 2)与传统的虚拟机(如 VMware、VirtualBox)有着本质的区别。它不是在 Windows 之上运行一个笨重的模拟层,而是基于 Hyper-V 技术 的轻量级实用程序虚拟机。
0. WSL 2 技术原理简述
WSL 2 的核心是一个 微软调优的 Linux 内核。
- 轻量化: 它不使用硬件仿真,而是通过 9P 协议进行文件系统共享,并通过虚拟 GPU (vGPU) 技术直接访问硬件。
- 动态分配: 内存和 CPU 资源随需随取,并在 Linux 进程结束时将内存释放回宿主机。
- 冷启动极快: 通常在 1 秒内即可启动。
1. 如何用 ISO 包安装 WSL 2 虚拟机
注意: WSL 2 原生并不支持直接挂载 .iso 文件像传统 VM 那样“跑安装程序”。通常我们使用现有的发行版(Ubuntu, Debian)。
如果你执意要从 ISO 或特定的 Rootfs 安装,通常采用 导入 (Import) 的方式:
- 提取 Rootfs: 从 ISO 中提取出 Linux 的根文件系统(通常是
install.tar.gz或从现有系统导出)。 执行导入:
PowerShell
# 语法:wsl --import <虚拟机名称> <安装位置> <rootfs文件路径> wsl --import MyCustomLinux C:\WSL\MyCustomLinux D:\Downloads\ubuntu-rootfs.tar.gz
2. 虚拟机的启停、删除、备份、导入
这些是管理 WSL 的核心命令:
- 查看状态:
wsl -l -v - 停止 (关机): * 关闭特定实例:
wsl -t <Name>- 关闭整个 WSL 服务(所有虚拟机):
wsl --shutdown
- 关闭整个 WSL 服务(所有虚拟机):
- 启动: 直接在终端输入
wsl -d <Name>即可。 备份 (导出): ```powershell
wsl --export D:\Backup\my_backup.tar
- 恢复 (导入): 参考第 1 点的
--import命令。 注销/删除:
PowerShell
wsl --unregister <Name> # 注意:这会永久删除虚拟磁盘文件
3. 网络模式、远程终端与远程桌面
网络模式
默认情况下,WSL 2 使用 NAT 模式。如果需要宿主机与虚拟机在同一网段,可在 .wslconfig 中开启 Mirror (镜像模式)(需 Windows 11 22H2+):
在 %USERPROFILE%\.wslconfig 中添加:
Ini, TOML
[wsl2]
networkingMode=mirrored
远程操作
- 远程终端 (SSH): 1. 在 WSL 内安装:
sudo apt install openssh-server- 修改端口(避免与 Windows 冲突):
sudo nano /etc/ssh/sshd_config(改成 2222) - 启动服务:
sudo service ssh start
- 修改端口(避免与 Windows 冲突):
- 远程桌面 (GUI):
- WSLg (原生): Windows 11 默认支持,直接运行
gedit或xterm窗口会弹出。 - RDP 方式: 安装
xrdp,然后使用 Windows 的“远程桌面连接” (MSTSC) 连接localhost:3389。
- WSLg (原生): Windows 11 默认支持,直接运行
4. 高效利用 CPU、内存、显卡的高性能设置
在 Windows 用户目录下创建或编辑 .wslconfig 文件。
资源配额设置
Ini, TOML
[wsl2]
# 限制 CPU 核心数
processors=8
# 限制最大内存
memory=16GB
# 开启交换空间
swap=8GB
# 允许嵌套虚拟化
nestedVirtualization=true
GPU (显卡) 设置
WSL 2 支持 GPU 穿透(NVIDIA CUDA / DirectML)。
- 驱动: 只需要在 Windows 宿主机 安装最新的 NVIDIA 驱动,WSL 内部不需要安装显卡驱动。
- 工具: 在 WSL 内安装
nvidia-utils-xxx即可通过nvidia-smi查看显卡状态。
5. 无感随系统开机自动运行
WSL 默认只有在打开终端时才启动。若要实现“开机自启且无窗口”,可使用 Windows 任务计划程序:
编写一个简单的 VBS 脚本(防止弹出黑色窗口),保存为
wsl_start.vbs:VBScript
Set shell = CreateObject("WScript.Shell") shell.Run "wsl -d <YourDistroName> -u root service ssh start", 0- 任务计划程序:
- 创建任务 -> 触发器:登录时。
- 操作:启动程序 -> 程序:
wscript.exe-> 参数:"C:\路径\to\wsl_start.vbs"。 - 设置:取消勾选“只有在电源连接时启动”。
这样,系统开机登录后,你的 WSL 服务(如 SSH、Docker 等)就会在后台静默运行了。