手头这台机器我折腾了一个多星期——AMD Ryzen AI Max+ 395 的迷你主机,装了 Ubuntu Server 24.04,跑 Windows 10 虚拟机。整个过程踩了不少坑,但最后稳定运行下来,说实话,这套组合比我想象中靠谱得多。如果你正打算用一台高性能小主机同时承担 Linux 服务器和 Windows 应用的双重角色,这篇记录应该能帮你省下大量排查时间。
入正题之前先交代背景:主机是 AMD Ryzen AI Max+ 395,16 个 Zen5 核心、40 个 RDNA 3.5 计算单元、统一内存架构,配了 96GB LPDDR5X 和一块 PCIe 4.0 NVMe。为什么要在这个硬件上装 Ubuntu Server 再虚拟化 Windows 10,而不是直接装个双系统?因为这台机器在我家是 7x24 小时开机的,主要当 NAS、开发服务器、Docker host 用,偶尔还要跑一些只支持 Windows 的软件——比如老的财务软件、网银助手、特定打印机驱动程序。直接把 Windows 10 做成 KVM 虚拟机,比在物理机上双系统灵活太多,还能用快照随时回滚。
下面从硬件准备、平台选择、驱动加载、网络配置到性能调优,完整还原整个实操过程。
1. 硬件平台与宿主机准备
1.1 这套硬件为什么适合当虚拟化宿主机
AMD Ryzen AI Max+ 395 本质上是为“大统一内存 + 高密度计算”设计的。16 核 32 线程给虚拟机划分资源时非常从容,40CU 的 RDNA 3.5 核显在虚拟化场景里也不是摆设——它既能承担宿主机桌面的输出,也能为 Windows 10 虚拟机提供可用的图形加速。和那些带独显的塔式服务器不同,这种迷你主机功耗低、噪音小,放在书架上跑一年电费也花不了多少。
不过要提醒一句:这台机器的内存是统一内存架构,虚拟机和宿主机共享同一块 LPDDR5X。我分配了 16GB 给 Windows 10,宿主机的 Linux 还剩 80GB 左右,跑编译、Docker、ZFS 文件系统都没有压力。如果内存只有 32GB 或 64GB 版本,建议给 Windows 10 虚拟机分配 12~16GB 时谨慎一点,先算好宿主机自己要用的开销。
1.2 Ubuntu Server 24.04 安装时的几个关键选择
安装系统时,我主要做了三个决定:
第一,存储层面用了软 RAID 1。手上正好有两块 1TB NVMe,Ubuntu Server 24.04 安装器自带的“自定义存储布局”里可以直接做 RAID 1,不需要额外命令。这样虚拟机镜像文件、Docker 数据卷都落在 RAID 上,单盘故障不会导致整个虚拟机丢数据。如果不打算做 RAID,也要至少保证虚拟机的 qcow2 镜像放在剩余空间充足的独立分区,别和系统日志挤在一起。
第二,安装时只选了 OpenSSH server 和 standard system utilities,没有装完整的桌面环境。既然是服务器,有 SSH 就够了,图形界面纯属浪费内存。
第三,网络用了 DHCP 先跑通,后续再改静态地址。24.04 默认用 netplan,配置文件在/etc/netplan/下,等桥接网络那一步再统一改。
1.3 开启 SVM 和 IOMMU,检查虚拟化标志
BIOS 这一步太容易被忽略,但没它一切白搭。开机按 Del 进 BIOS,找到SVM Mode(AMD 虚拟化技术开关),必须设为 Enabled。如果你的主板有IOMMU选项,也一并打开,虽然不直通设备时用不到,但开了以后给后面留条路。
装完系统后,命令行验证:
egrep -c '(vmx|svm)' /proc/cpuinfo ls -l /dev/kvm第一行输出大于 0 说明 CPU 虚拟化指令已生效;第二行有/dev/kvm说明内核 KVM 模块正常加载。如果/dev/kvm不存在,多半是没装kvm-amd模块,先执行:
sudo modprobe kvm-amd再把kvm-amd写进/etc/modules防止重启后失效。
2. 虚拟化平台选型:为什么用 KVM/libvirt,而不是 VirtualBox 或 VMware
2.1 Linux 服务器上的虚拟化方案对比
很多人第一反应是装个 VMware Workstation 或者 VirtualBox,毕竟 Windows 上用得熟。但在 Ubuntu Server 无桌面环境下,这两款都不是理想选择:
| 方案 | 性能 | 集成度 | 无头管理 | 适合场景 |
|---|---|---|---|---|
| KVM/QEMU | 原生虚拟化,接近物理机 | 内核级集成 | 极好,virsh 全命令行 | Linux 服务器长期跑 VM |
| VirtualBox | 中等 | 需要自编译内核模块 | 一般 | 桌面用户临时测试 |
| VMware Workstation | 不错 | 闭源,内核升级易出问题 | 一般,依赖 GUI | 桌面/工作站场合 |
| Proxmox VE | 基于 KVM 的发行版 | 高 | 极好,Web 管理 | 多虚拟机生产环境 |
如果你只有一台机器,也不想再套一层 Proxmox 系统,直接在 Ubuntu Server 上装 KVM 就是最稳的路子。KVM 是 Linux 内核自带的虚拟化模块,QEMU 负责设备模拟,libvirt 负责统一管理。整个栈全部开源、免费,而且 Ubuntu 仓库里都有,不需要额外加源。
2.2 安装 KVM 虚拟化栈
Ubuntu 24.04 上的安装很简单:
sudo apt update sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils ovmf拆解一下这几个包分别干嘛的:
qemu-kvm:核心的 QEMU 虚拟化程序,负责 CPU/内存/设备模拟libvirt-daemon-system:libvirtd 守护进程和相关 systemd 服务libvirt-clients:提供virsh、virt-install等管理工具virtinst:包含virt-install命令,用它从命令行创建虚拟机bridge-utils:桥接网络工具ovmf:UEFI 固件,虚拟 Windows 10 建议用 UEFI 启动方式
安装完成后,启动服务并把当前用户加入 libvirt 用户组:
sudo systemctl enable --now libvirtd sudo usermod -aG libvirt $USER然后重新登录(或newgrp libvirt)让用户组生效,验证:
virsh version virsh list --all能正常输出版本号和空的虚拟机列表,说明环境已经就绪。
3. 准备 Windows 10 镜像与 virtio 驱动
3.1 Windows 10 ISO 从哪里拿
这一步不用找第三方下载站,直接去微软官方“软件下载”页面用媒体创建工具(Media Creation Tool)下载 Windows 10 22H2 的 ISO 即可。如果机器性能一般或者你只需要一个精简稳定的 Windows 环境,也可以选 Windows 10 Enterprise LTSC——它没有商店、Cortana 之类的组件,长期服务分支支持周期更长,在虚拟机上跑格外划算。
关于激活问题,这里不展开说,但请务必使用正规授权。合法授权方式包括:已有的 Windows 10 数字许可绑定微软账户、企业批量授权、或微软官方提供给开发者的评估版镜像(评估版一般有 90 天试用期,适合先测试虚拟机方案再决定买不买授权)。
下载完把 ISO 放到宿主机专门目录,我习惯放在/var/lib/libvirt/images/下,这样 virt-install 直接引用路径,权限也统一:
sudo mkdir -p /var/lib/libvirt/images sudo cp ~/downloads/Win10_22H2_Chinese_Simplified_x64.iso /var/lib/libvirt/images/3.2 virtio-win 驱动盘:虚拟机能不能识别硬盘的关键
KVM 完全模拟一套传统 SATA 控制器给 Windows 用也行,但性能和功能都有损失。更专业的做法是给虚拟机挂virtio-blk磁盘、virtio-net网卡、virtio-balloon内存气球、virtio-serial通信通道。问题是 Windows 不认这些虚拟设备,开机后根本找不到硬盘——除非你先准备好 virtio 驱动。
virtio-win 驱动盘是 Fedora 项目维护的现成 ISO,下载地址在 Fedora 官方镜像源:
sudo wget -O /var/lib/libvirt/images/virtio-win.iso \ https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso如果网络慢,也可以先在 Windows 上下载好再传到宿主机。这个 ISO 里包含了 viostor(存储驱动)、NetKVM(网卡驱动)、vioscsi、balloon 等全部驱动。装完 Windows 后,第一件事就是把 virtio-win 里所有驱动补上。
3.3 虚拟机资源配置清单
开工前先规划好各项参数,我就不绕弯子,直接把最终配置列出来:
| 参数 | 分配值 | 理由 |
|---|---|---|
| CPU | 8 vCPU(可热插拔到 16) | 16 核 CPU 分一半给 Windows,宿主机仍有余量跑 Docker 等服务 |
| 内存 | 16GB(上限 32GB) | Windows 10 日常使用 + 编译软件,16GB 舒适不紧张 |
| 系统盘 | 120GB qcow2 | 虚拟磁盘为稀疏文件,实际用了多少才占多少空间 |
| 数据盘 | 可选 200GB qcow2 | 存软件安装包、虚拟机间共享的工程文件 |
| 网卡 | virtio-net,接 br0 桥接 | 虚拟机直接暴露到局域网,宿主机和它互访走二层交换 |
| 显示 | QXL 虚拟显卡 + SPICE | 安装阶段用,日常远程桌面走 Windows 自带的 RDP |
| 启动方式 | UEFI(OVMF) | 贴合现代 Windows 10 的启动流程,兼容性更好 |
关于磁盘格式,我特意选了 qcow2 而不是 raw。qcow2 支持稀疏分配、快照、压缩,对一个要长期维护的虚拟机来说收益很大。日常使用性能差距在 NVMe 上几乎感觉不到。
4. 用 virt-install 创建 Windows 10 虚拟机
4.1 创建虚拟磁盘与完整命令
创建虚拟磁盘:
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/win10-system.qcow2 120G然后执行 virt-install,这是整个安装过程的核心。我推荐直接在命令行写完整参数,比用 virt-manager 图形界面更透明,也方便记录成脚本复用:
sudo virt-install \ --name win10 \ --memory 16384 \ --vcpus 8,maxvcpus=16 \ --cpu host-passthrough,cache.mode=passthrough \ --os-variant win10 \ --disk path=/var/lib/libvirt/images/win10-system.qcow2,format=qcow2,bus=virtio,cache=writeback \ --disk path=/var/lib/libvirt/images/virtio-win.iso,device=cdrom \ --cdrom /var/lib/libvirt/images/Win10_22H2_Chinese_Simplified_x64.iso \ --network network=default,model=virtio \ --graphics vnc,listen=0.0.0.0,port=5901 \ --boot uefi逐个说明参数:
--name win10:虚拟机名字,之后 virsh 操作都用它标识--memory 16384:固定分配 16GB 内存--vcpus 8,maxvcpus=16:启动时 8 个 vCPU,之后可动态扩到 16--cpu host-passthrough:直接把宿主机的 CPU 型号、特性透传给虚拟机。Windows 10 对 CPU 型号并不挑剔,透传能让虚拟化损耗降到最低——代价是如果你之后把虚拟机迁移到另一台不同 CPU 的宿主机,操作系统可能蓝屏,但家庭场景没人会做热迁移,选它准没错--os-variant win10:让 libvirt 使用 Windows 10 对应的 ACPI 和固件配置--disk ... bus=virtio:系统盘走 virtio-blk 虚拟控制器--disk ... device=cdrom:把 virtio-win 驱动盘挂为光驱--cdrom ...:Windows 10 安装 ISO--network network=default,model=virtio:先挂到 libvirt 默认的 NAT 网络,等装好系统再改成桥接--graphics vnc,listen=0.0.0.0,port=5901:监听 VNC 端口 5901,用局域网内任意装了 VNC 客户端的电脑连上来操作安装界面--boot uefi:使用 OVMF 提供的 UEFI 固件启动
执行后,virt-install 会启动 virt-viewer,如果宿主机没有 GUI 会直接报错。但别慌,虚拟机已经在后台创建了,直接用 VNC 连过去就行。
4.2 连接 VNC,进入安装程序
在另一台电脑上打开 VNC 客户端(Windows 用 RealVNC 或 TightVNC,Linux 用 Remmina),连接地址宿主IP:5901。这辆“无头服务器”的显示器管道就通了。
安装界面和物理机装 Windows 10 基本一样,唯一的坎出现在“选择安装位置”这一步——你会看到磁盘列表是空的。别怀疑,这就是因为 Windows 不认识 virtio-blk 虚拟磁盘,需要手动加载驱动:
- 点击“加载驱动程序”
- 浏览到光驱(通常是 D 盘或 E 盘)
- 选择
amd64目录下的w10子目录 - 勾选
Red Hat VirtIO SCSI pass-through controller或Red Hat VirtIO SCSI controller,下一步 - Windows 识别出 120GB 虚拟磁盘,正常分区安装即可
安装过程中的语言、键盘布局、时区选择按个人喜好来。要注意的是微软账户登录环节——在虚拟机里用微软账号其实意义不大,还容易卡在验证步骤。Windows 10 安装程序要求联网,但你可以先把网线/网络连接断开,或者直接创建本地账户。最省事的方式:在登录界面选择“改为域加入”,然后创建本地账户即可。
装完系统进入桌面后,第一件事是安装 virtio-win 全套驱动。打开光驱里的virtio-win-guest-tools.exe,全部默认安装并重启。重启后任务管理器里能看到 virtio-blk、NetKVM、virtio-balloon 等设备全都正常工作了。
4.3 安装 virtio 驱动时的常见误区
这里要提两个我踩过的坑:
第一个是驱动的目录选错。virtio-win 里的 amd64 文件夹下面同时有w10和w11目录,Windows 10 应该选w10。有些教程为了省事让用户直接选amd64目录,结果 Windows 10 加载驱动时仍然提示“找不到匹配的驱动”,那是因为它去 w11 子目录里找去了。直接在指定位置时填E:\amd64\w10最干净。
第二个是只装了存储驱动就继续安装,结果装完系统后网卡驱动还是感叹号。Windows 10 安装阶段加载了 viostor 后,其实不需要 NetKVM 也能把系统装完——但装完网络不通,还得回来看 virtio 盘。所以我建议,virtio-win-guest-tools.exe这个完整安装包在首次进桌面后立刻装掉,别等需要网络了再补。
5. 网络配置与远程访问
5.1 默认 NAT 网络的优缺点
virt-install 里我用了--network network=default,这个 default 网络是 libvirt 自带的 NAT 网络,虚拟网段是192.168.122.0/24。虚拟机通过宿主机的 iptables 规则访问外网,外网默认访问不到虚拟机——对安全来说很友好,但办不了事。
先确认虚拟机拿到地址:
virsh domifaddr win10 --source agent如果这个命令返回空,说明 virtio-serial 的 QEMU guest agent 还没装好。也可以直接在 Windows 虚拟机里运行ipconfig看 IP,简单粗暴。
临时用 NAT 没问题,但长期规划建议改成桥接。毕竟大多数人拿 Windows 虚拟机是要访问局域网里的 NAS、打印机,或者从手机远程连上来的。
5.2 配置桥接网络 br0
桥接的目标是让虚拟机网卡直接挂在物理网卡上,和宿主机处于同一局域网。这个步骤在无头服务器上要特别小心——配错了 SSH 会断,只能去物理机上改。
先看当前网卡名:
ip -br link show假设物理网卡叫enp1s0,编辑 netplan 配置文件(一般在/etc/netplan/01-netcfg.yaml):
network: version: 2 ethernets: enp1s0: dhcp4: false bridges: br0: interfaces: [enp1s0] dhcp4: true parameters: stp: false forward-delay: 0应用前可以先sudo netplan try来测试,它会等 120 秒确认没有断开再生效。如果 SSH 断了,等超时后会自动回滚,这是救命的操作。
生效后,给虚拟机添加桥接网卡:
sudo virsh attach-interface win0 --type bridge --source br0 --model virtio --config --live--config把配置持久化到虚拟机定义文件,--live立即生效。因为 Windows 10 的 NetKVM 驱动已经装好,新网卡一般能自动识别。
然后我在 Windows 里把原来的 NAT 网卡禁用了,避免两套路由表互相干扰。之后虚拟机直接和家里路由器同一个网段,从手机、笔记本、NAS 都能直接访问它。
5.3 启用 Windows 远程桌面
虚拟机里装完系统,日常操作最好别老开 VNC——VNC 连 Windows 的体验远不如 RDP。在 Windows 10 虚拟机里:
- 设置 → 系统 → 远程桌面 → 启用远程桌面
- 确认防火墙放行 TCP 3389
- 在 Windows 里新建一个本地账户,给上密码
之后从 Windows 物理机用mstsc,从 Linux 用 Remmina,直接连虚拟机的局域网 IP,体验和物理机没差别。分辨率自适应、剪贴板共享、文件拖拽全部正常。
5.4 开机自启:宿主机重启后虚拟机自动拉起
服务器型虚拟机最重要的一个设置是自动启动。否则宿主机一旦重启,Windows 虚拟机不会自己开机。
sudo virsh autostart win10查看:
sudo virsh list --all在 Autostart 列看到 enable,说明已经生效。另外给 Windows 虚拟机装好 QEMU guest agent 后,virsh 命令可以优雅地开关机,不用再模拟按电源键:
sudo virsh shutdown win10 sudo virsh start win10guest agent 的安装包在 virtio-win 光驱里也有,叫guest-agent,装完重启后服务自动运行。
6. 性能调优与显示方案
6.1 CPU 固定与内存预留
KVM 默认的调度策略已经很好了,但如果你追求更低延迟、更稳定,可以给 Windows 虚拟机固定 CPU 核心。我习惯把 vCPU 0~7 固定到物理核心 8~15 上,让 Windows 和宿主机主要进程互不干扰。
具体做法:编辑虚拟机配置
sudo virsh vcpupin win10 0 8 sudo virsh vcpupin win10 1 9 sudo virsh vcpupin win10 2 10 sudo virsh vcpupin win10 3 11 sudo virsh vcpupin win10 4 12 sudo virsh vcpupin win10 5 13 sudo virsh vcpupin win10 6 14 sudo virsh vcpupin win10 7 15这里 8~15 对应第二个 CCD 的物理核心。注意避开超线程兄弟核心,以免两个 vCPU 抢同一个物理核心的执行单元。用lscpu -e可以查看每个物理核心和逻辑 CPU 的映射。
内存方面,最简单有效的优化是关闭 Windows 虚拟机的内存气球(balloon)驱动。虽然 virtio-balloon 可以动态收缩空闲内存返还给宿主机,但在实际使用中经常出现 Windows 误判内存压力、把缓存频繁回收的问题。如果你内存足够,直接不用 balloon 反而省心。进入 XML 配置,删除<memballoon>相关标签段即可。
6.2 virtio-net 多队列与巨型帧
默认的 virtio-net 使用单队列,吞吐量在千兆以内没压力,一旦虚拟机要做大文件传输或跑局域网备份,单队列就可能成为瓶颈。开启多队列后,多个 CPU 核心可以并行处理网络包收发。
在 vm 配置里给interface添加队列数量:
sudo virsh edit win10找到<interface type='bridge'>部分,修改为:
<interface type='bridge'> <source bridge='br0'/> <model type='virtio'/> <driver name='vq' queues='4'/> </interface>同时在 Windows 设备管理器里,找到 VirtIO Ethernet Adapter,进入高级属性,把Receive Side Scaling(接收端缩放)设为 Enabled。这样虚拟机内多核网卡队列就生效了。
6.3 显示与图形:QXL、SPICE 还是 GPU 直通?
Windows 10 虚拟机在安装阶段用 QXL 虚拟显卡,分辨率默认 1024x768。装完 virtio 驱动后,把显示驱动换到 QXL 的高分辨率模式,或者干脆用 RDP 操作,RDP 自带虚拟显示适配器,能自适应分辨率,比 QXL 流畅很多。
如果你对 WebGL、视频编辑这类 3D 渲染有需求,QXL 显然不够。这时候摆在眼前的有两条路:
第一条是 virtio-gpu。它的 Windows 驱动适配还不算完善,稳定性一般,日常够用,但遇到 DirectX 游戏基本白搭。
第二条是 GPU 直通,把 Ryzen AI Max+ 395 的核显直接分配给 Windows 虚拟机。直通之后 Windows 里能看到完整的 Radeon 8060S 显卡,硬件加速拉满。但代价是宿主机就没有显示输出了——对无头服务器来讲其实无所谓,但需要 IOMMU 分组支持、BIOS 里的设置配合,而且这套 APU 的核显直通确实存在兼容性风险。如果你不是重度 3D 需求,我不建议一开始就碰,先用 RDP 跑几天再决定要不要开直通。
6.4 磁盘缓存与 I/O 调度
我这台虚拟机磁盘的 cache 设在writeback,数据先写虚拟机内存再异步落盘,对 Windows 这种频繁小文件读写的系统来说,响应速度提升很明显。代价是宿主机掉电时可能丢失最近几秒的写入缓冲——如果虚拟机跑的是数据库等关键服务,务必改成none或writethrough以换取一致性。
另外给 vcpu 对应的物理核设置 C 状态为 performance 模式,也能减少虚拟机的响应抖动。可以用cpupower工具:
sudo apt install linux-tools-common -y sudo cpupower frequency-set -g performance确认下当前 CPU 调频模式,Windows 虚拟机里跑 CPU 密集型任务就比较稳定了。
7. 常见问题与排查实录
这部分我把实际操作中遇到比较典型的问题整理成表,方便你直接对照处理。
| 症状 | 根因 | 解决方法 |
|---|---|---|
| 安装时看不到磁盘 | Windows 没有 virtio 存储驱动 | 安装界面点击“加载驱动程序”,指向 virtio-win 光驱E:\amd64\w10 |
| 首次启动蓝屏 INACCESSIBLE_BOOT_DEVICE | virtio 存储驱动未加载 | 用 WinPE 或安装盘修复启动,执行bcdedit检查启动项;下次务必装virtio-win-guest-tools |
| VNC 分辨率固定 1024x768 | QXL 驱动未装 | 安装 virtio-win 全套驱动,或用 RDP 远程桌面 |
| 虚拟机没有网卡 | NetKVM 驱动未装,或网络模型不是 virtio | 安装 virtio-win-guest-tools,重启;确认 XML 里 model 为 virtio |
| 宿主机重启后虚拟机不自动启动 | 未配置 autostart | sudo virsh autostart win10 |
| Windows 虚拟机内网络慢 | virtio-net 单队列默认配置 | 开启多队列,Windows 中开启 RSS |
| 虚拟机分配 16GB 内存,可用只有 8GB | Ubuntu 的 HugePages 未开启或 balloon 机制占用了内存 | 检查 virsh 内 memballoon 设置,关闭后重启 |
| VNC 连接闪断或黑屏 | 网络端口被防火墙拦截 | 检查宿主机 ufw/firewalld,放行 5901;或改用 SSH 隧道连接 VNC |
| Windows 虚拟机鼠标漂移 | spice-vdagent 驱动未装 | 安装 virtio-win 光驱中的 guest-tools |
| 无法从宿主机访问虚拟机的网页服务 | NAT 网络没有做端口转发 | 改为桥接网络,或使用virsh net-update default add-forward-port做转发 |
7.1 排障思路:从宿主到虚拟机逐层排查
有时候问题不在虚拟机内部。如果 Windows 虚拟机连不上网络,我一般按这个顺序排查:
- 在宿主机执行
virsh net-list确认网络是 active 状态 virsh net-dhcp-leases default看虚拟机有没有拿到 IP- 进虚拟机
ipconfig看网卡是否 up ping 网关、ping 8.8.8.8、ping 域名逐步确认是路由问题还是 DNS 问题
NAT 网络下最常见的问题是宿主机的防火墙挡了转发流量。Ubuntu 24.04 默认没有启用 ufw,如果你以前开启过,记得检查:
sudo ufw status7.2 性能下降时的快速诊断
虚拟机普遍变慢时,我第一反应是看宿主机资源。用top看 load average、free -h看内存、iostat -x 1看磁盘 IO。如果宿主机一切都正常,但 Windows 虚拟机依然卡,就回到虚拟机内看任务管理器里的 CPU 和内存占用。
还有一个隐藏问题:qemu 进程的 CPU 使用率一直很高,但 Windows 内 load 很低。这多半是主机 CPU 进入了低功耗 C 状态,虚拟机唤醒延迟导致的。按 6.4 的办法把 CPU 调频模式改为 performance 就能缓解。
8. 最后的经验与建议
在 AMD Ryzen AI Max+ 395 上跑 Ubuntu Server + Windows 10 虚拟机这套组合,目前已经稳定运行了一个多月,期间经历过宿主机自动更新重启、虚拟机自动开机、通过 RDP 从局域网多个设备同时连接,没有掉过链子。最让我满意的是 KVM 的快照功能——每次给 Windows 打大补丁之前,我先在宿主机执行一个快照,出问题秒回退,比物理机重装系统省心一百倍。
如果你想长期用这套方案,我建议给 Windows 10 虚拟机单独划一块数据盘,把 Chrome 缓存、下载目录、软件安装包都指向数据盘,系统盘保持干净。这样备份虚拟机时,系统盘镜像可以做得很小,数据盘单独定时同步。配合 qcow2 的快速快照,整个虚拟机的维护成本很低。
最后说一句,Windows 10 虚拟机本身也不是万能的,CPU 透传模式虽然性能损耗最小,但这也意味着将来如果把虚拟机迁移到 Intel 平台的宿主机,Windows 很大概率会蓝屏。如果你有未来迁移的打算,创建时就不要用host-passthrough,改选--cpu qemu64或--cpu max这类可移植模式。只是个人使用的话,放宽心,透传模式带来的性能提升值得这点迁移上的麻烦。