PVE 的本质

Proxmox VE(Proxmox Virtual Environment)是基于 Debian 的虚拟化平台,使用 Web 界面和命令行统一管理虚拟机、LXC 容器、存储、网络、备份和集群。

  • KVM 虚拟机(VM):提供完整的虚拟硬件,适合运行 Windows、Linux 等独立操作系统。
  • LXC 容器(CT):共享 PVE 宿主机内核,启动快、开销小,适合运行 Linux 服务。
  • 节点(Node):一台安装 PVE 的物理主机。
  • 集群(Cluster):多个 PVE 节点组成的管理和高可用域。
  • 存储(Storage):保存虚拟磁盘、容器 rootfs、ISO、模板、备份和片段配置。

常用入口:

1
https://PVE_IP:8006

首次登录使用 root@pam 和安装时设置的密码。自签名证书会触发浏览器告警,生产环境可以替换为受信任证书。

安装前准备

1
2
3
4
5
6
7
8
9
10
11
# 查看 CPU 是否支持硬件虚拟化,输出应包含 vmx(Intel)或 svm(AMD)
grep -E --color 'vmx|svm' /proc/cpuinfo

# 查看内存、磁盘和 PCI 设备
free -h
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
lspci

# 查看当前系统版本和主机名
cat /etc/os-release
hostnamectl

安装前确认以下事项:

  1. BIOS/UEFI 已开启 Intel VT-x 或 AMD-V,以及 IOMMU(需要 PCI 直通时)。
  2. PVE 节点使用固定 IP,主机名能够通过 DNS 或 /etc/hosts 解析。
  3. 系统盘、虚拟机数据盘和备份盘尽量分离,避免单盘故障同时影响运行和备份。
  4. 安装 PVE ISO 会重新分区并清空目标磁盘,执行前确认安装盘名称。

系统信息和软件源

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看 PVE 和 Debian 版本
pveversion -v
cat /etc/debian_version

# 查看订阅源和非订阅源
cat /etc/apt/sources.list.d/pve-enterprise.list
cat /etc/apt/sources.list.d/pve-no-subscription.list

# 更新软件包索引
apt update

# 升级 PVE,生产环境执行前先阅读变更说明
apt full-upgrade

# 重启节点
reboot

没有企业订阅时,可以使用 no-subscription 源。不要同时启用互相冲突的 enterprise 和 no-subscription 源;修改软件源后检查 apt update 是否报错。

节点和 Web 服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 查看节点状态
pvesh get /nodes
pvesh get /nodes/$(hostname)/status

# 查看关键服务
systemctl status pveproxy
systemctl status pvedaemon
systemctl status pvestatd
systemctl status corosync

# 重启 Web 管理服务,通常不会停止虚拟机
systemctl restart pveproxy
systemctl restart pvedaemon

# 查看 PVE 服务日志
journalctl -u pveproxy -f
journalctl -u pvedaemon -f
journalctl -u pvestatd -f

PVE 的配置主要位于 /etc/pve,该目录由 pmxcfs 管理。集群模式下不要直接用编辑器批量改动其中的文件,优先使用 Web 界面、pveshqmpct

网络配置

PVE 常用 Linux Bridge(通常名为 vmbr0)把物理网卡连接给虚拟机和容器。物理网卡一般作为 bridge port,不直接配置业务 IP。

1
2
3
4
5
6
7
8
9
10
# 查看网卡、桥接和地址
ip -br addr
bridge link
ip route

# 查看 PVE 网络配置
cat /etc/network/interfaces

# 检查网络配置语法
ifreload -a

静态 IP 的典型配置(按实际网卡名和网段修改):

1
2
3
4
5
6
7
8
9
10
11
12
13
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual

auto vmbr0
iface vmbr0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
1
2
3
4
5
6
7
# 查看虚拟机 tap 设备和桥接转发
ip link show type bridge
bridge fdb show br vmbr0

# 测试网关和 DNS
ping -c 4 192.168.1.1
getent hosts download.proxmox.com

远程修改 /etc/network/interfaces 有断网风险。应准备本地控制台或带外管理,并在执行 ifreload -a 前确认网关、掩码和物理网卡名称。

存储

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 查看 PVE 存储配置和状态
pvesm status
cat /etc/pve/storage.cfg

# 查看 ZFS 池(使用 ZFS 时)
zpool status
zfs list

# 查看 LVM 和 LVM-thin
pvs
vgs
lvs

# 查看磁盘空间和 inode
df -h
df -ih

常见存储类型:

  • local:目录存储,通常位于 /var/lib/vz,可保存 ISO、模板、备份和磁盘镜像。
  • local-lvm:LVM-thin 存储,适合虚拟磁盘,不适合直接保存 ISO 和备份文件。
  • Directory:挂载额外磁盘、NFS 或 SMB 后,以目录形式加入 PVE。
  • ZFS:提供校验、快照和镜像/RAID 能力,但需要足够内存,且不建议再叠加硬件 RAID。
1
2
3
4
5
6
7
8
9
# 查找占用空间较大的目录
du -xhd1 /var/lib/vz | sort -h

# 查看存储中的内容
pvesm list local
pvesm list local-lvm

# 重新扫描 LVM(确认设备后执行)
vgscan

不要直接删除正在使用的虚拟磁盘文件。先确认 VM/CT 配置、快照和备份,再通过 qm disk unlinkqm destroy 或 Web 界面执行。

虚拟机(VM)管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 查看虚拟机列表
qm list

# 查看虚拟机配置
qm config 100

# 创建虚拟机,100 为 VM ID
qm create 100 --name debian-01 --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0

# 挂载 ISO,并设置启动顺序
qm set 100 --ide2 local:iso/debian.iso,media=cdrom
qm set 100 --boot 'order=ide2;scsi0'

# 创建磁盘并挂载
qm set 100 --scsihw virtio-scsi-single
qm set 100 --scsi0 local-lvm:32

# 启动、停止、重启
qm start 100
qm shutdown 100
qm stop 100
qm reboot 100

# 查看运行状态和任务
qm status 100
pvenode task list

# 进入虚拟机串口(虚拟机需配置串口)
qm terminal 100
1
2
3
4
5
6
7
8
9
# 调整 CPU、内存和网卡
qm set 100 --cores 4 --memory 4096
qm set 100 --net0 virtio=AA:BB:CC:DD:EE:01,bridge=vmbr0,firewall=1

# 调整磁盘大小,只能扩容,文件系统仍需在客户机内扩容
qm resize 100 scsi0 +20G

# 查看磁盘映射
qm disk list 100

虚拟机内扩容通常还需要执行分区、LVM 或文件系统扩容。例如 ext4 文件系统可以在确认设备后使用 resize2fs,XFS 使用 xfs_growfs。缩容比扩容风险高,不建议直接操作原盘。

LXC 容器(CT)管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 查看容器列表
pct list

# 查看容器配置
pct config 200

# 查看可用模板
pveam update
pveam available --section system

# 下载 Debian 模板
pveam download local debian-12-standard_12.7-1_amd64.tar.zst

# 创建容器
pct create 200 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
--hostname app-01 --cores 2 --memory 1024 --swap 512 \
--rootfs local-lvm:8 --net0 name=eth0,bridge=vmbr0,ip=dhcp \
--password 'change-this-password'

# 启动、停止和进入容器
pct start 200
pct shutdown 200
pct stop 200
pct enter 200

# 执行单条命令
pct exec 200 -- ip addr

特权容器(privileged)与非特权容器(unprivileged)权限模型不同。除非明确需要宿主机设备或特殊内核能力,优先使用非特权容器;挂载目录、Docker-in-LXC、NFS 和设备直通要单独评估安全边界。

模板、克隆和 Cloud-Init

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 将已关机的虚拟机转换为模板
qm template 100

# 从模板克隆完整虚拟机
qm clone 100 101 --name debian-02 --full 1 --storage local-lvm

# 查看 Cloud-Init 配置
qm cloudinit dump 101 user
qm cloudinit dump 101 network

# 设置 Cloud-Init 用户、密码和 SSH 公钥
qm set 101 --ciuser admin --cipassword 'change-this-password'
qm set 101 --sshkeys ~/.ssh/id_ed25519.pub
qm set 101 --ipconfig0 ip=192.168.1.21/24,gw=192.168.1.1

Cloud-Init 需要客户机镜像本身支持,并且虚拟机挂载 cloudinit 驱动器。克隆后检查 MAC 地址、主机名、IP 和 SSH 主机密钥是否已重新生成。

快照、备份和恢复

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 创建和查看虚拟机快照
qm snapshot 100 before-upgrade --description '升级前快照'
qm listsnapshot 100
qm rollback 100 before-upgrade
qm delsnapshot 100 before-upgrade

# 容器快照
pct snapshot 200 before-upgrade
pct listsnapshot 200

# 使用 vzdump 备份虚拟机或容器
vzdump 100 --storage backup --mode snapshot --compress zstd
vzdump 200 --storage backup --mode snapshot --compress zstd

# 查看备份文件
ls -lh /var/lib/vz/dump/

# 恢复虚拟机备份
qmrestore /var/lib/vz/dump/vzdump-qemu-100-*.vma.zst 110 --storage local-lvm

# 恢复容器备份
pct restore 210 /var/lib/vz/dump/vzdump-lxc-200-*.tar.zst --storage local-lvm

快照不是备份:快照通常依赖原存储,删除底层磁盘或存储故障时可能一起丢失。重要数据至少保留一份独立存储或远端备份,并定期执行恢复演练。

集群和高可用基础

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看集群状态
pvecm status
pvecm nodes

# 创建集群(在第一台节点执行)
pvecm create lab-cluster

# 加入已有集群(在待加入节点执行)
pvecm add 192.168.1.10

# 查看 Corosync 状态
systemctl status corosync
corosync-cfgtool -s

集群节点需要稳定、低延迟、可互通的网络和唯一主机名。加入集群前应确认节点没有旧的集群配置;生产环境不要在网络不稳定或没有仲裁条件时启用高可用。

防火墙和权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看 PVE 防火墙状态
pve-firewall status
pve-firewall compile

# 查看本机 nftables 规则(新版本)
nft list ruleset

# 查看用户、角色和 API Token
pveum user list
pveum role list
pveum token list root@pam

# 创建只读用户示例
pveum user add monitor@pve
pveum acl modify / --user monitor@pve --role PVEAuditor

PVE 防火墙有 Datacenter、Node 和 VM/CT 三个层级。放行 8006、22、集群通信和备份所需端口前,先明确访问来源;不要为了排障长期关闭所有防火墙。

硬件直通和常见检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查看 IOMMU 是否启用
dmesg | grep -Ei 'iommu|dmar|amd-vi'

# 查看 IOMMU 分组
find /sys/kernel/iommu_groups/ -type l

# 查看虚拟机锁和任务
qm status 100
qm unlock 100
pvenode task list --source all

# 查看最近的系统和内核日志
journalctl -b -p warning
dmesg -T | tail -n 100

qm unlock 只应在确认没有备份、迁移或快照任务仍在运行时使用。任务中断后先检查 pvenode task list 和对应日志,避免并发操作损坏虚拟磁盘。

常见排障路径

  1. Web 页面打不开:检查 ip addrip routesystemctl status pveproxy,再查看 journalctl -u pveproxy
  2. 虚拟机无法启动:执行 qm config <vmid>qm status <vmid>,检查存储状态、磁盘锁、启动顺序和任务日志。
  3. 存储显示为 unknown/offline:执行 pvesm statusdf -hmount,确认挂载点、NFS/SMB 连通性和权限。
  4. 虚拟机无网络:检查 vmbr0、物理网卡链路、VLAN tag、客户机网卡配置和上游交换机端口。
  5. 迁移失败:确认两端节点时间、DNS、集群状态、CPU 兼容性、共享存储和 SSH/集群通信正常。
  6. 备份失败:检查备份目标空间、vzdump 任务日志、快照模式兼容性和客户机磁盘是否存在错误。
1
2
3
4
5
6
7
8
9
# 查看所有失败的 systemd 单元
systemctl --failed

# 查看 PVE 任务日志
pvenode task list --source all
tail -n 200 /var/log/pve/tasks/index

# 查看任务详情,UPID 从任务列表中取得
cat /var/log/pve/tasks/<UPID>

经验总结

  1. PVE 宿主机尽量只承担虚拟化和基础管理职责,业务服务放到虚拟机或 LXC 中。
  2. 生产节点使用固定 IP、可靠 DNS/NTP 和独立的管理网络,先解决基础设施再排查虚拟机问题。
  3. 修改网络、存储和集群配置前,先备份 /etc/pve 相关配置并准备本地控制台。
  4. 快照用于短期回滚,备份用于灾难恢复;重要备份必须放在独立存储并定期验证可恢复性。
  5. 所有涉及 qm destroypct destroy、磁盘删除、存储格式化和 zpool 操作的命令,都要先核对节点、VMID、磁盘和目标路径。