WSL2 虚拟机

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) 的方式:

  1. 提取 Rootfs: 从 ISO 中提取出 Linux 的根文件系统(通常是 install.tar.gz 或从现有系统导出)。
  2. 执行导入:

    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 -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
    1. 修改端口(避免与 Windows 冲突):sudo nano /etc/ssh/sshd_config (改成 2222)
    2. 启动服务:sudo service ssh start
  • 远程桌面 (GUI):
    • WSLg (原生): Windows 11 默认支持,直接运行 geditxterm 窗口会弹出。
    • RDP 方式: 安装 xrdp,然后使用 Windows 的“远程桌面连接” (MSTSC) 连接 localhost:3389

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 任务计划程序

  1. 编写一个简单的 VBS 脚本(防止弹出黑色窗口),保存为 wsl_start.vbs

    VBScript

    Set shell = CreateObject("WScript.Shell")
    shell.Run "wsl -d <YourDistroName> -u root service ssh start", 0
    
  2. 任务计划程序:
    • 创建任务 -> 触发器:登录时
    • 操作:启动程序 -> 程序:wscript.exe -> 参数:"C:\路径\to\wsl_start.vbs"
    • 设置:取消勾选“只有在电源连接时启动”。

这样,系统开机登录后,你的 WSL 服务(如 SSH、Docker 等)就会在后台静默运行了。