基于 Intel i5-12500 + H610 主板 + 2TB NVMe 平台,搭建一台兼顾虚拟化测试与日常开发的机器。本文记录了完整的配置过程,包括踩过的坑和最终的解决方案。
需求与方案选择#
目标很明确:一台机器同时满足两个用途——跑虚拟机做测试,以及通过远程桌面进行日常开发。
这就引出了一个前置问题:是先装 Proxmox 再加桌面,还是先装 Ubuntu 再加虚拟化?
最终选择:Proxmox VE + XFCE 桌面。 理由如下:
- Proxmox 底层就是 Debian,加装桌面环境是常规操作
- 虚拟化(KVM/LXC)作为一等公民,性能和功能完整
- Web 管理界面(端口 8006)开箱即用
- 反过来在 Ubuntu 上装 Proxmox,官方不支持,依赖冲突频发
确定方案后,规划一下整体的磁盘分配。Proxmox 默认把大部分空间给了 LVM-thin pool(虚拟机存储),根分区只有约 96GB。既然要兼顾日常开发,需要重新规划:
| 用途 | 大小 | 挂载点/说明 |
|---|---|---|
| 系统根分区 | 200GB | / |
| 数据分区 | 300GB | /data |
| 虚拟机存储 | ~1.37TB | LVM-thin pool |
| Swap | 8GB | swap |
基础配置:APT 源#
装完 Proxmox VE 9.1 后,第一件事是 apt update,然后就会看到熟悉的 401 Unauthorized——企业订阅源没有许可证。
PVE 9 基于 Debian Trixie,源文件格式从传统的 .list 变成了 deb822 格式的 .sources。先看看有哪些源文件:
| |
禁用企业源#
查看源文件内容会发现,默认没有 Enabled 字段,需要手动添加:
| |
添加社区无订阅源#
| |
验证:
| |
没有 401 错误即可继续。
磁盘分区调整#
源配置好后,趁系统还是干净状态,先把分区调整到位。
关键限制:LVM-thin pool 不能直接缩减#
直觉上会想用 lvreduce 缩小 thin pool,但实际执行会报错:
| |
正确的做法是:确认 thin pool 为空(Data% 为 0.00),删掉后重建。
完整操作#
| |
验证:
| |
重建后 Proxmox Web UI 中的 local-lvm 存储会自动恢复。
虚拟化能力验证#
分区就绪后,确认一下硬件虚拟化支持是否正常:
| |
i5-12500 + H610 平台验证结果:VT-x 正常,IOMMU 正常启用,支持 PCI 设备直通。确保 BIOS 中 VT-x 和 VT-d 已开启。
关于 12 代核显直通#
UHD 770 理论上支持直通,但有明显限制:
- GVT-d(整卡直通):可用,但宿主机会失去显示输出
- GVT-g(核显拆分/虚拟化):12 代起 Intel 官方不再支持
- SR-IOV:社区有 i915-sriov-dkms 补丁方案,可实现核显拆分,但稳定性一般
实际建议:如果虚拟机不需要 GPU 加速,VirtIO 显卡 + SPICE 协议完全够用。需要认真做 GPU 直通的话,买张独显(GT730 亮机卡或二手 Tesla P4)更省心。
桌面环境:XFCE + RDP 远程#
虚拟化层没问题了,接下来搭建日常使用的桌面环境。
安装#
| |
踩坑记录:如果不装
dbus-x11,RDP 登录后会弹出 “Unable to contact settings server - Failed to execute child process dbus-launch” 错误。这个包容易遗漏,必须一起装。
配置 XRDP 使用 XFCE#
| |
确认 3389 端口已监听:
| |
之后用 Windows 远程桌面或任何 RDP 客户端连接即可。
基础工具链#
桌面可用后,把日常开发和运维需要的工具装齐:
| |
Debian Trixie 注意:
neofetch已停更并从仓库移除,替代品为fastfetch;software-properties-common在 Trixie 中已不再需要,直接安装会报 “Unable to locate package”。
Docker 安装与共存配置#
安装#
| |
Docker 与 Proxmox 共存的注意事项#
两者运行在同一台宿主机上,有两个需要注意的点。
iptables 规则冲突#
Docker 安装后会将 FORWARD 链的默认策略设为全局 DROP,所有未被前置规则匹配的转发流量都会被丢弃。
Proxmox 默认的桥接模式下,虚拟机流量走的是二层桥接(MAC 转发),不经过 iptables 的 FORWARD 链,所以大多数场景下不受影响。但有两种情况会踩坑:
- 内核参数
net.bridge.bridge-nf-call-iptables为 1(某些内核默认开启),此时桥接流量也会过 iptables,FORWARD DROP 就会拦截vmbr0的流量 - 虚拟机使用 NAT 模式而非桥接
对应的解决方案:
- 第一种情况:
sysctl -w net.bridge.bridge-nf-call-iptables=0 - NAT 端口转发场景:建议使用 realm 等用户态端口转发工具,绕开 iptables 规则冲突
网段冲突#
Docker 默认使用 172.17.0.0/16,可能与 Proxmox 虚拟机网络的常用网段撞车。
推荐配置#
在保留二者完整功能的前提下,将 Docker 网段迁移到不常用的私有地址段,同时限制日志大小并启用 live-restore:
| |
配置说明:
- 网段 10.255.0.0/16:属于
10.0.0.0/8私有地址段(RFC 1918),位于 10 段尾部,日常几乎无人使用,与其他网络冲突的概率极低 - 日志限制:每个容器最多 3 个日志文件,每个 10MB,防止日志撑爆磁盘
- live-restore:重启 Docker daemon 时容器不会跟着停止,适合跑长期服务
最终成果#
完成以上步骤后,这台机器具备了以下能力:
- 通过
https://IP:8006管理虚拟机和容器(Proxmox Web UI) - 通过 RDP 端口 3389 远程访问 XFCE 桌面
- 完整的 Docker 环境,与 Proxmox 网络互不干扰
- 合理的存储分配:200GB 系统 + 300GB 数据 + 1.37TB 虚拟机
一些后续建议:
- 创建非 root 用户用于日常桌面登录
- 折腾系统前善用 LVM 快照做备份