跳转到内容

pveversion 到 pvesh:常用命令组合 ​

所有命令在宿主机 shell 以 root 执行。涉及破坏性操作的地方有单独标注。

系统信息 ​

sh
# PVE 及各组件版本(求助时必贴)
pveversion -v

# Debian 代号(配软件源时要对上)
cat /etc/os-release | grep VERSION_CODENAME

# 运行中的内核
uname -r

# 失败的服务
systemctl --failed

# PVE 核心服务
systemctl status pve-cluster pvedaemon pveproxy pvestatd

虚拟机(qm) ​

sh
# 列表与状态
qm list
qm status <vmid>
qm config <vmid>

# 启停
qm start <vmid>
qm shutdown <vmid>        # 正常关机(需要 agent 或 ACPI)
qm reboot <vmid>
qm stop <vmid>            # 强制,相当于拔电

# 修改配置
qm set <vmid> -memory 4096
qm set <vmid> -cores 4
qm set <vmid> -onboot 1

# 快照
qm listsnapshot <vmid>
qm snapshot <vmid> <快照名> --description "升级前"
qm rollback <vmid> <快照名>
qm delsnapshot <vmid> <快照名>

# 克隆
qm clone <源vmid> <新vmid> --name <新名字> --full

# guest agent
qm agent <vmid> ping
qm agent <vmid> network-get-interfaces

# 磁盘扩容(只能扩大)
qm resize <vmid> scsi0 +10G

这些命令不可撤销

sh
qm destroy <vmid>          # 删除客户机及其所有磁盘
qm rollback <vmid> <快照>   # 丢弃快照之后的所有改动

执行前用 qm config <vmid> 再确认一次 ID 没记错。

容器(pct) ​

sh
# 列表与状态
pct list
pct status <ctid>
pct config <ctid>

# 启停
pct start <ctid>
pct shutdown <ctid>
pct stop <ctid>

# 进入与执行
pct enter <ctid>                     # 直接进 shell,不走 SSH
pct exec <ctid> -- apt update        # 执行单条命令

# 文件传输
pct push <ctid> /宿主机路径 /容器内路径
pct pull <ctid> /容器内路径 /宿主机路径

# 挂载宿主机目录
pct set <ctid> -mp0 /宿主机路径,mp=/容器内路径

# 资源调整
pct set <ctid> -memory 1024
pct resize <ctid> rootfs +8G

不可撤销

sh
pct destroy <ctid>

容器模板(pveam) ​

sh
pveam update                          # 刷新模板索引
pveam available --section system      # 可用模板
pveam list local                      # 已下载的
pveam download local <模板文件名>

存储(pvesm) ​

sh
# 所有存储的状态与容量
pvesm status

# 某存储里的内容
pvesm list <存储名>
pvesm list <存储名> --content backup
pvesm list <存储名> --content iso

# 配置文件
cat /etc/pve/storage.cfg

空间检查(三个都要看) ​

sh
# 系统盘 / local
df -h /
du -sh /var/lib/vz/* 2>/dev/null | sort -h

# LVM-Thin:看 Data% 和 Meta%
lvs -a
vgs

# ZFS
zpool list
zfs list
zfs list -t snapshot -o name,used -s used

df 看不到 thin pool 和 ZFS 的真实情况

df 对 LVM-Thin 池完全不可见,对 ZFS 的报数也不准确。三条命令都要跑。

ZFS ​

sh
# 健康状态(最重要的一条)
zpool status -v

# 容量
zpool list        # 原始容量
zfs list          # 考虑冗余后的可用容量

# 校验
zpool scrub <池名>
zpool scrub -s <池名>      # 停止正在进行的 scrub

# ARC 占用
arc_summary | head -30

# 快照
zfs list -t snapshot
zfs snapshot <池>/<数据集>@<名字>
zfs destroy <池>/<数据集>@<名字>

zpool 的强制操作要谨慎

带 -f 的 zpool import、zpool replace、zpool remove 等操作在池异常时可能让情况不可逆地变糟。

池出问题时,先保存 zpool status -v 的完整输出,确认备份可用,再决定下一步。

备份(vzdump) ​

sh
# 备份单台
vzdump <vmid> --storage <存储名> --mode snapshot --compress zstd

# 备份所有
vzdump --all --storage <存储名> --mode snapshot

# 排除某几台
vzdump --all --exclude 100,101 --storage <存储名>

# 看备份文件
pvesm list <备份存储> --content backup

# 任务定义
cat /etc/pve/jobs.cfg

恢复建议在 Web UI 里做(选项更清楚)。命令行:

sh
# 虚拟机(恢复到新 ID,--unique 会重新生成 MAC)
qmrestore <备份文件路径> <新vmid> --unique 1

# 容器
pct restore <新ctid> <备份文件路径>

恢复到已存在的 ID 会覆盖它

恢复到一个已被占用的 VMID,会清空并覆盖那台客户机的磁盘。演练时务必用新 ID。见恢复演练。

集群(pvecm) ​

sh
pvecm status          # quorum 状态,关注 Quorate
pvecm nodes           # 节点列表

集群的增删节点操作有严格顺序

pvecm add / pvecm delnode 不做对会留下幽灵节点,影响 quorum 计算。而且被移除的节点不能直接加回同一个集群。

对照官方文档操作,不要凭记忆。

网络 ​

sh
# 当前地址与路由
ip -4 addr show
ip route

# 网桥上挂了哪些接口
bridge link show

# 配置文件
cat /etc/network/interfaces

# 语法检查(模拟执行,不改动)
ifup --no-act vmbr0

# 应用配置(当前 SSH 会断开)
ifreload -a

日志与任务 ​

sh
# 本次启动以来的错误
journalctl -p err -b --no-pager | tail -40

# 某个服务
journalctl -u pveproxy -n 50 --no-pager

# 实时跟踪
journalctl -f

# 日志占用空间
journalctl --disk-usage
journalctl --vacuum-size=500M      # 收缩到 500M

# PVE 任务日志
ls -lt /var/log/pve/tasks/

硬件 ​

sh
# 磁盘列表(带型号和序列号,确认目标盘时用这个)
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL,SERIAL

# SMART
smartctl -a /dev/sda
smartctl -a /dev/sda | grep -E 'Reallocated|Pending|Uncorrectable'

# PCI 设备
lspci -nn

# IOMMU 是否启用
dmesg | grep -e DMAR -e IOMMU | head

# CPU 虚拟化支持
grep -oE '(vmx|svm)' /proc/cpuinfo | head -1
lsmod | grep kvm

API(pvesh) ​

sh
# 节点列表
pvesh get /nodes

# 某节点的存储
pvesh get /nodes/$(hostname)/storage

# 某虚拟机的当前状态
pvesh get /nodes/$(hostname)/qemu/<vmid>/status/current

# JSON 输出(方便脚本处理)
pvesh get /nodes --output-format json

界面上能做的,API 都能做

Web UI 本身就是这个 API 的客户端。想自动化某个操作时,先在界面上做一遍,再在官方 API 文档里找对应端点。

一条健康检查 ​

把这些串起来,见健康检查清单里的完整脚本。

延伸阅读 ​

Proxmox VE 非官方中文使用指南,与 Proxmox Server Solutions GmbH 无隶属关系。