外观
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 useddf 看不到 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 kvmAPI(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 文档里找对应端点。
一条健康检查
把这些串起来,见健康检查清单里的完整脚本。