PVE安装实战日记 – 打造完美的虚拟化环境

家里有一台从初中陪伴我的老伙计,由于上了大学只有有了新爱,这台电脑就久久吃灰了,于是我打算折腾一下它,让他同时在家里给家人做电脑的同时能让我跑一些服务

前言

经过深入的调研和实践,我最终确定了这样的架构方案:

最终落地方案:PVE与Windows VM、Debian系统盘都安装在A盘;B盘整盘直通给Windows作为数据盘;显卡与USB控制器直通给Windows VM,实现接近原生的性能体验。

这个方案的优势在于:

  • 🎯 性能最优:显卡直通提供原生3D性能
  • 💾 存储灵活:B盘直通避免虚拟化开销
  • 🔄 管理便捷:系统盘统一管理,数据盘独立控制
  • 🛡️ 风险分离:系统崩溃不影响数据盘

第一步:准备工作

1.1 镜像文件准备

在开始之前,我准备了以下必要的ISO镜像文件:

1

从截图可以看到,我准备了三个关键文件:

  • 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界面,开始创建虚拟机:

2

常规配置参数

  • 节点:pve
  • VM ID:101(可根据需要调整)
  • 名称:Windows10

2.2 操作系统配置

3

关键配置点

  • 使用CD/DVD光盘镜像文件(ISO)
  • 存储:local
  • ISO镜像:选择Windows10_21H2镜像
  • 客户机操作系统:Microsoft Windows
  • 版本:10/2016/2019
  • 为VirtIO驱动程序添加额外驱动器(重要!)

2.3 系统固件配置

4

核心系统参数

  • 显卡:默认
  • 机型: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 磁盘配置

5

存储配置详解

  • 总线/设备:VirtIO Block(高性能虚拟存储)
  • 存储:local-lvm(A盘空间)
  • 磁盘大小:250 GiB(根据需要调整)
  • 缓存:默认(无缓存)
  • 格式:raw(最佳性能)
  • IO thread:启用多线程IO

2.5 CPU配置

6

CPU参数设置

  • 插槽:1
  • 核心:4(根据物理CPU调整)
  • 类别:host(直通宿主CPU特性,性能最佳)

性能建议:使用host类型CPU可以获得最佳性能,同时记得在高级选项中启用"Hidden KVM"避免某些软件检测。

2.6 配置确认

7

最终配置汇总:

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 添加驱动光盘

8

为了在Windows安装过程中能够识别VirtIO设备,需要添加驱动光盘:

配置参数

  • 总线/设备:IDE 0
  • 存储:local
  • ISO镜像:virtio-win-0.1.271.iso

3.2 调整启动顺序

9

确保正确的启动顺序:

  1. ide2: Windows10 ISO镜像(优先启动)
  2. virtio0: 250G虚拟硬盘
  3. net0: 网络设备
  4. ide0: VirtIO驱动ISO

📋 操作提示:通过拖拽可以重新排序启动设备,确保Windows安装盘优先启动。

第四步:Windows系统安装

4.1 加载VirtIO驱动

10

在Windows安装过程中,当系统提示"选择要安装的驱动程序"时:

  1. 浏览到VirtIO驱动光盘
  2. 选择适合的驱动程序:
    • Red Hat VirtIO SCSI controller (存储驱动)
    • 其他相关网络和存储驱动

⚠️ 关键步骤:如果不加载VirtIO存储驱动,Windows将无法识别虚拟硬盘!

4.2 系统安装完成

11

系统安装完成后,可以看到:

  • 标准的Windows 10界面
  • 两个光驱设备挂载:
    • VirtIO驱动光盘 (D:)
    • Windows安装光盘 (E:)

4.3 安装VirtIO完整驱动包

安装系统后,运行VirtIO驱动安装向导:

  • 安装完整的VirtIO驱动包
  • 包含网络、存储、显示等全套驱动

4.4 安装QEMU Guest Agent

13

在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盘:

  1. 打开"磁盘管理"
  2. 初始化为GPT分区表
  3. 创建新简单卷
  4. 分配盘符

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自动备份

14

配置周期备份:

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),安全便捷

总结与经验分享

✅ 成功要点

  1. 架构合理:系统盘集中管理,数据盘直通性能
  2. 驱动完整:VirtIO驱动和Guest Agent必不可少
  3. 直通稳定:IOMMU配置和设备绑定要正确
  4. 备份完善:系统备份+数据备份双重保障

⚠️ 常见问题

  • 显卡Code 43:确保CPU设为host并启用Hidden KVM
  • USB不稳定:优先直通整个USB控制器而非单设备
  • 性能不佳:检查CPU pinning和NUMA设置
  • 备份失败:确认存储空间和权限设置

🚀 性能优化

  • 启用CPU pinning提升计算性能
  • 配置hugepages减少内存开销
  • 调整磁盘缓存策略平衡性能与安全
  • 监控IOMMU分组避免设备冲突

通过这套完整的方案,我成功构建了一个高性能、高可用的PVE虚拟化环境,既满足了日常办公需求,又保持了优秀的游戏和创作体验。这个架构经过实际使用验证,稳定可靠,值得推荐给有类似需求的用户。

博客内容均系原创,未经允许严禁转载!
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇