平时我们听得最多的,是 Windows 上用 WSL 跑 Linux。工欲善其事,很多后端、运维同学已经习惯了在 Windows 里通过wsl --install快速启动一个 Ubuntu,然后敲 Linux 命令。反过来想,如果手头只有 Linux,却必须运行某款只有 Windows 版本的软件,该怎么办?本文就顺着这个思路,聊聊在 Linux 中运行 Windows 虚拟机这件事,并给你一套从检测虚拟化、创建 Windows 虚拟机到安装 virtio 驱动的完整操作流程。
为了方便理解,我先玩一个“反向缩写”:大家常说 WSL(Windows Subsystem for Linux),那不妨把“在 Linux 里跑 Windows 子系统”叫做《LSW》。不过必须先说明,LSW 并不是官方发行版或某个开源项目,它只是一种思路上的映射。真正落地使用的,是 KVM/QEMU、VirtualBox 这类虚拟化方案。下面我会以目前 Linux 平台性能最好、企业里最常见的 KVM/QEMU 路径为主线展开。
很多同学看到“Windows 虚拟化”会误以为只有 VMware Workstation 或 VirtualBox 能做,其实在 Linux 服务器上,KVM 才是更贴近生产环境的选择。读完本文,你可以掌握硬件虚拟化检测、virt-manager 图形创建、virt-install 命令行创建、Windows 系统安装、virtio 半虚拟化驱动、剪贴板共享、文件传输和性能调优等一整套实战技能。
1. 到底什么是“LSW”:先搞清楚方向
1.1 WSL 和 Windows 虚拟机是不同的东西
WSL 是微软在 Windows 上提供的 Linux 兼容环境。WSL 1 通过系统调用翻译层模拟 Linux 接口,WSL 2 则在一个轻量级虚拟机中运行真正的 Linux 内核。虽然 WSL 2 底层也用了虚拟化技术,但它面向的是“Windows 用户想在本地敲 Linux 命令、跑 Linux 服务”的场景,不是让你在一个独立的 Linux 系统里完整启动一台 Windows。
反过来,如果我们在 Linux 主机上安装 KVM/QEMU,创建一台完整的 Windows 虚拟机,那 Windows 会认为自己运行在一台真实电脑里。它有自己的 CPU、内存、磁盘、网卡、显卡,可以安装任意 Windows 应用,也能通过远程桌面连接使用。
两边的使用边界要分清:
| 场景 | WSL | KVM + Windows 虚拟机 |
|---|---|---|
| 宿主机 | Windows | Linux |
| 客户机 | Linux(通过微软子系统) | Windows |
| 启动方式 | wsl命令自动管理 | virsh/virt-manager管理 |
| 系统完整性 | 轻量 Linux 环境 | 完整 Windows 系统 |
| 是否适合 GUI 软件 | 一般,更适合命令行工具 | 适合商业软件、浏览器类 GUI 应用 |
| 性能损耗 | 较低 | 接近原生,但需要合理配置 |
如果你只是偶尔需要在 Linux 命令行里编译代码,不需要折腾 Windows 虚拟机。可当需求变成“必须用 Windows 版网银插件”“必须跑某个 Windows 专用工业软件”“需要测试 IE 兼容页面”时,虚拟机就是绕不开的方案。
1.2 Linux 上运行 Windows 的主流方案对比
Linux 平台上常见的选择有 KVM/QEMU、VirtualBox、VMware Workstation Pro for Linux,以及 Xen 等虚拟化平台。下面从性能和易用性两个角度对比:
| 方案 | 虚拟化原理 | 易用性 | 性能表现 | 适用场景 |
|---|---|---|---|---|
| KVM/QEMU | Linux 内核模块 + QEMU 用户态设备模拟 | 中等,virt-manager 后较友好 | 很高 | 服务器虚拟化、个人桌面虚拟化 |
| VirtualBox | 内核模块 + 用户态虚拟机 | 高 | 一般 | 个人用户、跨平台虚拟机迁移 |
| VMware Workstation | 闭源产品 + 内核模块 | 高 | 较高 | 桌面开发、测试复杂系统 |
| Xen | 裸金属 Hypervisor | 中等 | 很高 | 企业级虚拟化平台,较少用于个人桌面 |
对于一块普通 Linux 桌面电脑或一台 Ubuntu Server,我的建议是优先尝试 KVM/QEMU。KVM 是 Linux 内核自带的虚拟化模块,你不需要额外购买商业授权,也不需要重启到另一套 Hypervisor。virt-manager 提供图形界面之后,创建 Windows 虚拟机的门槛已经大大降低。
我在生产环境见过不少团队用 KVM 跑 Windows Server,用 VirtIO 驱动后网络和磁盘性能都很稳。如果你的 Linux 只是临时测试机,VirtualBox 也可以。只是遇到性能瓶颈时,别急着怀疑 Windows 本身,先检查是否用上了半虚拟化驱动。
1.3 为什么首选 KVM/QEMU 来跑 Windows
KVM 全称 Kernel-based Virtual Machine,它把 Linux 内核变成了一个 Type-1 虚拟化层。QEMU 负责模拟 CPU、内存、磁盘、网卡等设备,二者配合后,Windows 客户机能直接执行 CPU 指令,性能损耗远小于纯软件模拟。
相比 VirtualBox,KVM/QEMU 在 Linux 服务器上更符合运维习惯。虚拟机配置文件统一放在/etc/libvirt/qemu/,可以通过virsh做开机自启、快照、热迁移。生产服务器的统一纳管也会优先选 libvirt 体系。
但 KVM 对新人最大的障碍是驱动。Windows 默认不识别 VirtIO 磁盘、网卡,所以安装时需要额外提供一个 virtio-win 驱动光盘。这个问题下面会专门讲,耐心看下去并不复杂。
2. 环境准备与虚拟化检测
2.1 硬件与系统要求
要舒服地跑 Windows 虚拟机,硬件上至少要确认三件事:
- CPU 支持并开启硬件虚拟化。Intel 平台对应 VT-x,AMD 平台对应 SVM。
- 内存要留给宿主机一部分,不能全部给虚拟机。Windows 10/11 建议至少 4GB,推荐 8GB。
- 磁盘空间按需准备。Windows 10 建议预留至少 60GB,Windows Server 可以适当减小。
在 Linux 里先查看 CPU 虚拟化是否开启:
grep -E -o '(vmx|svm)' /proc/cpuinfo | sort -u如果输出包含vmx,表示 Intel 虚拟化已开启;如果输出svm,表示 AMD 虚拟化已开启。如果没有输出,可能是 BIOS/UEFI 中关闭了虚拟化,也可能是当前运行在云主机上但没有透传 VT 标志位。
还要看/dev/kvm是否存在:
ls -l /dev/kvm/dev/kvm是宿主机访问 KVM 能力的关键设备节点。如果不存在,大概率是没安装 KVM 软件,或内核模块没加载。
2.2 安装 KVM 相关软件
这里以 Ubuntu/Debian 系为例。先更新软件源,然后安装 QEMU、libvirt、virt-manager 和 virtinst:
sudo apt update sudo apt install -y qemu-system-x86 libvirt-daemon-system libvirt-clients virt-manager virtinst qemu-utils安装完成后启动 libvirtd 服务,并设置为开机自启:
sudo systemctl enable --now libvirtd sudo systemctl status libvirtd --no-pager如果是 CentOS/RHEL/Rocky Linux 系统,则用 dnf 命令:
sudo dnf install -y qemu-kvm libvirt virt-install virt-manager sudo systemctl enable --now libvirtd sudo systemctl status libvirtd --no-pager安装后建议把当前用户加入libvirt和kvm用户组,避免每次操作都加 sudo:
sudo usermod -aG libvirt,kvm $USER执行完需要重新登录终端或重启桌面会话,组权限才会生效。
2.3 验证 KVM 是否可用
在 Ubuntu 上可以运行 virt-host-validate:
virt-host-validate这个命令会检查 CPU、IOMMU、KVM 模块、cgroup 等状态。绝大多数PASS说明环境正常。若有WARN一般是某些非关键能力没有开启,不影响普通虚拟机运行。
再检查内核模块:
lsmod | grep kvm如果输出类似kvm_intel 122880 0,一行就有kvm_intel或kvm_amd,还有kvm,说明模块已经加载。此时在终端中运行:
virsh version能正常输出版本信息,就说明 libvirt 服务可以连接了。到这里,环境准备基本完成,接下来可以创建第一台 Windows 虚拟机。
3. 快速创建 Windows 虚拟机:GUI 与 CLI 两条路线
3.1 准备 Windows 安装镜像与 virtio 驱动
创建 Windows 虚拟机前,先准备两个镜像:
- Windows 安装 ISO,例如从正规渠道下载的 Windows 10/11 或 Windows Server 评估版镜像。
- virtio-win ISO,这是 KVM 环境给 Windows 使用的半虚拟化驱动镜像。
virtio-win 镜像一般可以在 Fedora 官方仓库、红帽相关仓库中获得,也可以从 virtio-win 项目页面下载。注意版本要与虚拟机系统架构匹配,x86_64 的 Windows 就下载对应的 x86_64 版本。
准备好后,把 ISO 放在固定目录,例如/opt/iso/。权限要确保运行 libvirt 的用户能读取,否则启动虚拟机时会出现找不到镜像的错误。
sudo mkdir -p /opt/iso sudo chmod 755 /opt/iso3.2 使用 virt-manager 图形界面创建
virt-manager 是 Linux 桌面上管理虚拟机的图形工具,对于新手最直观。打开方式:
virt-manager如果是在远程 Linux 服务器上操作,可以通过 SSH X11 转发,但体验一般;更推荐本机桌面环境运行 virt-manager,然后远程连接宿主机 libvirt,或者直接用 virt-install 命令行。
图形界面创建流程:
- 点击左上角“新建虚拟机”按钮。
- 选择“本地安装介质(ISO 镜像或光驱)”。
- 点击“浏览”选择 Windows 安装 ISO。
- 系统类型如果无法自动识别,可以先选择“Generic”或已知的 Windows 类型。
- 设置 CPU 和内存。Windows 10 建议 4 核 8GB 左右,Windows 11 建议更高。
- 为虚拟机创建磁盘镜像,默认 qcow2 格式,磁盘大小建议至少 40GB。
- 在自定义配置阶段,把磁盘总线改成 VirtIO,网卡型号也改成 VirtIO。
- 接着添加第二张光驱,把 virtio-win ISO 挂载进去。
- 确认配置后启动虚拟机。
启动后 Windows 安装程序会加载。如果之前把磁盘设置为 VirtIO,Windows 默认看不到磁盘。此时不要慌,Windows 安装界面选择“加载驱动程序”,定位到 virtio-win 光驱下的vioscsi或viostor驱动目录,选择对应的系统目录即可。
光标、键盘、显示方面,virt-manager 默认使用 SPICE 协议,安装后还需要安装 SPICE Guest Tools,才能获得更好的分辨率和剪贴板共享。
3.3 使用 virt-install 命令行创建 Windows 虚拟机
服务器上没有图形界面时,virt-install 是更可靠的选择。先查询 libvirt 支持的操作系统类型:
osinfo-query os | grep -i windows输出会列出如win10、win11、win2k19等名称,不同版本名称略有差异。确认后创建一个 Windows 10/Server 虚拟机,示例命令如下:
sudo virt-install \ --name win10 \ --memory 8192 \ --vcpus 4 \ --cpu host-passthrough \ --disk path=/var/lib/libvirt/images/win10.qcow2,size=60,format=qcow2,bus=virtio,cache=writeback \ --disk path=/opt/iso/windows.iso,device=cdrom,bus=sata \ --disk path=/opt/iso/virtio-win.iso,device=cdrom,bus=sata \ --os-variant win10 \ --network network=default,model=virtio \ --graphics spice \ --video virtio \ --boot uefi参数含义:
| 参数 | 作用 |
|---|---|
--name win10 | 虚拟机名称,用于 virsh 管理 |
--memory 8192 | 分配 8GB 内存 |
--vcpus 4 | 分配 4 个 vCPU |
--cpu host-passthrough | 让虚拟 CPU 透传宿主机 CPU 特性,Windows 下性能更好 |
--disk size=60 | 自动创建 60GB 的 qcow2 磁盘镜像 |
bus=virtio | 磁盘总线使用 VirtIO |
device=cdrom | 将 ISO 作为光驱设备挂载 |
--os-variant win10 | 告诉 libvirt Windows 10 的特殊配置 |
model=virtio | 网卡使用 VirtIO 虚拟网卡 |
--graphics spice | 启用 SPICE 显示协议 |
--video virtio | 显卡使用 VirtIO GPU |
--boot uefi | 使用 UEFI 引导,安装 Win10/11 推荐 |
执行过程中会自动打开 VNC 或 SPICE 客户端连接窗口。如果没有图形环境,建议只安装完再使用远程桌面。执行后可用以下命令确认状态:
sudo virsh list --all输出里应该有win10虚拟机,状态为running或shut off。如果创建后没有图形窗口,可以用:
sudo virsh start win10 sudo virt-viewer --connect qemu:///system win10来手动打开虚拟机画面。
4. 安装系统与半虚拟化驱动
4.1 为什么 Windows 必须安装 virtio 驱动
默认情况下,QEMU 可以模拟 IDE 磁盘和 e1000 网卡,Windows 可以免驱识别,但性能远不如 VirtIO。VirtIO 属于半虚拟化设备,需要客户机里安装驱动后,虚拟机和 QEMU 之间才能通过共享内存队列高效通信。
在 KVM 环境里,没有 VirtIO 驱动的 Windows 虚拟机就像装了机械硬盘、百兆网卡,跑起来卡顿明显。因此创建虚拟机时,即使安装阶段麻烦一点,我也建议优先把磁盘和网卡设置为 VirtIO。
virtio-win 驱动镜像中主要包含以下几类驱动:
viostor:VirtIO 块设备驱动,对应虚拟磁盘。vioscsi:VirtIO SCSI 控制器驱动。NetKVM:VirtIO 网络驱动。pvpanic:崩溃上报驱动。qxl、virtio-gpu:显卡驱动。balloon:内存气球驱动。
4.2 在 Windows 安装过程中加载磁盘驱动
如果你把磁盘总线设置成了 VirtIO,Windows 安装程序通常会显示“找不到任何驱动器”。这时需要先给 Windows 加载 vioscsi/viostor 驱动。
在 Windows 安装界面点击“加载驱动程序” → “浏览”,然后选择 virtio-win 光驱。驱动目录在不同版本中略有差异,但结构一般包含amd64目录。选择viostor对应 Windows 版本的驱动文件夹,点击确定。如果路径正确,很快就能列出可用的磁盘。
加载成功后,Windows 安装程序会看到刚才创建的 qcow2 磁盘。这时再分区、格式化、继续安装。
我之前第一次安装时把 virtio-win 光驱放在了另一台远程服务器上,没留意权限,结果点“浏览”时看不到安装 ISO,也没法加载驱动。后来把 ISO 复制到本机/var/lib/libvirt/images/下并设置好权限,问题才解决。遇到“找不到驱动程序”时,先检查光驱是否挂载成功,再检查驱动目录是否选择正确。
4.3 安装 virtio 驱动和 SPICE Guest Tools
Windows 安装完成后,第一件事不是装浏览器,而是打开 virtio-win 光驱,运行里面的驱动安装程序。具体文件名称随版本变化,常见的有virtio-win-guest-tools.exe,它会把 VirtIO 网卡、磁盘、内存气球、显卡等驱动一并安装。
如果是 Win10/11,也可以直接在设备管理器中找到带感叹号的设备,右键更新驱动,指向 virtio-win 光驱。手动更新适合只维护少量虚拟机,批量部署时建议直接运行套装工具,效率更高。
接下来安装 SPICE Guest Tools,用于增强虚拟机的显示体验。安装后:
- 分辨率可以动态适应 virt-manager 窗口。
- 宿主机和虚拟机之间可以直接复制文本。
- 剪贴板里的大文件也能直接拖拽。
安装完成后重启 Windows,用dxdiag检查显卡名称,正常情况下会显示为 VirtIO GPU 或 QXL 显卡,不再是“Microsoft 基本显示适配器”。
4.4 Windows 11 的 TPM 与安全启动提醒
如果你创建的是 Windows 11 虚拟机,还有一个额外门槛:Windows 11 安装时默认要求 TPM 2.0 和安全启动。在 Linux KVM 环境中,可以通过 libvirt 为虚拟机添加软件模拟 TPM 设备。
宿主机安装 swtpm:
sudo apt install -y swtpm然后在虚拟机 XML 配置的<devices>节点里添加 TPM 设备片段:
<tpm model='tpm-crb'> <backend type='emulator' version='2.0'/> </tpm>添加后重启虚拟机,Windows 11 的安装前检测会更容易通过。如果使用 UEFI 引导,还需要在 virt-manager 的“引导选项”中启用安全启动。当然,Windows 11 不同版本要求会有变化,如果你只是学习测试,也可以选择 Windows 10 或 Windows Server,减少折腾成本。
5. 性能调优与体验优化
5.1 CPU 与内存配置策略
vCPU 的数量并不是越多越好。虚拟机的 CPU 调度本身有开销,如果 Windows 虚拟机只需要跑办公软件,分配 4 核已经足够。如果编译大型项目或运行数据库,可以逐步增加到 8 核,但要观察宿主机负载。
内存方面,Windows 10/11 建议至少 4GB,日常流畅 8GB。如果宿主机内存只有 16GB,给虚拟机分配 12GB 会导致宿主机本身很紧张,Swamp 频繁时会明显卡顿。生产环境建议宿主机预留不少于 4GB 内存。
使用host-passthroughCPU 模式可以最大化兼容性,Windows 的沙箱、虚拟化应用也能识别出更多 CPU 指令。缺点是虚拟机跨物理机迁移时,如果两边的 CPU 型号不同,容易热迁移失败。如果你不需要迁移,就放心用。
5.2 磁盘镜像格式与缓存策略
KVM 环境最常用的磁盘格式是qcow2。它支持稀疏文件、快照、压缩和加密。创建一个 60GB 的 qcow2 文件,刚开始只占用很小空间,随着写入增多逐渐增大。相对的,raw格式更接近裸设备,性能往往略好,但不支持快照和精简分配。
命令行创建时可以这样选择:
- 日常使用:
qcow2,兼顾空间和快照。 - 高吞吐性能:
raw或使用 LVM 逻辑卷直连。 - 机械硬盘宿主机:
cache=writethrough更安全,但速度慢。 - SSD 宿主机:
cache=writeback或保留默认策略,整体性能更好。
如果你的磁盘性能较差,安装 Windows 时可能非常慢。建议优先把系统装在 SSD,虚拟机镜像也放到 SSD 上。
5.3 网络模式优化
Linux 宿主机上 Windows 虚拟机最常见的网络模式是defaultNAT 网络。虚拟机可以访问外网,宿主机也可以访问虚拟机,但外部设备无法直接连接虚拟机。
如果 Windows 虚拟机需要对外提供服务,可以创建桥接网络。比如直接把 Linux 主机的物理网卡桥接到虚拟机,Windows 会从局域网获取独立 IP。不同 Linux 桌面环境的网络管理工具不同,配置桥接前需要先了解 NetworkManager 或 netplan 的写法。
另一个常见问题是 Windows VM 网络速率低。安装 VirtIO 网卡驱动后,可以启用网卡多队列:
sudo virsh edit win10在<interface>里加入:
<driver name='vhost' queues='4'/>如果虚拟机有多个 vCPU,网络多队列能利用多核处理数据包,提高吞吐。此配置需要虚拟机处于关机状态。
5.4 显卡与显示协议优化
在 virt-manager 里,默认视频设备可以设置为 VirtIO 或 QXL。对普通桌面办公,VirtIO GPU 配合 SPICE 已经足够。安装 SPICE Guest Tools 后,分辨率和剪贴板体验会接近真实桌面。
但要注意,这种虚拟显卡无法满足高负载 3D 游戏。若必须运行需要较强图形能力的 Windows 软件,需要做 GPU 直通,把宿主机一块物理显卡直接分配给 Windows 虚拟机。GPU 直通对硬件平台有要求,还需要配置 IOMMU,不是所有主板都能稳定运行。遇到这类需求,请先查阅虚拟化平台官方文档,并在测试机验证后再操作。
如果 Windows 虚拟机只是作为服务运行,不开桌面,甚至可以不启动 SPICE,远程桌面协议更合适。Windows 专业版自带远程桌面,启用后直接用 Linux 上的 Remmina 连接即可。
5.5 剪贴板共享与文件互传
VirtIO 加 SPICE 组合下,安装 SPICE Guest Tools 后,复制文本通常可以双向共享。如果剪贴板失效,重启虚拟机或检查 services 中的 SPICE agent 是否正常运行。
跨系统传文件有几种方式:
- SPICE 拖拽:适合小文件。
- SMB 共享:把 Linux 目录共享给 Windows,适合大文件和日常协作。
- 内置 virt-manager 的“传输文件”功能。
- 通过 HTTP 临时服务下载,适合一次性文件。
业务量大时更建议把常用文件放在 SMB 共享目录,Windows 虚拟机里映射为网络驱动器。这样即使虚拟机损坏,数据也不会一起丢失。
6. 常见问题与排查思路
6.1 KVM 无法启动:权限不足
执行 virt-install 时如果提示类似:
Permission denied: /dev/kvm说明当前用户没有访问/dev/kvm的权限。解决方案是加入kvm用户组并重新登录:
sudo usermod -aG kvm $USER sudo chmod 660 /dev/kvm某些发行版在重启后/dev/kvm权限会被 udev 规则重新设置。如果仍不生效,检查/etc/udev/rules.d/里是否有自定义规则影响。
6.2 Windows 安装时看不到磁盘
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
| 安装界面无法显示磁盘 | 磁盘总线为 VirtIO,未加载驱动 | 在安装界面加载 vioscsi 或 viostor 驱动 |
| 加载驱动提示路径无效 | virtio-win 目录选择错误 | 根据 Windows 版本和架构选amd64目录 |
| 光驱中看不到 virtio-win 内容 | ISO 未挂载或路径权限错误 | 检查virsh domblklist win10和目录权限 |
先用以下命令查看虚拟机挂载的设备:
sudo virsh domblklist win10确认安装 ISO 和 virtio-win ISO 都出现在列表中。如果 ISO 所在目录其他用户无法读取,QEMU 进程也读不到。
6.3 虚拟机安装完成后网络不通
Windows 安装后网络图标显示断开,通常是因为网卡型号是 VirtIO 但驱动没有正确安装。安装 virtio-win 套装工具后,网络一般会自动恢复。
如果安装过了驱动仍不通,检查宿主机网络:
sudo virsh net-list --all sudo virsh net-start default默认情况下 default 网络可能没有自启,设置开机自启:
sudo virsh net-autostart default再到 Windows 设置里手动检查 IP 是否为192.168.122.x网段。如果 NAT 网络正常,但外网无法访问,需要检查宿主机的 IP 转发是否开启。
6.4 虚拟机开机自启需求
服务器重启后,希望 Windows 虚拟机自动启动,可以使用:
sudo virsh autostart win10取消自启:
sudo virsh autostart --disable win10虚拟机自启后,如果 Windows 有服务依赖其他系统,注意启动顺序。尽量把数据库、中间件等虚拟机的自动启动顺序设计好。
6.5 Windows 启动缓慢或磁盘占用持续偏高
如果 KVM 虚拟机的磁盘持续占用高,可以先检查 qcow2 文件是否过大:
sudo du -h /var/lib/libvirt/images/win10.qcow2Windows 删除文件并不一定会让 qcow2 缩小。你可以在虚拟机关机后使用:
sudo virt-sparsify --compress /var/lib/libvirt/images/win10.qcow2 /var/lib/libvirt/images/win10-shrink.qcow2这会整理镜像空闲空间并压缩大小。执行前必须备份原镜像,并确保路径空间充足。整理完成后,再替换原文件。该方法不适用于正在运行的虚拟机。
7. 最佳实践与工程建议
7.1 备份与快照规划
Windows 虚拟机中的系统状态比 Linux 容器更复杂,补丁更新和软件安装都可能破坏系统。生产环境建议定期做快照或备份。
KVM 原生快照命令:
sudo virsh snapshot-create-as win10 \ --name "before-update-20250101" \ --description "Windows 更新前快照"查看快照:
sudo virsh snapshot-list win10恢复快照:
sudo virsh snapshot-revert win10 --snapshotname before-update-20250101快照不是万能的。qcow2 快照性能会有损耗,长期保留大量快照会让磁盘占用膨胀。更稳妥的方案是定期停止 Windows 虚拟机后复制镜像文件,或使用virt-clone做完整克隆。
7.2 安全与最小权限原则
虚拟化平台权限很大,误操作可能直接删除整个虚拟机或影响同宿主机上的其他服务。执行 virt-install、virsh undefine、snapshot-delete 等破坏性命令前,建议先输出当前状态确认对象:
sudo virsh dumpxml win10 > /tmp/win10-backup.xml这样即使虚拟机被误删,XML 配置也能找回一部分。如果做删除操作建议备份两次,再执行。
Windows 虚拟机如果暴露到物理网络,需要安装杀毒软件和防火墙。不要因为“它是虚拟机”就放松安全要求。通过 NAT 访问外网时,外部无法直接连入,默认更安全;一旦改成桥接模式,虚拟机就相当于局域网内一台真实电脑,必须按生产设备对待。
7.3 命名、存储目录与监控规范
虚拟机名称建议加上业务含义,如win-caiwu-01、win-mes-01,不要只叫test。镜像文件放在统一的数据盘目录,避免系统盘被虚拟机镜像占满。建议单独挂载大容量数据盘到/var/lib/libvirt/images,或通过 LVM 单独管理。
日常监控可以用:
sudo virt-topvirt-top能实时查看各虚拟机的 CPU、内存、磁盘读写情况。配合宿主机原有的监控方案,重点观察虚拟机内存回收和磁盘 I/O 延迟。Windows 虚拟机发生内存不足时,往往表现为卡顿而不是直接崩溃,因此要提前设置监控告警。
7.4 远程管理 libvirt
如果你有大量 Linux + Windows 虚拟机需要管理,建议启用 libvirt 的远程管理端口,但必须限制来源 IP 并使用 TLS/SSH 隧道。不建议直接暴露无认证的 TCP 端口。局域网内部可通过 virt-manager 连接远程 QEMU 主机:
virt-manager --connect qemu+ssh://user@linux-host/system这个命令依赖 SSH 认证,相对安全。生产环境中远程管理连接必须走受控网络,并遵循最小权限原则。
从 WSL 到《LSW》,本质上是把虚拟化的方向反转过来。WSL 解决的是 Windows 用户拥抱 Linux 的效率问题;KVM/QEMU 解决的是 Linux 用户必须运行 Windows 软件的兼容问题。别让名字迷惑,你真正需要掌握的是 virt-manager、virt-install、virtio-win 驱动这三件套。只要把系统安装、驱动加载、网络和磁盘配置这几步走通,在 Linux 里跑 Windows 就不再是稀奇事。
如果在实际操作中遇到其他报错,优先查看日志和配置:sudo journalctl -u libvirtd -n 50,再对照设备列表virsh domblklist 虚拟机名、virsh domiflist 虚拟机名判断问题出在哪一层。KVM 虚拟化的学习曲线并不陡,真正值得花时间的,是理解虚拟化设备的性能模型和故障排查思路。希望这篇笔记能帮你省下一些摸索时间。