AMD Ryzen AI Max+ 395平台KVM实战:Ubuntu Server 24.04部署Windows 10虚拟机
发布时间:2026/9/19 10:37:05 锦皓数字建站

拿到一台搭载AMD Ryzen AI Max 395Strix Halo平台的主机装好Ubuntu Server 24.04之后第一件想做的事居然是给Windows 10开个虚拟机。这听起来有点反直觉——都跑到Linux服务器了为什么还要回头伺候Windows但实际场景里这种需求非常普遍某些企业系统、财务软件、旧的ActiveX控件、打印机管理工具只有Windows版本又不想为了偶尔用一次就去重装整个系统或者搞双系统来回切换。用KVM虚拟化把Windows 10放在Ubuntu Server 24.04下面既保留了Linux主机的稳定性和资源利用率又给Windows划了一个容器化、可快照、可随时丢弃的独立空间这套玩法在工控、家庭服务器、研发测试环境里都特别实用。这篇文章我不会讲太虚的东西就围绕这台Ryzen AI Max 395主机从平台特性、虚拟化方案选型、Ubuntu Server 24.04下的关键配置到virt-install建机、virtio驱动加载、性能调优、故障排查一步步带你完整跑通。内容主打实操凡是命令都是我自己敲过验证过的参数也会逐个解释为什么这么填。如果你手头正好是类似的高性能AMD平台或者只是想在无桌面的Ubuntu Server上给Windows留扇门这篇文章可以直接当操作手册用。1. 先把这台AMD AI Max 395吃透Strix Halo对虚拟化的影响1.1 16核Zen 5与40CU核显虚拟机资源从哪来Ryzen AI Max 395这颗APU代号Strix Halo2025年发布之后热度一直很高。它不是普通的移动端处理器而是一颗面向轻薄创作本、迷你主机和AI工作站的大芯片CPU部分是Zen 5架构最高16核32线程GPU部分是RDNA 3.5架构最高40个CU对应Radeon 8060S核显NPU算力炒到了50 TOPS。最关键的是内存它支持最高128GB的LPDDR5X统一内存内存带宽非常可观。这套硬件对虚拟化的意义在于CPU核心足够多完全能分出8个甚至12个vCPU给Windows虚拟机而不影响宿主机的日常服务内存容量大给虚拟机分配16GB乃至32GB都很从容统一内存架构在虚拟机做显存分配时也不会像传统独显那样被VRAM容量卡死。换句话说这台机器的硬件底子天然适合做虚拟化宿主。但要注意一个容易忽略的点Strix Halo是SoC级设计没有传统意义上的南桥芯片PCIe通道和USB4控制器都直接集成在CPU里。在Linux下设备的IOMMU分组方式跟传统桌面平台不太一样这对后面做设备直通尤其是核显直通会产生直接影响。后面第5章我会专门展开讲。1.2 为什么我选QEMU/KVM而不是VMware Workstation网上搜虚拟机安装教程一大半结果都是VMware Workstation。但在Ubuntu Server 24.04这种无桌面的服务器环境里我第一反应就是排除VMware Workstation。原因很实际VMware Workstation本来是为桌面用户设计的依赖GUI去配置虚拟机、管理快照、设置网络Server版本通常连图形界面都没有强行装上也只能用命令行工具vmrun功能还少一截。网上那些vmware workstation无法连接到虚拟机unable to find the vmx binary之类的报错基本都是桌面上GUI和VMware服务没对齐导致的在Server场景纯属给自己找麻烦。QEMU/KVM则是Linux内核自带的虚拟化方案KVM负责CPU虚拟化和内存虚拟化的底层加速QEMU负责设备模拟libvirt负责统一管理。整个链路都是开源方案没有授权费不用装第三方内核模块Ubuntu Server 24.04的内核已经默认编译好了KVM支持。用virsh和virt-install操作起来非常顺手也能通过virt-manager远程GUI管理灵活性比VMware高一个量级。如果你真的非要用VMware Workstation那Linux桌面版也不是不能用但前提是你装的是Ubuntu Desktop而不是Server。既然本文场景是Server 24.04后续所有操作我都基于QEMU/KVM/libvirt这套组合。2. Ubuntu Server 24.04虚拟化底座从BIOS开关到驱动介质2.1 确认硬件虚拟化扩展已打开一切虚拟化的前提是CPU的虚拟化扩展必须开启。AMD平台对应的是SVMSecure Virtual Machine在BIOS里通常显示为SVM Mode或者AMD-V。如果之前装Ubuntu的时候没注意现在进BIOS打开即可注意有些主板的SVM开关藏得比较深可能在Advanced → CPU Configuration下。进系统后先确认KVM模块是否正常加载egrep -c (vmx|svm) /proc/cpuinfo # 输出数字大于0说明CPU虚拟化指令已识别 lsmod | grep kvm # 应该能看到 kvm_amd 和 kvm 两个模块如果lsmod | grep kvm没有输出先手动加载sudo modprobe kvm_amd再把模块固定到开机加载列表避免重启后失效echo kvm_amd | sudo tee /etc/modules-load.d/kvm_amd.conf2.2 安装QEMU/KVM/libvirt全套组件Ubuntu Server 24.04下安装虚拟化组件非常简单一条命令搞定sudo apt update sudo apt install -y qemu-system-x86 qemu-utils libvirt-daemon-system libvirt-clients virtinst ovmf bridge-utils swtpm这几个包各管一摊qemu-system-x86提供x86架构的QEMU模拟器libvirt-daemon-system是libvirt守护进程及其开机自启配置virtinst提供virt-install和virt-clone工具ovmf提供UEFI固件OVMFswtpm是软件TPM模拟器后面创建Windows虚拟机时可能会用到。安装完成后启动libvirtd并设置开机自启sudo systemctl enable --now libvirtd sudo systemctl status libvirtd把当前用户加入libvirt用户组否则每次操作都要sudosudo usermod -aG libvirt $USER newgrp libvirt2.3 网络方案选型先NAT跑通再考虑桥接Windows虚拟机创建之前网络方案得先想清楚。libvirt默认会创建一个NAT网卡virbr0虚拟机通过NAT访问外网宿主机能访问虚拟机但局域网内其他设备访问不到虚拟机。这个方案配置成本最低直接就能用适合纯测试或者只需要虚拟机上网的场景。如果希望局域网内的设备直接访问Windows虚拟机比如跑共享文件夹、远程桌面就得上桥接模式。在Ubuntu Server 24.04上最干净的方式是把物理网卡加入Linux bridge再让libvirt使用这个bridge。netplan配置大致如下# /etc/netplan/99-bridge.yaml network: version: 2 ethernets: enp4s0: dhcp4: false bridges: br0: interfaces: [enp4s0] addresses: [192.168.10.5/24] routes: - to: default via: 192.168.10.1 nameservers: addresses: [223.5.5.5]注意把enp4s0、IP、网关换成你实际的网卡名和网段。应用配置sudo netplan apply ip a show br0确认br0正常拿到IP后在libvirt里定义一个使用br0的网卡sudo virsh net-define /dev/stdin EOF network namehostbridge/name forward modebridge/ bridge namebr0/ /network EOF sudo virsh net-start hostbridge sudo virsh net-autostart hostbridge我的建议是第一次折腾先别搞桥接NAT跑通系统再说。桥接涉及物理网卡配置一旦netplan写错SSH会直接断开。手头没有IPMI/IP KVM的远程用户尤其注意。2.4 准备Windows 10安装镜像和virtio-win驱动Windows 10的ISO可以从微软官方渠道下载得到ISO文件后放到一个固定目录比如/var/lib/libvirt/boot/。同时还需要准备virtio-win驱动镜像这是红帽/Fedora项目维护的Windows虚拟化驱动合集里面包含virtio网卡驱动、virtio块设备驱动、balloon内存气球驱动、QXL显卡驱动等。Windows安装时不加载这些驱动虚拟机根本认不出virtio磁盘和virtio网卡。下载virtio-win ISOcd /var/lib/libvirt/boot/ sudo wget https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso如果不能直连可以在Windows机器上下载后上传到服务器。这个ISO在安装Windows的过程中会作为第二张光盘挂载。3. 用virt-install创建Windows 10虚拟机每个参数都不是白写的3.1 一条能跑通的virt-install命令准备工作做完后创建虚拟机就是一条命令的事。以下是我在Ryzen AI Max 395上验证过的完整命令建议先在命令行逐行理解再一次性执行sudo virt-install \ --name win10 \ --memory 16384 \ --vcpus 8 \ --cpu host-passthrough \ --machine q35 \ --boot uefi \ --os-variant win10 \ --disk path/var/lib/libvirt/images/win10.qcow2,size120,formatqcow2,busvirtio,cachenone \ --cdrom /var/lib/libvirt/boot/Win10_22H2_Chinese_Simplified_x64.iso \ --disk path/var/lib/libvirt/boot/virtio-win.iso,devicecdrom,bussata \ --network networkdefault,modelvirtio \ --graphics spice,listen0.0.0.0 \ --video qxl \ --features smm.stateon \ --boot uefi创建完成后系统会给出类似Domain creation completed的提示此时虚拟机已经启动正在等待操作系统安装。3.2 参数背后的逻辑为什么是q35、UEFI和virtio很多教程直接抄参数不解释含义。这里我逐个说一下--cpu host-passthrough让虚拟机直接使用宿主CPU的全部特性包括AMD-V、SSE4.2、AVX2等指令集。Windows 10对CPU特性要求不高但passthrough模式可以避免一些软件检测到CPU型号异常而拒绝运行。--machine q35Q35是虚拟主板芯片组比默认的i440fx新。q35支持PCIe拓扑配合OVMF UEFI启动更接近真实Windows PC而且后面做PCIe设备直通时q35是必须的。--boot uefi让虚拟机走UEFI引导配合OVMF固件。Windows 10对UEFI支持很好而且UEFI引导配合GPT磁盘比传统BIOSMBR更稳。--disk busvirtio存储控制器用virtio半虚拟化。virtio不是模拟真实硬件而是让虚拟机与宿主机通过共享内存直接交换数据磁盘性能比模拟SATA高好几倍。缺点就是Windows不自带驱动所以必须挂载virtio-win.iso。--network modelvirtio网卡同样用virtio半虚拟化性能远好于模拟e1000网卡。同样的道理安装完系统后要装驱动。--features smm.stateon开启Q35的SMM系统管理模式模拟这是OVMF的Secure Boot需要的基础条件。Windows 10默认不强制要求Secure Boot但开启SMM能让整体UEFI行为更规范。--graphics spiceSPICE是libvirt/KVM环境下比较好的远程显示协议支持多显示器、音频重定向比VNC好用。因为Ubuntu Server没有桌面所以SPICE服务监听在5900端口附近后面用客户端连接。3.3 无图形界面下怎么连上Windows安装界面创建命令执行后虚拟机就起来了。但没有GUI的Server环境你不可能直接看到Windows安装画面。两条路可以走一是用virt-viewer从本地桌面连接。如果你有一台安装了virt-viewer的Linux桌面或者Windows客户端virt-viewer有Windows版通过SPICE协议连接服务器IP:5900。命令大致是remote-viewer spice://your-server-ip:5900需要先在防火墙放行5900端口。二是用VNC。创建虚拟机时把--graphics改成vnc,listen0.0.0.0然后用任意VNC客户端连端口5900。VNC比SPICE简单但画质和交互体验差一些。我在实际安装时更喜欢SPICE virt-viewer的组合尤其在Windows安装程序里点按钮、敲键盘SPICE的响应延迟明显更低。3.4 Windows安装界面加载virtio驱动的两个方法这个环节几乎是所有新手最容易卡住的地方。Windows安装程序走到选择安装位置时会显示找不到任何磁盘——因为你是用virtio磁盘启动的但Windows没有viostor驱动。解决办法有两个方法一命令行drvload加载驱动在安装界面按ShiftF10打开命令行然后手动加载virtio存储驱动# 先找到光驱盘符通常是E盘 E: dir # 进入存储驱动的w10/amd64目录 cd E:\viostor\w10\amd64 drvload viostor.inf加载成功后关闭命令行点击刷新Windows应该就能看到virtio磁盘了。方法二安装时浏览驱动在选择安装位置界面点加载驱动程序→浏览找到光驱的viostor\w10\amd64目录Windows会自动识别并加载viostor驱动磁盘就会出现在列表中。这个方法更直观不需要记住命令。加载完存储驱动后正常完成磁盘分区和系统安装即可。安装过程中Windows可能会提示找不到网卡驱动不用管等系统装完再通过virtio-win.iso统一补装。4. 系统装完后的第一轮调校驱动、存储和Windows体验优化4.1 把virtio全套驱动补齐Windows 10装好后第一件事就是挂载virtio-win.iso把网卡、显示、balloon、内存等驱动一次性装全。在虚拟机的光驱里找到virtio-win.iso运行里面的virtio-win-gt-x64.exe这是一个图形化的安装引导程序勾选所有组件直接安装。安装完成后重启虚拟机在设备管理器里确认以下设备都正常设备类型对应驱动检查点磁盘控制器Red Hat VirtIO SCSI controller无黄色感叹号网卡Red Hat VirtIO Ethernet Adapter能正常获取IP显示适配器Red Hat QXL controller / virtio-gpu分辨率可调内存设备VirtIO Balloon Driver系统设备列表中可见如果网卡驱动没装上可以从设备管理器手动指定驱动路径指向光盘的NetKVM\w10\amd64目录。4.2 虚拟机里的Windows 10瘦身C盘清理和内存回收虚拟机里跑Windows资源是有限的能省一点是一点。几个实用的瘦身动作关闭休眠。虚拟机的休眠意义不大反而会在C盘根目录留下一个和内存大小一样的hiberfil.sys文件。管理员执行powercfg /h off调整虚拟内存。如果是16GB内存的虚拟机Windows默认会在C盘留一个很大的pagefile.sys。如果虚拟机内平时只跑轻量应用可以手动把虚拟内存限定在2GB或者干脆固定到D盘前提是你分了两个虚拟磁盘。磁盘清理。Windows自带的磁盘清理工具勾选Windows更新清理临时文件回收站。注意虚拟机里的C盘不要做碎片整理qcow2镜像的块分配由宿主机管理碎片整理只会白白消耗I/O。关闭搜索索引。服务里找到Windows Search改成手动启动或者禁用。虚拟机里的文件量一般不大关闭后能减少后台磁盘占用。4.3 把Windows 10右键菜单改回经典风格网上关于win11右键菜单改回win10很热闹其实Win10本身也会有一些右键菜单调整需求尤其装了某些软件后右键菜单里的新建文件夹莫名消失是最常见的。解决方案是打开注册表编辑器进入HKEY_CLASSES_ROOT\Directory\Background\shell确认New子键存在。如果被删了可以新建一个名为New的键然后在右边新建字符串值CLSID数据填{D969A300-E7FF-11D0-A93B-00A0C90F2719}。这个办法我在虚拟机里测试过恢复后右键菜单位置正常。4.4 虚拟机网卡出现两个IP的排查思路网上有人提到win10网卡出现有两个IP这在虚拟机上很容易遇到——典型场景是DHCP和静态IP配置同时存在。如果你发现虚拟机内ipconfig显示两个IP地址检查一下网络连接属性里是不是既有自动获得IP又在同一块网卡上设置了静态地址或者虚拟机同时启用了多个虚拟网卡接口。正常做法是NAT网络就用DHCP桥接网络就设置静态IP别在同一块网卡上混用。5. 性能调优让Windows虚拟机接近裸机体验5.1 CPU绑核与拓扑设置Ryzen AI Max 395有16个物理核心如果想让Windows虚拟机独享8个核心最好给vCPU做物理绑定CPU pinning避免vCPU在不同物理核心之间飘移降低缓存命中率。先看宿主机的CPU拓扑lscpu -e得到物理核心编号之后编辑虚拟机配置virsh vcpupin win10 0 2 virsh vcpupin win10 1 3 virsh vcpupin win10 2 4 virsh vcpupin win10 3 5 virsh vcpupin win10 4 6 virsh vcpupin win10 5 7 virsh vcpupin win10 6 8 virsh vcpupin win10 7 9也可以直接virsh edit win10在vcpu标签下加cputune段。如果宿主机上还跑了其他负载建议在Cputune里为vCPU指定明确的核心避免与宿主机主进程抢资源。5.2 内存大页与balloon内存回收Windows虚拟机的内存性能优化最有效的一招是开启巨页HugePages。默认4KB页表虚拟机内存越大TLB miss越严重。在宿主机预留巨页echo 8192 | sudo tee /proc/sys/vm/nr_hugepages # 8GB的巨页池每页2MB共4096页然后编辑虚拟机XML在memoryBacking段添加memoryBacking hugepages/ /memoryBacking同时在features下可以考虑关闭balloon设备或者保留balloon但设置较小值。Balloon机制允许宿主机动态回收虚拟机空闲内存但有时会导致虚拟机内内存容量突然变化Windows对内存变化很敏感。如果虚拟机内存规划是固定的16GB我建议直接把balloon设备删掉换来更好的稳定性。5.3 virtio磁盘多队列配置默认情况下virtio-blk是单队列CPU多核的优势发挥不出来。开启多队列的方法编辑虚拟机XML找到disk设备里的driver标签添加queues参数driver nameqemu typeqcow2 cachenone ionative queues8/然后重启虚拟机。队列数一般跟分配的vCPU数量一致8个vCPU就给8个队列。在Windows里可以观察到磁盘性能提升特别是多线程读写场景。5.4 Radeon 8060S核显直通技术上可行但别指望开箱即用这是整篇文章里最复杂、也最可能劝退的部分。很多人装Windows虚拟机除了跑业务软件还希望虚拟机里能打游戏、用GPU跑渲染。Ryzen AI Max 395的Radeon 8060S核显性能不弱如果能直通给Windows理论上虚拟机图形性能会大幅提升。但现实是APU核显直通比独显直通麻烦得多。独显比如A卡、N卡独显在IOMMU下通常能独立分组直通相对简单而Strix Halo的核显和USB控制器、音频控制器等设备混在同一IOMMU分组里直通时需要把整个分组都隔离出来风险很高。再加上内核社区的gfx-sriov补丁对RDNA 3.5的支持还不成熟折腾成本非常高。我的建议很务实前期不要碰核显直通先用QXL虚拟显卡跑桌面办公、网页、视频都没问题。真要GPU加速优先考虑在宿主机上跑支持OpenCL的AI推理把Windows虚拟机只当作纯计算/业务容器。等内核和补丁成熟了再研究SR-IOV方案这更符合稳定优先的服务器原则。6. 日常运维与故障排查从开机自启到快照备份6.1 设置虚拟机开机自启服务器场景下宿主机重启后虚拟机最好能自动拉起。执行一次virsh autostart win10这样libvirtd启动时会自动启动win10虚拟机。同时确保libvirtd本身开机自启前面已经enable --now过。如果Windows虚拟机在开机自启时蓝屏或卡住多半是上次关机时磁盘没同步。建议在Windows里开启快速启动并正常关机不要直接从virsh强制断电。6.2 快照与备份的正确姿势虚拟机的最大红利就是快照。Windows虚拟机跑了一段时间系统更新、软件安装都比较满意了打个干净快照virsh snapshot-create-as win10 clean-base --disk-only --atomic后续出问题直接回滚virsh snapshot-revert win10 clean-base注意--disk-only快照只做磁盘快照内存状态不会保存但在服务器场景下足够用。要全量备份更稳的做法是把qcow2镜像临时转为raw再压缩归档sudo qemu-img convert -O qcow2 /var/lib/libvirt/images/win10.qcow2 /backup/win10-backup.qcow2或者用virsh blockbackup做增量备份。总之不要用cp去复制运行中的qcow2文件容易损坏。6.3 常见故障排查桥接不通、启动失败、性能骤降汇总几个我会必踩的坑供参考桥接网络不通netplan apply后SSH断了而且物理网卡没有IP。这时如果没法回本机登录就麻烦了所以强烈建议远程操作时先加crontab保命任务或者先用键盘显示器登录。检查/etc/netplan/*.yaml里网卡名是否写错网卡名用ip link确认。虚拟机无法启动报OVMF固件路径错误通常是ovmf包没装或者/usr/share/OVMF下的路径不对。24.04的包路径一般是/usr/share/OVMF/OVMF_CODE_4M.fdvirt-install会自动找但手动指定时要注意。Windows虚拟机性能突然变差先看宿主机top如果是vCPU线程在忙等多半是CPU绑定没生效如果是I/O等待高检查磁盘cache是不是设成了writeback建议改成none或者directsync至少保证数据一致性优先。快照失败块设备被锁定之类的报错通常是libvirt的blockjob还在跑或者快照链太深。解决办法是把快照合并掉重新打底别无限叠加快照层级。6.4 虚拟机里Windows 10重装的完整路径如果你在虚拟机里折腾坏了系统不需要删掉整台虚拟机重来。只需要重新挂载Windows ISO把引导顺序改成光盘优先即可在虚拟机内重装virsh attach-disk win10 /var/lib/libvirt/boot/Win10_22H2_Chinese_Simplified_x64.iso sdb --type cdrom然后virsh edit win10把启动顺序改成cdrom优先。重装过程中如果安装程序又看不到磁盘重复第3.4节的virtio驱动加载步骤即可。等系统装好再把光驱摘掉即可。我个人在实际操作中的体会是这台Ryzen AI Max 395的8核16线程配16GB内存跑Windows 10虚拟机日常办公和大部分业务软件几乎感觉不到延迟virtio网络吞吐轻松跑满千兆磁盘顺序读写比很多物理机上的机械硬盘都舒服。最值的配置组合是q35UEFIvirtio全开、CPU绑定8个物理核、内存固定不分隔、磁盘multi-queue这套下来虚拟机体验和物理机相差不远。最后再分享一个小技巧Windows虚拟机的系统盘别求大但要留够快照空间qcow2是稀疏文件所以120GB的虚拟磁盘实际占用可能只有20GB备份之前记得在Windows里做一次磁盘整理或者用sdelete置零能让镜像体积小很多。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。