WSL 这几年几乎成了 Windows 开发者必装的环境:一个命令把 Ubuntu 拉起来,终端里直接跑 Linux 工具链,不用再折腾双系统。但反过来问一句——如果主力机是 Linux,偶尔又必须开一个 Windows 环境,该怎么搭?于是就有了标题里那个反向梗:只听过 WSL,那有没有“LSW”?严格说,LSW 并不是一个官方项目,更像是对“Linux 系统里跑 Windows 虚拟机”这个需求的反向表达。下面这篇实操文章,就按这个反向思路拆一遍:从方案选型、KVM/QEMU 搭建、Windows 安装、virtio 驱动、性能调优到常见问题排查,尽量让一台纯 Linux 机器能稳定跑起 Windows 虚拟机。
1. WSL 很流行,为什么我们还要在 Linux 里搭 Windows
1.1 WSL 解决了什么,它的适用边界在哪
WSL 的本质是 Windows 提供的兼容层加轻量虚拟机,让 Linux 二进制可以运行在 Windows 上。它最值钱的地方不是“虚拟机多快”,而是把开发链路打通了:
- 不需要重启切换系统;
- 不需要为 Linux 单独分磁盘;
- 终端、编辑器、容器工具都能直接与 Windows 文件系统交互。
但 WSL 的使用方向是“以 Windows 为主机,Linux 为客人”。很多人在实际工作中会遇到完全相反的情况:服务器是 Linux 的,开发机是 Linux 的,甚至整个公司的基础设施都以 Linux 为主,可某个场景又必须用到 Windows 软件或 Windows 系统环境。
这时候需要的才是标题说的反向方案:在 Linux 宿主机上创建一个 Windows 虚拟机。
这个反向需求听起来小众,实际出现频率不低。比如:
- Linux 环境里需要测试浏览器兼容性,要 Windows 版 Chrome 或 Edge;
- 开发网页或桌面客户端,需要验证 Windows 下的表现;
- 需要运行只能在 Windows 上安装的国产办公软件、网银控件、企业客户端;
- 测试 Windows Server 镜像、组策略、IIS 等系统功能;
- 桌面 Linux 用户偶尔要处理一个
.exe安装包或 Windows 专用工具。
这些问题都可以靠虚拟机解决,但很多刚接触的人会陷入 WSL 的惯性思维,觉得“在 Linux 里装 Windows”也该有一个一键命令。实际上,Linux 生态下没有与 WSL 完全对等的官方方案,更多是组合拳。
1.2 Linux 用户搭 Windows 虚拟机时,最大的误区是什么
我见到的问题里,第一个误区是“随便用 VirtualBox 装一下就行”。VirtualBox 当然可以用,但如果你的 Linux 发行版已经支持 KVM,性能差距会非常明显。KVM 加 QEMU 的方案能让 Windows 虚拟机接近原生运行,而 VirtualBox 在部分场景下 CPU 和磁盘开销偏大。
第二个误区是“下载一个 Windows ISO,直接装就行”。Windows 安装镜像本身没问题,但如果虚拟机里用的是半虚拟化设备,安装阶段就会面临一个经典问题:Windows 找不到硬盘。因为 Windows 默认不识别 virtio 磁盘,必须额外加载 virtio-win 驱动。很多人卡在这一步,并不是因为 KVM 装错了,而是少准备了一个驱动 ISO。
第三个误区是“既然标题叫 LSW,那是不是也有一套简单的发行版方案”。这里先说明白:将 WSL 字母反过来只是玩梗,不存在一个叫 LSW 的发行版或一键脚本。可落地的做法,仍然是成熟的虚拟化工具链。
认清这些误区之后,再进入实操会比较顺。下面按我自己推荐的路线走:优先 KVM/QEMU,同时保留 VirtualBox 作为替代方案。
2. 先别急着敲命令,Linux 上跑 Windows 的路线要分清
2.1 为什么没有和 WSL 对等的“官方反向方案”
WSL 之所以便利,是因为 Windows 与 Linux 之间做了深度的内核兼容层和文件系统桥接。微软有动机让 Windows 成为更好的开发主机,所以官方愿意投入。
Linux 这一侧没有同等动力去给 Windows 做官方兼容层。Linux 世界的哲学是开放、透明、可定制,针对“运行 Windows 软件”这件事,社区选择了很多不同路线:完整虚拟机、兼容层、远程桌面客户端、容器方案。每条路适用场景不一样,不存在一个命令覆盖全部需求。
所以谈到在 Linux 上跑 Windows,不是去找到一个叫“LSW”的神器,而是根据你的需求选方案。
2.2 主流方案与适用场景
目前 Linux 宿主机上获得 Windows 环境,主要有四条路线。
路线 A:KVM/QEMU 完整虚拟化。可选的图形管理工具是 virt-manager,命令行工具是 virsh、virt-install。这套方案的优点是性能接近原生、支持嵌套虚拟化、支持 PCIe 设备透传、适合桌面和服务器两种场景。缺点是配置项多,Windows 的 virtio 驱动要单独准备。
路线 B:VirtualBox 虚拟机。优点是对新手友好,图形界面直观,USB 设备和共享文件夹配置简单。缺点是部分场景性能不如 KVM,长时间高负载运行时资源占用偏高。如果宿主机是不支持 KVM 的云服务器,或者你只是临时用一次,VirtualBox 也是合理选择。
路线 C:QEMU 用户态模拟。适合跨 CPU 架构运行系统,比如 x86 机器运行 ARM 版系统,或者 ARM 机器运行 x86 版 Windows。但它慢得多,日常桌面用途很少选。
路线 D:Wine、CrossOver 等兼容层。它们不是虚拟机,而是在 Linux 上直接翻译 Windows API 调用。优点是开销低、启动快,不需要 Windows 授权;缺点是不兼容所有软件,遇到驱动、注册表、特殊系统服务就很容易出问题。
四类方案不是替代关系,而是分层关系。如果你追求的是稳定、完整、接近原生体验,路线 A 是核心。下面的篇幅重点给 KVM/QEMU 方案。
2.3 选型速查表
| 使用场景 | 推荐方案 | 原因 |
|---|---|---|
| 桌面 Linux 用户偶尔跑 Windows 软件 | VirtualBox 或 virt-manager | 安装简单,GUI 直观 |
| 服务器 Linux 批量创建 Windows 虚拟机 | KVM/QEMU + libvirt | 性能好,支持命令行,适合脚本编排 |
| 测试 Windows 服务器系统或内核特性 | KVM/QEMU | 支持嵌套虚拟化,系统行为更真实 |
| 只是运行某个单文件 Windows 软件 | 先试 Wine | 无需安装完整系统,开销低 |
| ARM 开发板或 Mac 上跑 x86 Windows | QEMU 用户态模拟,但要接受慢 | 硬件架构不同,不能直通 |
3. KVM/QEMU 搭建:从检查 CPU 到装好 Windows
3.1 前置条件:先确认 CPU 和内核支持
KVM 依赖 CPU 的硬件虚拟化扩展。Intel CPU 需要 VMX,AMD CPU 需要 SVM。执行下面的命令,如果输出数字大于 0,说明硬件支持。
egrep -c '(vmx|svm)' /proc/cpuinfo再确认内核模块是否加载:
lsmod | grep kvm正常会看到类似kvm_intel或kvm_amd的模块。如果看不到,先确认 BIOS/UEFI 里的虚拟化开关是否打开。笔记本上这个选项很容易被厂商默认关闭,名称可能是 Intel Virtualization Technology、SVM Mode 或 VT-x。
然后检查当前用户是否有权限访问 KVM 设备。
ls -l /dev/kvm如果你的发行版默认没有创建/dev/kvm,通常是因为kvm模块没加载,或者需要重启。这里不要急着改权限,先按顺序确认:CPU 虚拟化开关、内核模块、设备节点。
3.2 安装虚拟化组件
不同发行版包名略有不同,但核心组件都一样。Debian/Ubuntu 系可以这样装:
sudo apt update sudo apt install qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients virtinst virt-managerCentOS/RHEL/Fedora 系:
sudo dnf install @virtualization virt-manager安装完成后,把当前用户加入 libvirt 用户组,否则普通用户无法使用 virt-manager 和 virsh。
sudo usermod -aG libvirt $USER重新登录或者执行newgrp libvirt让组权限生效。
virt-manager是图形管理前端,如果你在无桌面的服务器上操作,可以只用命令行工具。下一步测试 libvirt 服务是否正常:
sudo systemctl status libvirtd通常安装后服务会自动启动。如果发行版默认关闭 autostart,需要手动启用:
sudo systemctl enable --now libvirtd3.3 准备 Windows 镜像与 virtio 驱动 ISO
这一步不要省,直接决定你能否顺利安装。
Windows 镜像从微软官方渠道下载,选择你需要的版本和语言。另一份必备文件是 virtio-win 驱动 ISO,它包含 Windows 安装时需要的磁盘驱动、网络驱动、显卡驱动、QEMU Guest Agent 等。常见的获取路径是 Fedora 项目维护的 virtio-win 镜像仓库。
也可以检查你安装的 qemu-utils 是否带virtio-win相关包。不同发行版打包习惯不一样。如果没有现成包,就先下载官方发布的 virtio-win ISO 文件。
把 Windows ISO 和 virtio-win ISO 放到你能记住的目录,比如/home/你的用户名/iso/。路径中尽量不要出现空格和中文。
3.4 创建 Windows 虚拟机并完成安装
我建议先创建磁盘镜像,再用 virt-install 启动安装。使用 qcow2 格式,原因后面单独讲。
qemu-img create -f qcow2 /home/你的用户名/vm/win11.qcow2 60G下面是一个最小可用的 virt-install 示例,请根据你的 CPU 核数和内存调整:
virt-install \ --name win11 \ --memory 4096 \ --vcpus 4 \ --disk path=/home/你的用户名/vm/win11.qcow2,format=qcow2,bus=virtio \ --cdrom /home/你的用户名/iso/Win11.iso \ --disk path=/home/你的用户名/iso/virtio-win.iso,device=cdrom \ --os-variant win11 \ --network network=default,model=virtio \ --graphics spice \ --video qxl \ --boot uefi如果不确定 Windows 版本对应的 os-variant,可以先执行:
osinfo-query os | grep -i windows列出的名称里会有 win10、win11、win2k22 等条目,选择一个最接近的。
启动后打开 virt-manager,找到名为 win11 的虚拟机,双击进入图形界面。Windows 安装程序会正常启动。如果你没有桌面环境,也可以把--graphics spice换成 VNC,再用 VNC 客户端连过去。但我更推荐有桌面时直接用 virt-manager,因为它对剪贴板、鼠标捕获、USB 设备处理更顺手。
3.5 安装时请手动加载 virtio 驱动
Windows 安装程序进入磁盘选择页面时,大概率会发现“找不到任何驱动器”。这不是磁盘坏了,而是 Windows 默认不认识 virtio-blk 总线上的磁盘。
点击“加载驱动程序”,浏览到 virtio-win ISO。驱动目录层级通常为:
virtio-win / amd64 / w11根据你的 Windows 版本选择对应目录。如果列表里有多个驱动,优先选择Red Hat VirtIO SCSI pass-through controller或VirtIO Balloon之外的磁盘控制器驱动。加载成功后,60G 的未分配磁盘就会显示出来,可以正常分区安装了。
这一步是 Windows 虚拟机安装中最容易卡住的地方。不要先去调虚拟机参数,先确认驱动加载是否正确。
3.6 安装完成后的驱动与工具链
Windows 装好进入桌面后,第一件事不是优化系统,而是把 virtio 驱动补全。重新打开 virtio-win ISO,运行里面的virtio-win-guest-tools.exe,这个安装包会统一安装网卡、显卡、QEMU Guest Agent、剪贴板共享需要的服务。
装完后重启虚拟机,再检查设备管理器。如果还有带黄色感叹号的设备,一般是缺少对应的 Windows 驱动。这时候再回到 virtio-win 目录里按设备类型手动安装。
到这里,一台最小的 Windows 虚拟机已经能用了。网络通过 libvirt 的 NAT 网络默认可用,虚拟机可以访问外部网络,宿主机也可以和虚拟机互通。下一步处理性能和日常使用体验。
4. 稳定性与性能调优:别只盯着开机页面好看
4.1 CPU 和内存:先判断业务场景再给资源
Windows 虚拟机开机后桌面很流畅,不代表你在里面跑 Visual Studio、SQL Server 或者大型软件也流畅。虚拟机的资源是宿主机的资源,给太多会拖慢宿主机本身,给太少又会频繁卡顿。
我的建议是:
- 日常桌面验证:给 2 到 4 个 vCPU,内存 4G 到 8G。
- 跑编译、打包、数据库测试:给 4 到 8 个 vCPU,内存 8G 到 16G。
- 只在虚拟机里跑一个轻量客户端:2 个 vCPU,内存 2G 可能也够。
但要注意,vCPU 不是越多越好。如果宿主机的物理核只有 8 核,你直接给 Windows 分 8 个 vCPU,同时宿主机还跑着大量服务,结果就是两边都卡,反而比少分几个更慢。
判断是否“够用”的标准,不是查看系统属性里显示的内存大小,而是看实际任务是否达到预期速度,以及宿主机负载是否稳定。
4.2 磁盘到底用 raw 还是 qcow2
关于磁盘格式,我先给结论:默认优先使用 qcow2。
qcow2 的优点是可以按需占用宿主机磁盘空间。创建时写 60G,实际可能只占 10G。它支持快照,可以在 Windows 更新前打一个快照,出问题后秒回滚。对绝大多数虚拟机使用场景,qcow2 带来的便利远大于理论上的性能损失。
raw 格式是原始镜像,性能上在少部分顺序读写场景更直接,磁盘占用却是立即分配。它不支持直接回滚快照(一般要用外部快照或用 QEMU 层),运维管理更不方便。
如果遇到很吃磁盘的批量任务,比如在 Windows 虚拟机上持续做文件复制或数据库压测,可以使用 raw 或预分配的 qcow2(创建时加-o preallocation=full让块预分配),减少运行时的磁盘动态扩展开销。普通场景直接 qcow2 就够了。
4.3 显示协议:SPICE、VNC、virt-viewer 怎么选
Windows 虚拟机的图形体验,很大程度取决于显示协议。
- VNC 是最通用的协议,兼容性最好,但鼠标操作和画面刷新不够流畅。
- SPICE 在 Linux guest 上表现优秀,Windows guest 下结合 virtio-win 的 QXL 驱动也能获得不错的体验。
- virt-viewer 客户端适合连接 SPICE 或 VNC,本地使用时常配合 USB 重定向。
如果你需要复制宿主机文件到 Windows,或者把 Windows 里的内容复制到宿主机,建议在 virt-manager 里开启剪贴板共享。但需要注意,剪贴板共享依赖 virtio-win 的 guest tools,如果驱动没装好或者服务没启动,共享会静默失败。
文件传输最稳的方法不是依赖剪贴板,而是使用 libvirt 的默认 NAT 网络,在 Windows 虚拟机里配置好 IP 后,通过 SMB 共享宿主机目录,或直接在 Windows 里访问宿主机的 SSH 服务。这种方法在任何情况下都可靠,不依赖驱动。
4.4 嵌套虚拟化和 Windows 内部功能的边界
如果你的 Linux 宿主机本身就是虚拟机,比如在 VMware 或云服务器里,那么想在里面再开 Windows 虚拟机,需要确认“嵌套虚拟化”是否开启。
KVM 场景下,宿主机 CPU 需要支持并将虚拟化指令透传给 Linux。如果是 VMware Workstation 或 vSphere,需要给这台 Linux 虚拟机开启“向客户机操作系统公开硬件辅助的虚拟化”。如果是云服务器,大部分默认关闭嵌套虚拟化,开通位置通常叫“嵌套虚拟化”或“CPU 模式”。
开启失败的现象是:KVM 模块加载失败,或者虚拟机启动时报kvm: entry failed, hardware error。
在 Linux 虚拟机内部再跑 Windows,不是不可以,但性能会打折扣。某些依赖 CPU 硬件虚拟化特性的 Windows 功能,比如 Windows 沙盒、WSL2 自身,可能会出现不正常或非常卡的情况。这点不要强求,嵌套三层虚拟化只适合测试和验证,不适合生产任务。
5. 常见问题排查:按顺序来,别先怀疑系统
5.1 虚拟机启动失败,主机资源没跑满但报错
先看错误信息。常见有几种:
KVM is not available:先确认/dev/kvm是否存在,再确认内核模块是否加载。Permission denied:检查当前用户是否在 libvirt 组,重新登录是否生效。failed to initialize KVM:大概率是嵌套虚拟化没有开启,或 BIOS 里 VT-x/SVM 被关闭。cannot access storage file:检查 qcow2 镜像路径是否写错,目录权限是否允许当前用户读写。
这些错误大部分和 Windows 本身无关,只要按“模块、设备、权限、路径”的顺序排查,都能定位。
5.2 Windows 安装程序找不到任何磁盘
这是刚才提到的最常见问题。先确认启动安装时,virtio-win ISO 是否已经作为第二张 CDROM 挂载。如果挂载了,加载驱动时选到 amd64 目录下的对应 Windows 版本。如果加载后仍然看不到磁盘,可以尝试加载vioscsi控制器驱动后再刷新一次。
不要为了绕开这个步骤,把磁盘 bus 改成 SATA 或 IDE。虽然改成 SATA 后 Windows 能直接识别磁盘,但这会丢掉 virtio 的磁盘性能,而且后续再加 virtio 设备时仍然会遇到驱动问题。一步到位用 virtio + 驱动 ISO 更合理。
5.3 虚拟机网络不通,先查 guest 还是宿主
Windows 安装时如果使用了默认的network=default,model=virtio,装完驱动后网络应该自动可用。如果网络不通,按这个顺序排查:
- 在 Windows 里查看网卡是否被禁用或驱动异常;
- 在宿主机执行
virsh net-list --all,确认 default 网络处于 active 状态; - 确认宿主机防火墙没有拦截 libvirt 的 DHCP 和 DNS 请求;
- 如果改了宿主机网段,记得重启 libvirt 网络。
一个容易忽略的地方是 Windows 防火墙。默认情况下,虚拟机可以访问外部网络,但宿主机想主动访问虚拟机里的服务,需要 Windows 侧允许对应端口。这不是虚拟机坏了,而是系统防火墙默认行为。
5.4 安装后桌面能打开,但整体很卡
先看资源占用,别盲目加 CPU。
- 在宿主机执行
top或free -h,确认是 CPU 满、内存不足,还是磁盘 I/O 过高。 - 如果内存不足,加内存比加 CPU 更有效。
- 如果磁盘 I/O 高,考虑改用预分配的磁盘镜像或把镜像放到 SSD 上。
- 如果鼠标和画面刷新卡,优先检查显卡驱动是否安装,而不是调整虚拟分辨率。
Windows 虚拟机的性能问题,多数不是单点因素,而是组合因素。稳妥的调优路线是:先保证 virtio 驱动完整,再检查磁盘位置,最后调 CPU 和内存参数。
5.5 guest agent 失联和关机异常
在 virt-manager 里点击“关机”时,如果 Windows 没有响应,很可能是因为 QEMU Guest Agent 没装好。重新安装 virtio-win guest tools,并在 Windows 服务里确认QEMU-GA服务状态为“自动”。
如果连 virtio-win 都已安装但关机仍然失败,可以改用 Windows 内部正常关机,再检查宿主机上虚拟机状态。
6. 什么时候值得在 Linux 里长期跑 Windows 虚拟机
6.1 适合这种方案的场景
最典型的是混合开发环境:Linux 写代码,偶尔开一台 Windows 虚拟机测试浏览器、客户端或者 Office 文档兼容性。这台虚拟机不需要一直开机,需要时用 virt-manager 启动,不需要时挂起或关停即可。
其次是 Windows Server 测试环境。你可以在 Linux 服务器上用 KVM 批量创建 Windows Server 虚拟机,用来测试装机脚本、IIS 配置、软件打包,测试完直接用快照回滚,比买一台物理 Windows 服务器便宜和灵活得多。
还有一个容易被忽略的场景:安全隔离。某些来历不明的 Windows 软件,双击之前先在虚拟机上跑一圈,至少能避免它直接动宿主机文件。虚拟机的快照功能在这里特别好用,安装前打快照,测试完直接恢复。
6.2 不建议硬上的场景
如果用途只是运行一个几 MB 的单文件 Windows 绿色软件,先试试 Wine,不值得为它维护一台完整 Windows 虚拟机。
如果宿主机内存小于 8G,也没有 SSD,那 Windows 虚拟机的体验会很差。4G 内存的 Linux 机器跑 Windows 10/11,光是系统本身就会吃紧,加上编译软件或浏览器,基本不可用。
如果是长期跑重型 Windows 软件,比如完整 Visual Studio、Adobe 全家桶或高性能游戏,虚拟机不是完全不能跑,但投入成本很高。专业需求优先考虑独立的 Windows 物理机或工作站,虚拟机只适合做临时测试和辅助用途。
6.3 我个人建议的最小验证顺序
如果你想第一次试,建议不要直接按生产标准配置。按照下面的顺序跑通一次,比看再多文章都有用:
- 先确认宿主机
/dev/kvm存在,使用 virt-manager 能新建虚拟机。 - 准备 Windows ISO 和 virtio-win ISO,创建一台 4G 内存、60G qcow2 磁盘的 Windows 11 或 Windows Server 虚拟机。
- 进入 Windows 安装程序,先不加载驱动,故意观察一下磁盘页面是否会“找不到磁盘”。这能帮你确认 virtio 驱动的必要性。
- 加载 virtio 驱动,完成安装,补装 guest tools。
- 测试三件事:虚拟机是否可以用 NAT 上网、宿主机能否访问虚拟机里的共享服务、快照能否正常创建和回滚。
这套流程走完,你就基本理解了 Linux 上承载 Windows 虚拟机时的几个关键卡点:KVM 依赖、virtio 驱动、镜像格式、网络模型、guest agent。之后再遇到标题里的“LSW”梗,也能清楚地告诉别人:这不是某个神器,而是 KVM/QEMU 加 virtio 驱动体系和日常运维经验的组合。
踩过几次坑以后,我发现很多问题并不是虚拟化工具不够强,而是前置环境没有检查干净,或者安装阶段少准备了 virtio 驱动。把这个环节补齐,Linux 上的 Windows 虚拟机并没有想象中那么难维护。