外观
创建第一个虚拟机
创建向导有七个标签页,选项不少。这篇把每一项的含义和该怎么选说清楚,然后装一台 Debian 作为练手。
开始之前
先上传 ISO
节点 → local → ISO Images → Upload,选择本地的 ISO 文件。
大文件上传慢的话,用「Download from URL」让 PVE 直接下载更快:
sh
# 或者在宿主机 shell 里直接下,放到这个目录即可
cd /var/lib/vz/template/iso/创建向导逐项讲解
点右上角 Create VM。
General
| 字段 | 说明 |
|---|---|
| Node | 单机就一个选项 |
| VM ID | 客户机编号,默认从 100 开始。建议规划一下:比如 1xx 给基础设施,2xx 给测试 |
| Name | 显示名。只能用字母数字和连字符,不能有中文和下划线 |
| Start at boot | 宿主机开机时自动启动这台虚拟机 |
Start at boot 和启动顺序
勾了这项之后,还可以在 虚拟机 → Options → Start/Shutdown order 里设置顺序和延迟。跑软路由或 DNS 的虚拟机应该排在前面,依赖它们的排后面。
OS
选上一步上传的 ISO,并设置 Guest OS 的类型和版本。
这个选项不是摆设
Guest OS 类型会影响 PVE 给虚拟机的默认硬件配置和一些 QEMU 参数。选 Windows 和选 Linux,生成的配置是不同的。照实选。
System
这一页决定了虚拟机的「主板」,装完系统之后改动其中几项会让系统起不来。
| 字段 | 建议 | 说明 |
|---|---|---|
| Graphic card | Default | 除非要做显卡直通 |
| Machine | q35(现代系统)或 i440fx(老系统) | q35 提供 PCIe,做直通必须用它 |
| BIOS | OVMF (UEFI) 或 SeaBIOS | 现代系统用 UEFI;老系统或不确定时用 SeaBIOS 更省事 |
| Add EFI Disk | 选 UEFI 时自动勾上 | 存放 UEFI 变量,必须有 |
| SCSI Controller | VirtIO SCSI single | 性能最好,且支持给每块盘开 iothread |
| Qemu Agent | 勾上 | 见下文 |
| Add TPM | 只在装 Windows 11 时需要 |
Machine 和 BIOS 装完之后别乱改
把已经装好的系统从 SeaBIOS 改成 UEFI(或反过来),系统会直接起不来,因为引导方式完全不同。创建时就定好。
Machine 类型从 i440fx 改成 q35 也可能导致设备编号变化,Windows 客户机尤其敏感。
Qemu Agent 要两边都做
这里勾上只是告诉 PVE 去和 agent 通信。还必须在客户机里安装 qemu-guest-agent 软件包,否则没有效果,而且关机会变慢(PVE 等待 agent 响应直到超时)。见 VirtIO 驱动与 QEMU Guest Agent。
Disks
| 字段 | 建议 | 说明 |
|---|---|---|
| Bus/Device | SCSI | 配合 VirtIO SCSI single 控制器,性能最好 |
| Storage | local-lvm 或你的 ZFS 池 | 见存储模型 |
| Disk size | 按需,Linux 32 GB 起步够用 | 可以扩大,缩小很麻烦 |
| Cache | Default (No cache) | 见下文 |
| Discard | 勾上 | 让删除的空间能回收 |
| IO thread | 勾上 | 配合 VirtIO SCSI single,给磁盘单独的 IO 线程 |
| SSD emulation | 底层是 SSD 就勾上 | 让客户机知道自己在 SSD 上 |
Cache 不要随便改成 writeback
网上有教程建议把 Cache 设成 Writeback 提升性能。它确实更快,但宿主机突然断电时,已经「写入成功」的数据可能还在内存里没落盘,客户机文件系统会损坏。
默认的 No cache 是安全的选择。真要改,先确保有 UPS,并且理解你在拿什么换性能。
磁盘大小怎么估
用 LVM-Thin 或 ZFS 这类精简分配的存储时,分配 64 GB 不等于立刻占用 64 GB,实际只占用写入的部分。所以可以分得宽裕一些。但别忘了这也意味着超额分配的风险,见 local 与 local-lvm。
CPU
| 字段 | 建议 |
|---|---|
| Sockets | 1(除非你在模拟多路服务器) |
| Cores | 从 2 开始,不够再加 |
| Type | host |
Type 为什么建议 host
host 表示把宿主机 CPU 的全部指令集特性透传给客户机,性能最好。代价是:这台虚拟机只能迁移到 CPU 型号兼容的节点上。
单机环境用 host 没有任何理由不用。集群环境如果节点 CPU 型号不同,改用 x86-64-v2-AES 这类通用型号,换取迁移自由。
别一上来就给满核
给虚拟机分配的 vCPU 总数可以超过物理核心数(超额分配),宿主机会调度。但单台虚拟机分太多核反而可能变慢(调度开销、NUMA 跨节点)。从 2 核开始,观察负载再加。
Memory
| 字段 | 说明 |
|---|---|
| Memory | 分配的内存上限 |
| Minimum memory | 填了就启用气球驱动(ballooning),内存在这个区间浮动 |
| Ballooning Device | 默认勾上 |
气球驱动不是万能的
Ballooning 让宿主机在内存紧张时从客户机「收回」内存。它需要客户机里有对应驱动,而且收回是有延迟的,应付不了瞬时的内存压力。
更重要的是:有些客户机不适合 ballooning,比如跑 ZFS 的 NAS 虚拟机、跑数据库的虚拟机。这些应该给固定内存(Minimum 留空)。
Network
| 字段 | 建议 |
|---|---|
| Bridge | vmbr0 |
| Model | VirtIO (paravirtualized) |
| VLAN Tag | 留空,除非在做 VLAN |
| Firewall | 内网环境可以不勾 |
装系统时如果认不到 VirtIO 网卡,临时换成 E1000,装完驱动再换回来。
Confirm
检查一遍配置。不要勾 Start after created——先看一眼生成的配置再开机。
安装系统
点虚拟机 → Start,然后点 Console。
按正常流程装 Debian 即可。装完之后:
- 虚拟机 → Hardware → CD/DVD Drive,把 ISO 弹出(改成 Do not use any media),避免下次又从光盘启动。
- 重启进入系统。
装完必做的两件事
在客户机内部执行:
sh
# 在虚拟机内部执行(Debian/Ubuntu)
apt update
apt install -y qemu-guest-agent
systemctl enable --now qemu-guest-agent装完回到 PVE 的 Summary 页面,应该能看到虚拟机的 IP 地址。看得到 IP,说明 agent 通了。
详细说明和 Windows 的做法见VirtIO 驱动与 QEMU Guest Agent。
看看生成的配置
每台虚拟机的配置是 /etc/pve/qemu-server/<vmid>.conf 这个纯文本文件:
sh
cat /etc/pve/qemu-server/100.conf输出类似:
text
agent: 1
bios: ovmf
boot: order=scsi0;ide2
cores: 2
cpu: host
machine: q35
memory: 4096
net0: virtio=BC:24:11:xx:xx:xx,bridge=vmbr0
scsi0: local-lvm:vm-100-disk-1,discard=on,iothread=1,size=32G,ssd=1
scsihw: virtio-scsi-single这个文件值得备份
/etc/pve 下的所有内容是 PVE 的配置全集。备份虚拟机磁盘的同时,也要备份这个目录,否则重装宿主机之后所有客户机定义都要重建。见备份与恢复。
检查结果
逐项确认:
- 虚拟机能正常开机、关机(用 Shutdown 而不是 Stop,前者是正常关机)。
- Summary 页能看到 IP 地址(说明 agent 工作)。
- 客户机内部能 ping 通网关和外网。
- 宿主机
qm status <vmid>输出status: running。 qm config <vmid>输出的配置和你的预期一致。
常见问题
开机后黑屏、没进安装界面。 查 Options → Boot Order,确认光驱排在硬盘前面。UEFI 模式下有时需要进 EFI Shell 手动选。
装完系统重启又进了安装程序。 ISO 没弹出。见上文。
Console 里键盘输入乱跳。 noVNC 的已知体验问题,装好系统后改用 SSH 连接客户机。
关机很慢,转圈很久。 通常是勾了 Qemu Agent 但客户机里没装,PVE 在等 agent 响应直到超时。装上 qemu-guest-agent 即可。