pages.chenos.dev / workstation / Windows 虚拟机

手把手:在 PVE 上装 Windows 11 虚拟机(含显卡直通)

从准备镜像、创建虚拟机、加载 VirtIO 驱动、安装 Windows,到用 RDP 远程使用;需要时再直通一张独立显卡,用 Moonlight 串流或者直接接显示器。

2026-10-06前置:PVE 已安装;远程访问需要 Tailscale

先定内存和版本

用途内存硬盘
偶尔用:测试网页、跑 Windows 专用软件、处理 Office 文档6–8G64G
日常用:开着浏览器和办公软件,长时间挂着8G80–100G
在里面做开发:Visual Studio、Docker Desktop、WSL212–16G128G 以上

放进 64G 内存的规划里:可以分给虚拟机的约 56G,例如 agent-01 16G + 4 台 agent 各 8G + Windows 8G。Windows 平时关机、要用时再开,关机的虚拟机不占内存。

版本要选专业版(Pro)或企业版。家庭版不能被远程桌面连接(只能当客户端),而这台虚拟机主要就是靠远程桌面使用的。只是临时测试,可以用微软官网的 Windows 11 企业版 90 天评估版。

第一部分:准备两个镜像

1.1Windows 11 安装镜像

  1. 在你的电脑上打开微软官网 microsoft.com/software-download/windows11,找到 下载 Windows 11 磁盘映像 (ISO),选择语言后下载(约 6–7G)。评估版在微软 Evaluation Center 下载
  2. 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
下载很慢的话,可以临时给 PVE 设置代理:数据中心 → 选项 → HTTP 代理,填 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(半虚拟化)
确认先不要勾选“创建后启动”,点 完成
Windows 11 强制要求 UEFI 和 TPM 2.0,“系统”这一页漏了任何一项,安装程序都会提示“这台电脑无法运行 Windows 11”。

创建好后检查一下 硬件 页:应该有两个 CD/DVD 驱动器,一个是 Windows 安装镜像,一个是 virtio-win。没有自动加上驱动光盘的话,手动 添加 → CD/DVD 驱动器,选 virtio-win.iso。

第三部分:安装 Windows

3.1从光盘启动

  1. 先打开 控制台,再点 启动
  2. 屏幕上出现 Press any key to boot from CD or DVD... 时,马上按任意键。这行字只显示几秒钟
错过了的话,会进入 UEFI 界面或者网络启动。点控制台左侧工具栏里的 Ctrl+Alt+Del 按钮重启,这次盯着屏幕按键。

3.2安装向导

  1. 语言、时间格式、键盘:按需选择,下一步 → 安装 Windows 11
  2. 产品密钥:有就填,没有点 我没有产品密钥
  3. 版本:选 Windows 11 专业版(评估版镜像会直接是企业版)
  4. 到“选择安装位置”时,列表是空的,看不到硬盘。这是正常的,下一步加载驱动

3.3加载硬盘驱动和网卡驱动

  1. 点 加载驱动程序 → 浏览 → 打开 virtio-win 光盘 → 选 vioscsi\w11\amd64 → 确定 → 选中列出的驱动 → 安装
  2. 硬盘出现了。再点一次“加载驱动程序”,这次选 NetKVM\w11\amd64,把网卡驱动也装上。这样后面联网设置时就有网络了
  3. 选中那块 100G 的硬盘 → 下一步,开始安装。中间会自动重启几次,重启时不要再按键,否则又会从光盘启动

3.4首次设置(OOBE)

第四部分:装好之后

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
LinuxRemmina

地址填 Windows 虚拟机的 IP(在 PVE 概要里看,建议在路由器里绑定固定 IP),用户名用你登录 Windows 的账号。在外面时,开着 Tailscale 也能连。

不要把 3389 端口映射到公网,这是被攻击最多的端口之一。只通过内网或 Tailscale 连接。

5.2卡不卡

场景体验
家里局域网:办公、浏览网页、写代码✅ 流畅
家里局域网:看视频、动画多的网页⚠️ 能看,但会掉帧
外面,Tailscale 直连✅ 基本流畅,打字稍有一点延迟
外面,Tailscale 走中继❌ 明显卡顿
3D、游戏、剪视频❌ 不行,要直通显卡(第六部分)

会掉帧的原因是虚拟机里没有显卡,画面编码全靠 CPU。改善办法:

第六部分:直通独立显卡(可选)

把一张真实的显卡整张交给 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 供电线
核显(CPU 自带的显卡)直通到 Windows 在 Ultra 9 285 这一代还不成熟,需要第三方 ROM 文件,常见“驱动装上了却没有画面”,不建议依赖。核显更适合分给 LXC 容器做转码、推理。

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

  1. Windows 先关机
  2. win11 → 硬件 → 添加 → PCI 设备 → 原始设备,选这张显卡
  3. 勾选 所有功能(All Functions,连显卡上的声卡一起)和 PCI-Express;主 GPU 按下面两种场景决定
  4. 硬件 → 内存:取消勾选 Ballooning 设备。直通了显卡的虚拟机,内存会被全部锁定,按满额占用

场景 A:不接显示器,用 Moonlight 串流

  1. 先不勾选“主 GPU”,保留 PVE 的虚拟显示器救急
  2. 开机,用 RDP 连进去,安装 NVIDIA 官方驱动
  3. 解决“没接显示器不出画面”:在显卡上插一个 HDMI 假负载(十几块钱),或者在 Windows 里装虚拟显示器驱动。否则串流过去是黑屏
  4. 安装 Sunshine,设置用户名密码,设成开机自启
  5. 在你的电脑或手机上装 Moonlight,找到这台 Windows(不在同一个局域网就手动输入 IP),输入 Sunshine 显示的配对码
  6. (可选)串流稳定后,把 硬件 → 显示 改成“无”,避免 Sunshine 捕获到错误的屏幕

日常使用:PVE 里点启动 → Moonlight 里点这台 Windows。Moonlight 不能帮你开机,要先在 PVE 里启动。

场景 B:接显示器,坐在工作站前面用

ThinkStation
├── 主板上的视频接口(核显)── PVE 自己的命令行画面(救急时用)
└── 独立显卡的接口 ─────────── 显示器 ← Windows 桌面
     USB 键盘鼠标 ─────────── 直通给 Windows
  1. 显示器接到独立显卡上;可以用显示器的第二个输入口接主板接口,救急时切换
  2. PCI 设备勾选 主 GPU,硬件 → 显示 改成“无”。有真实显示器,就不需要假负载了
  3. 键盘鼠标:硬件 → 添加 → USB 设备,按“厂商/设备 ID”选。想插什么都直接归 Windows,最稳的是加一张 PCIe USB 扩展卡,把它整张直通过去
  4. 选项 → 开机自动启动 → 是。按电源键开机,大约 1 分钟后显示器上就出现 Windows
不要按机箱电源键来开关 Windows。电源键控制的是整台工作站,按一下 PVE 会把所有虚拟机连同 agent 全部关掉。Windows 在 Windows 里面关机;要再打开,在 PVE 网页上点启动。

两种场景可以同时用:接了显示器也可以装 Sunshine,在家坐着用显示器,出门用 Moonlight。

6.4救急的退路

  1. 先试 RDP:只要 Windows 正常开机、网络正常就能连上
  2. 保留了虚拟显示器的话,用 PVE 网页控制台看画面
  3. 还不行:Windows 关机,在 硬件 里把这块 PCI 设备移除,把“显示”改回默认。虚拟机回到普通状态,控制台一定能看到画面,修好再加回去

注意事项