家里有一台从初中陪伴我的老伙计,由于上了大学只有有了新爱,这台电脑就久久吃灰了,于是我打算折腾一下它,让他同时在家里给家人做电脑的同时能让我跑一些服务
前言
经过深入的调研和实践,我最终确定了这样的架构方案:
最终落地方案:PVE与Windows VM、Debian系统盘都安装在A盘;B盘整盘直通给Windows作为数据盘;显卡与USB控制器直通给Windows VM,实现接近原生的性能体验。
这个方案的优势在于:
- 🎯 性能最优:显卡直通提供原生3D性能
- 💾 存储灵活:B盘直通避免虚拟化开销
- 🔄 管理便捷:系统盘统一管理,数据盘独立控制
- 🛡️ 风险分离:系统崩溃不影响数据盘
第一步:准备工作
1.1 镜像文件准备
在开始之前,我准备了以下必要的ISO镜像文件:
从截图可以看到,我准备了三个关键文件:
- Windows10_21H2_19044.1618_X64.iso (1.9GB) - Windows 10系统镜像
- debian-12.1.0-amd64-netinst.iso (702MB) - Debian 12网络安装镜像
- virtio-win-0.1.271.iso (726MB) - VirtIO虚拟化驱动程序
💡 经验提示:VirtIO驱动对于虚拟机性能至关重要,务必准备最新版本。
1.2 PVE基础配置
在PVE安装完成后,首先进行基础配置优化:
# 1. 开启内核转发(PVE 9推荐方式)
cat >/etc/sysctl.d/99-forwarding.conf <<'EOF'
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
EOF
sysctl --system
# 2. 配置电源键优雅关机
sed -i 's/^#\?HandlePowerKey=.*/HandlePowerKey=poweroff/' /etc/systemd/logind.conf
systemctl restart systemd-logind
# 3. 启用IOMMU(为GPU/USB直通做准备)
# PVE 9使用systemd-boot的情况:
grep -q 'iommu=pt' /etc/kernel/cmdline || \
sed -i 's/$/ intel_iommu=on amd_iommu=on iommu=pt/' /etc/kernel/cmdline
proxmox-boot-tool refresh
reboot
重启后验证IOMMU是否正常启用:
dmesg | grep -e IOMMU -e DMAR
1.3 显卡直通预配置
# 加载VFIO模块
cat >/etc/modules-load.d/vfio.conf <<'EOF'
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
EOF
# 屏蔽宿主显卡驱动(以NVIDIA为例)
cat >/etc/modprobe.d/blacklist-gpu.conf <<'EOF'
blacklist nouveau
blacklist nvidia
blacklist nvidia_drm
blacklist nvidia_modeset
EOF
第二步:创建Windows 10虚拟机
2.1 基础配置
进入PVE Web界面,开始创建虚拟机:
常规配置参数:
- 节点:pve
- VM ID:101(可根据需要调整)
- 名称:Windows10
2.2 操作系统配置
关键配置点:
- ✅ 使用CD/DVD光盘镜像文件(ISO)
- 存储:local
- ISO镜像:选择Windows10_21H2镜像
- 客户机操作系统:Microsoft Windows
- 版本:10/2016/2019
- ✅ 为VirtIO驱动程序添加额外驱动器(重要!)
2.3 系统固件配置
核心系统参数:
- 显卡:默认
- 机型:q35(支持现代硬件特性)
- BIOS:OVMF (UEFI)(现代系统推荐)
- ✅ 添加EFI磁盘
- EFI存储:local-lvm
- ✅ 添加TPM:v2.0(Windows 11要求)
- TPM存储:local-lvm
- 格式:原始磁盘映像(raw)
🔧 技术解析:q35机型提供了更好的PCIe支持,对GPU直通至关重要。OVMF固件支持现代UEFI启动,TPM 2.0是Windows 11的必要条件。
2.4 磁盘配置
存储配置详解:
- 总线/设备:VirtIO Block(高性能虚拟存储)
- 存储:local-lvm(A盘空间)
- 磁盘大小:250 GiB(根据需要调整)
- 缓存:默认(无缓存)
- 格式:raw(最佳性能)
- ✅ IO thread:启用多线程IO
2.5 CPU配置
CPU参数设置:
- 插槽:1
- 核心:4(根据物理CPU调整)
- 类别:host(直通宿主CPU特性,性能最佳)
⚡ 性能建议:使用host类型CPU可以获得最佳性能,同时记得在高级选项中启用"Hidden KVM"避免某些软件检测。
2.6 配置确认
最终配置汇总:
bios: ovmf
cores: 4
cpu: host
efidisk0: local-lvm:1,efitype=4m,pre-enrolled-keys=1
ide2: local:iso/Windows10_21H2_19044.1618_X64...1.9G__2022.3.17_.iso
machine: q35
memory: 8192
name: Windows10
net0: virtio,bridge=vmbr0,firewall=1
scsihw: virtio-scsi-single
第三步:添加VirtIO驱动
3.1 添加驱动光盘
为了在Windows安装过程中能够识别VirtIO设备,需要添加驱动光盘:
配置参数:
- 总线/设备:IDE 0
- 存储:local
- ISO镜像:virtio-win-0.1.271.iso
3.2 调整启动顺序
确保正确的启动顺序:
- ide2: Windows10 ISO镜像(优先启动)
- virtio0: 250G虚拟硬盘
- net0: 网络设备
- ide0: VirtIO驱动ISO
📋 操作提示:通过拖拽可以重新排序启动设备,确保Windows安装盘优先启动。
第四步:Windows系统安装
4.1 加载VirtIO驱动
在Windows安装过程中,当系统提示"选择要安装的驱动程序"时:
- 浏览到VirtIO驱动光盘
- 选择适合的驱动程序:
- Red Hat VirtIO SCSI controller (存储驱动)
- 其他相关网络和存储驱动
⚠️ 关键步骤:如果不加载VirtIO存储驱动,Windows将无法识别虚拟硬盘!
4.2 系统安装完成
系统安装完成后,可以看到:
- 标准的Windows 10界面
- 两个光驱设备挂载:
- VirtIO驱动光盘 (D:)
- Windows安装光盘 (E:)
4.3 安装VirtIO完整驱动包
安装系统后,运行VirtIO驱动安装向导:
- 安装完整的VirtIO驱动包
- 包含网络、存储、显示等全套驱动
4.4 安装QEMU Guest Agent
在VirtIO光盘的guest-agent目录下:
- 选择对应架构的Guest Agent:
- qemu-ga-x86_64.msi (64位系统)
- qemu-ga-i386.msi (32位系统)
安装完成后在PVE中启用:
PVE → VM → Options → QEMU Guest Agent → Enabled: Yes
🔧 功能说明:Guest Agent提供虚拟机状态监控、优雅关机、时间同步等高级功能。
第五步:硬件直通配置
5.1 B盘直通配置
查询B盘设备ID:
ls -l /dev/disk/by-id/
# 记录B盘的完整by-id路径,例如:ata-ST2000DM008-2FR102_WK11E8JZ
将B盘直通给Windows VM(假设VMID=101):
qm set 101 -scsi1 /dev/disk/by-id/ata-ST2000DM008-2FR102_WK11E8JZ
在Windows中初始化B盘:
- 打开"磁盘管理"
- 初始化为GPT分区表
- 创建新简单卷
- 分配盘符
5.2 显卡直通配置
查询显卡设备ID:
lspci -nnk | grep -A3 -E 'VGA|3D|Audio'
# 记录GPU和Audio的vendor:device ID
# 例如:10de:2484(GPU)和 10de:228b(HD Audio)
绑定到vfio-pci:
cat >/etc/modprobe.d/vfio-pci-ids.conf <<'EOF'
options vfio-pci ids=10de:2484,10de:228b disable_vga=1
EOF
update-initramfs -u
reboot
在PVE中添加显卡到VM:
- Hardware → Add → PCI Device
- ✅ Primary GPU (x-vga)
- ✅ All Functions
- ✅ PCI-Express
5.3 USB控制器直通
查询USB控制器:
lspci | grep -i usb
# 假设控制器地址为 0000:0b:00.0
添加USB控制器到VM:
qm set 101 -hostpci1 0000:0b:00.0,pcie=1
第六步:Debian虚拟机创建
创建Debian VM的过程类似,主要区别:
- 不需要TPM配置
- 系统盘同样放在A盘(local-lvm)
- 使用VirtIO网卡和存储控制器
安装Guest Agent:
apt update
apt install -y qemu-guest-agent
systemctl enable --now qemu-guest-agent
第七步:备份策略配置
7.1 PVE自动备份
配置周期备份:
cat >/etc/pve/jobs.cfg <<'EOF'
vzdump: weekly-backup
schedule: Sat 03:00
storage: local
mode: snapshot
compress: zstd
prune-backups: keep-last=3,keep-weekly=4
mailnotification: never
vmid: 101,102
EOF
从截图可以看到备份任务正在运行,显示了详细的备份进度和性能数据。
7.2 B盘数据备份
由于B盘是直通给Windows的,不在PVE备份范围内,需要在Windows内部配置:
# 使用Robocopy定期备份到NAS
$src = "D:\Data" # B盘挂载点
$dst = "\\192.168.2.10\backup\win-data"
robocopy $src $dst /MIR /R:2 /W:5 /FFT /Z /XA:H /XJ
第八步:网络组网方案
8.1 ZeroTier部署
在所有设备上安装ZeroTier:
宿主和Debian:
apt update
apt install -y zerotier-one
zerotier-cli join <networkid>
Windows:
- 下载安装ZeroTier One
- 加入相同网络ID
- 在控制台授权设备
8.2 访问策略
- 同网段:优先使用局域网IP (192.168.2.x),延迟最低
- 跨网络:使用ZeroTier IP (192.168.110.x),安全便捷
总结与经验分享
✅ 成功要点
- 架构合理:系统盘集中管理,数据盘直通性能
- 驱动完整:VirtIO驱动和Guest Agent必不可少
- 直通稳定:IOMMU配置和设备绑定要正确
- 备份完善:系统备份+数据备份双重保障
⚠️ 常见问题
- 显卡Code 43:确保CPU设为host并启用Hidden KVM
- USB不稳定:优先直通整个USB控制器而非单设备
- 性能不佳:检查CPU pinning和NUMA设置
- 备份失败:确认存储空间和权限设置
🚀 性能优化
- 启用CPU pinning提升计算性能
- 配置hugepages减少内存开销
- 调整磁盘缓存策略平衡性能与安全
- 监控IOMMU分组避免设备冲突
通过这套完整的方案,我成功构建了一个高性能、高可用的PVE虚拟化环境,既满足了日常办公需求,又保持了优秀的游戏和创作体验。这个架构经过实际使用验证,稳定可靠,值得推荐给有类似需求的用户。