手把手:在 PVE 上装 Windows 11 虚拟机(含显卡直通)
从准备镜像、创建虚拟机、加载 VirtIO 驱动、安装 Windows,到用 RDP 远程使用;需要时再直通一张独立显卡,用 Moonlight 串流或者直接接显示器。
先定内存和版本
| 用途 | 内存 | 硬盘 |
|---|---|---|
| 偶尔用:测试网页、跑 Windows 专用软件、处理 Office 文档 | 6–8G | 64G |
| 日常用:开着浏览器和办公软件,长时间挂着 | 8G | 80–100G |
| 在里面做开发:Visual Studio、Docker Desktop、WSL2 | 12–16G | 128G 以上 |
放进 64G 内存的规划里:可以分给虚拟机的约 56G,例如 agent-01 16G + 4 台 agent 各 8G + Windows 8G。Windows 平时关机、要用时再开,关机的虚拟机不占内存。
第一部分:准备两个镜像
1.1Windows 11 安装镜像
- 在你的电脑上打开微软官网 microsoft.com/software-download/windows11,找到 下载 Windows 11 磁盘映像 (ISO),选择语言后下载(约 6–7G)。评估版在微软 Evaluation Center 下载
- PVE 网页:local (pve) → ISO 镜像 → 上传,选择下载好的 ISO 文件
微软给的下载链接有时效,所以先下到电脑上再上传,比在 PVE 里“从 URL 下载”更稳。
1.2VirtIO 驱动镜像
PVE 推荐的虚拟硬盘和网卡,Windows 自带的驱动不认识,安装时会找不到硬盘。这张驱动光盘由 Fedora 项目提供。
local (pve) → ISO 镜像 → 从 URL 下载,填:
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
http://192.168.50.101:7890(mihomo 的地址)。下载完记得清空,PVE 的系统更新本来走国内镜像,不需要代理。第二部分:创建虚拟机
点右上角 创建虚拟机,打开右下角的 高级 选项,按标签页逐个填写:
| 标签页 | 填什么 |
|---|---|
| 常规 | VM ID:300;名称:win11 |
| 操作系统 | ISO 镜像:Windows 11 的 ISO;类型:Microsoft Windows,版本:11/2022/2025;勾选 为 VirtIO 驱动添加额外的驱动器,选 virtio-win.iso |
| 系统 | 机器:q35;BIOS:OVMF (UEFI);勾选 添加 EFI 磁盘(存储 local-lvm,保持勾选“预注册密钥”);勾选 添加 TPM(存储 local-lvm,版本 v2.0);SCSI 控制器:VirtIO SCSI single;勾选 QEMU Agent |
| 磁盘 | 总线:SCSI;存储:local-lvm 或 data4t;大小:100 GiB;勾选 Discard、SSD 仿真、IO thread |
| CPU | 核心:4;类别:host |
| 内存 | 8192 MiB |
| 网络 | 桥接:vmbr0;模型:VirtIO(半虚拟化) |
| 确认 | 先不要勾选“创建后启动”,点 完成 |
创建好后检查一下 硬件 页:应该有两个 CD/DVD 驱动器,一个是 Windows 安装镜像,一个是 virtio-win。没有自动加上驱动光盘的话,手动 添加 → CD/DVD 驱动器,选 virtio-win.iso。
第三部分:安装 Windows
3.1从光盘启动
- 先打开 控制台,再点 启动
- 屏幕上出现
Press any key to boot from CD or DVD...时,马上按任意键。这行字只显示几秒钟
3.2安装向导
- 语言、时间格式、键盘:按需选择,下一步 → 安装 Windows 11
- 产品密钥:有就填,没有点 我没有产品密钥
- 版本:选 Windows 11 专业版(评估版镜像会直接是企业版)
- 到“选择安装位置”时,列表是空的,看不到硬盘。这是正常的,下一步加载驱动
3.3加载硬盘驱动和网卡驱动
- 点 加载驱动程序 → 浏览 → 打开 virtio-win 光盘 → 选
vioscsi\w11\amd64→ 确定 → 选中列出的驱动 → 安装 - 硬盘出现了。再点一次“加载驱动程序”,这次选
NetKVM\w11\amd64,把网卡驱动也装上。这样后面联网设置时就有网络了 - 选中那块 100G 的硬盘 → 下一步,开始安装。中间会自动重启几次,重启时不要再按键,否则又会从光盘启动
3.4首次设置(OOBE)
- 地区选中国,键盘按需选
- 联网:上一步装了网卡驱动的话,会自动连上网络。如果提示没有网络,点页面上的 安装驱动程序,到 virtio-win 光盘里选
NetKVM\w11\amd64 - 账号:专业版默认要求联网并登录 Microsoft 账号,按提示登录就行,装好后可以再新建本地账号。微软经常调整跳过联网登录的方法,以安装界面实际给出的选项为准
- 隐私设置按需关闭
第四部分:装好之后
4.1安装全部 VirtIO 驱动和 QEMU Guest Agent
打开 此电脑 → virtio-win 光盘 → 双击 virtio-win-guest-tools.exe,一路下一步。它会把剩下的驱动(内存回收、串口等)和 QEMU Guest Agent 一次装好。
装完后回到 PVE,win11 → 概要 里能看到它的 IP 地址,说明 Guest Agent 已经在工作。PVE 里点“关机”时,Windows 也能正常关机了。
4.2移除安装光盘
硬件 页里,两个 CD/DVD 驱动器都编辑成 不使用任何介质。
4.3几项必改的设置
| 设置 | 怎么改 | 为什么 |
|---|---|---|
| 不睡眠 | 设置 → 系统 → 电源 → 屏幕和睡眠:都改成“从不” | 虚拟机进入睡眠后经常唤不醒,远程也连不上 |
| 开启远程桌面 | 设置 → 系统 → 远程桌面 → 开启 | 第五部分要用 |
| 关闭动画效果 | 搜索“调整 Windows 的外观和性能” → 调整为最佳性能 | 远程时要传输的画面变少,更流畅 |
| 系统更新 | 设置 → Windows 更新,装完所有更新 | |
| 激活 | 设置 → 系统 → 激活 | 评估版不需要 |
4.4拍一个快照
win11 → 快照 → 拍摄快照,名称 fresh-install。以后装软件把系统搞乱了,可以回到这个干净的状态。
第五部分:用 RDP 远程使用
5.1连接
| 你的设备 | 客户端 |
|---|---|
| Windows | 自带的 远程桌面连接(mstsc) |
| Mac、iPhone、iPad | 微软的 Windows App |
| 安卓 | 微软的 Windows App 或 Remote Desktop |
| Linux | Remmina |
地址填 Windows 虚拟机的 IP(在 PVE 概要里看,建议在路由器里绑定固定 IP),用户名用你登录 Windows 的账号。在外面时,开着 Tailscale 也能连。
5.2卡不卡
| 场景 | 体验 |
|---|---|
| 家里局域网:办公、浏览网页、写代码 | ✅ 流畅 |
| 家里局域网:看视频、动画多的网页 | ⚠️ 能看,但会掉帧 |
| 外面,Tailscale 直连 | ✅ 基本流畅,打字稍有一点延迟 |
| 外面,Tailscale 走中继 | ❌ 明显卡顿 |
| 3D、游戏、剪视频 | ❌ 不行,要直通显卡(第六部分) |
会掉帧的原因是虚拟机里没有显卡,画面编码全靠 CPU。改善办法:
- 虚拟机给 4 个 CPU 核心
- 客户端 显示选项 → 体验:连接速度选“自动检测”或“局域网”
- 外网卡时:颜色降到 16 位,关掉桌面背景和字体平滑;不要用 4K 全屏,用 1080p 或窗口模式
- 在外面卡时先执行
tailscale status:PVE 那一行显示relay(走中继)的话,是网络问题,调 RDP 设置也没用
第六部分:直通独立显卡(可选)
把一张真实的显卡整张交给 Windows 虚拟机,装官方驱动后性能和实体机几乎一样。用来流畅远程(看视频、做设计)、3D、CUDA。只是办公和测试网页的话,RDP 就够了,不用做这一部分。
6.1条件和选卡
| 条件 | 说明 |
|---|---|
| BIOS 开启 VT-d | 安装 PVE 时已经打开 |
| BIOS 主显示设成核显 | 类似 Primary Display = IGD / Onboard 的选项。PVE 用核显开机,独立显卡完全留给 Windows |
| 机箱和电源 | 确认装得下这张卡、电源功率够,需要外接供电的卡还要有对应接口 |
| 显卡 | 功耗 | 说明 |
|---|---|---|
| RTX 2000 Ada / RTX A2000 | 约 70W | 只靠插槽供电,不用接电源线,刀卡尺寸,最适合品牌工作站 |
| RTX 4060 级别的游戏卡 | 约 115W | 性价比高,要接一根 8pin 供电线 |
6.2让宿主机把显卡空出来
在 PVE 宿主机 Shell 里:
# 1. 确认 IOMMU 已开启(PVE 8.2 之后的内核默认开启),能看到 DMAR / IOMMU enabled 字样 dmesg | grep -e DMAR -e IOMMU | head # 2. 找到显卡和它自带的声卡,记下方括号里的 ID,比如 [10de:2882] 和 [10de:22be] lspci -nn | grep -i -e vga -e audio # 3. 让这两个设备交给 vfio-pci,宿主机不加载显卡驱动(ID 换成你自己的) echo "options vfio-pci ids=10de:2882,10de:22be" > /etc/modprobe.d/vfio.conf printf "vfio\nvfio_iommu_type1\nvfio_pci\n" >> /etc/modules echo "blacklist nouveau" > /etc/modprobe.d/blacklist-nouveau.conf update-initramfs -u -k all reboot # 4. 重启后确认:显卡那一项显示 Kernel driver in use: vfio-pci lspci -nnk | grep -A3 -i vga
6.3把显卡加给 Windows
- Windows 先关机
- win11 → 硬件 → 添加 → PCI 设备 → 原始设备,选这张显卡
- 勾选 所有功能(All Functions,连显卡上的声卡一起)和 PCI-Express;主 GPU 按下面两种场景决定
- 硬件 → 内存:取消勾选 Ballooning 设备。直通了显卡的虚拟机,内存会被全部锁定,按满额占用
场景 A:不接显示器,用 Moonlight 串流
- 先不勾选“主 GPU”,保留 PVE 的虚拟显示器救急
- 开机,用 RDP 连进去,安装 NVIDIA 官方驱动
- 解决“没接显示器不出画面”:在显卡上插一个 HDMI 假负载(十几块钱),或者在 Windows 里装虚拟显示器驱动。否则串流过去是黑屏
- 安装 Sunshine,设置用户名密码,设成开机自启
- 在你的电脑或手机上装 Moonlight,找到这台 Windows(不在同一个局域网就手动输入 IP),输入 Sunshine 显示的配对码
- (可选)串流稳定后,把 硬件 → 显示 改成“无”,避免 Sunshine 捕获到错误的屏幕
日常使用:PVE 里点启动 → Moonlight 里点这台 Windows。Moonlight 不能帮你开机,要先在 PVE 里启动。
场景 B:接显示器,坐在工作站前面用
ThinkStation
├── 主板上的视频接口(核显)── PVE 自己的命令行画面(救急时用)
└── 独立显卡的接口 ─────────── 显示器 ← Windows 桌面
USB 键盘鼠标 ─────────── 直通给 Windows
- 显示器接到独立显卡上;可以用显示器的第二个输入口接主板接口,救急时切换
- PCI 设备勾选 主 GPU,硬件 → 显示 改成“无”。有真实显示器,就不需要假负载了
- 键盘鼠标:硬件 → 添加 → USB 设备,按“厂商/设备 ID”选。想插什么都直接归 Windows,最稳的是加一张 PCIe USB 扩展卡,把它整张直通过去
- 选项 → 开机自动启动 → 是。按电源键开机,大约 1 分钟后显示器上就出现 Windows
两种场景可以同时用:接了显示器也可以装 Sunshine,在家坐着用显示器,出门用 Moonlight。
6.4救急的退路
- 先试 RDP:只要 Windows 正常开机、网络正常就能连上
- 保留了虚拟显示器的话,用 PVE 网页控制台看画面
- 还不行:Windows 关机,在 硬件 里把这块 PCI 设备移除,把“显示”改回默认。虚拟机回到普通状态,控制台一定能看到画面,修好再加回去
注意事项
- 一张显卡同一时间只能给一台虚拟机。Windows 关机后,这张卡才能分给别的虚拟机。
- 直通显卡的虚拟机不能拍包含内存的快照,只拍硬盘的快照和关机后备份没问题。
- 少数带反作弊的网游会检测到自己在虚拟机里,拒绝运行。
- 授权:需要正版 Windows;评估版 90 天到期后要重装或者换正式授权。
- 本页的菜单名称按 PVE 9 和 Windows 11 写的,“为 VirtIO 驱动添加额外的驱动器”等选项如果名字对不上,以实际界面为准,见 待实机确认。