pve常用命令手册/管理操作

这是一份针对 Proxmox VE (PVE) 常用命令行的参考手册。在 PVE 中,管理虚拟机(KVM)最核心的命令行工具是 qm (Qemu Manager),而备份通常使用 vzdump

请注意,PVE 中的所有虚拟机都需要一个唯一的数字 ID(<vmid>,例如 100, 101)来进行操作。


KVM篇


1. 基础状态管理

这些是你日常查看和控制虚拟机最常用的命令。

  • 查看所有虚拟机列表及状态
qm list

  • 启动虚拟机
qm start <vmid>

  • 正常关闭虚拟机 (发送 ACPI 关机信号,需虚拟机内部支持)
qm shutdown <vmid>

  • 强制关闭虚拟机 (相当于直接拔电源)
qm stop <vmid>

  • 重启虚拟机
qm reboot <vmid>


2. 新建虚拟机

通过命令行从头创建虚拟机涉及多个参数,通常分为两步:创建基础配置和挂载磁盘。

  • 创建一个基础虚拟机
# 示例:创建一个 ID 为 102,名称为 "web-server",内存 2048MB,2 个 CPU 核心的虚拟机
qm create 102 --name web-server --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0

  • 为虚拟机导入并挂载磁盘镜像 (如 qcow2 或 img)
# 语法:qm importdisk <vmid> <镜像文件路径> <存储池名称>
qm importdisk 102 /var/lib/vz/template/iso/ubuntu.img local-lvm

# 导入后,需要将磁盘连接到虚拟机 (例如作为 scsi0)
qm set 102 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-102-disk-0


3. 连接虚拟机

在纯命令行环境下连接虚拟机,主要有两种方式:

  • 通过串口终端连接 (需提前配置串口)
    如果你在虚拟机配置中添加了串口(qm set <vmid> --serial0 socket --vga serial0),可以直接在 PVE 宿主机上进入虚拟机的终端:
qm terminal <vmid>

(退出终端请按 Ctrl + O)

  • 通过常规网络连接 (推荐)
    通常命令行不用于直接显示图形界面。最稳妥的方式是确保虚拟机网络配置正确,然后直接从宿主机或外部网络使用 SSH 连接:
ssh user@<虚拟机IP地址>


4. 复制/克隆虚拟机

克隆现有虚拟机或模板可以快速部署新环境。

  • 完整克隆 (Full Clone)
# 语法:qm clone <源vmid> <新vmid> --name <新名称> --full 1
qm clone 100 105 --name db-server-clone --full 1

  • 链接克隆 (Linked Clone) (注:源虚拟机必须先转换为模板才能进行链接克隆,链接克隆节省空间,但依赖原模板)
qm clone 100 106 --name web-node --full 0

  • 将虚拟机转换为模板
qm template <vmid>


5. 备份与恢复

PVE 提供了非常强大的内置备份工具。

  • 备份虚拟机 (快照模式,不停机)
# 语法:vzdump <vmid> --dumpdir <备份存放目录> --compress <压缩格式> --mode snapshot
vzdump 100 --dumpdir /var/lib/vz/dump --compress zstd --mode snapshot

  • 恢复虚拟机
# 语法:qmrestore <备份文件路径> <新vmid>
qmrestore /var/lib/vz/dump/vzdump-qemu-100-xxx.vma.zst 110


6. 其他实用命令

  • 彻底删除虚拟机及其磁盘
qm destroy <vmid>

  • 解锁虚拟机
    (当备份失败或非正常关机导致虚拟机被锁定时使用)
qm unlock <vmid>

  • 调整虚拟机配置 (如增加内存到 4096MB)
qm set <vmid> --memory 4096


LXC篇


在 Proxmox VE (PVE) 中,管理 LXC(Linux 容器)的核心命令行工具是 pct (Proxmox Container Toolkit)。与 KVM 虚拟机(qm)类似,容器也需要一个唯一的数字 ID(<vmid>)。

LXC 容器的优势在于非常轻量、启动极快且资源占用极低。以下是 PVE 中 LXC 容器的常用命令行手册:


1. 基础状态管理

用于日常查看和控制容器的运行状态。

  • 查看所有容器列表及状态
pct list

  • 启动容器
pct start <vmid>

  • 正常关闭容器
pct shutdown <vmid>

  • 强制停止容器 (立即停止运行)
pct stop <vmid>

  • 重启容器
pct reboot <vmid>


2. 新建容器

与虚拟机不同,LXC 容器通常基于预先制作好的系统模板(Template)创建。创建前需要先下载模板。

  • 步骤 A: 更新并下载模板 (使用 pveam 工具)
# 更新模板列表
pveam update

# 查看可用的系统模板
pveam available

# 下载一个 Ubuntu 22.04 模板到 local 存储
pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst

  • 步骤 B: 基于模板创建容器
# 示例:创建一个 ID 为 200,主机名为 "my-lxc",使用 local-lvm 存储分配 8GB 空间,并设置 root 密码的容器
pct create 200 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst --hostname my-lxc --storage local-lvm --rootfs 8 --password <你的密码>

# 你也可以在创建时直接配置网络 (例如分配静态 IP)
pct set 200 --net0 name=eth0,bridge=vmbr0,ip=192.168.1.50/24,gw=192.168.1.1


3. 连接容器

LXC 提供了一种非常方便的方式,可以直接从 PVE 宿主机“穿透”进容器的内部终端,无需配置 SSH 即可使用。

  • 直接进入容器的 Root Shell (极其常用,强烈推荐)
pct enter <vmid>

(输入 exit 或按 Ctrl + D 即可退回到 PVE 宿主机)

  • 进入容器的控制台 (Console)
    如果你想看到完整的登录提示符(如 tty):
pct console <vmid>

(退出控制台的快捷键非常特殊:按 Ctrl + A,松开后迅速按 Q)

  • 在宿主机上直接让容器执行单条命令 (无需进入容器)
# 示例:让容器 200 执行 apt update
pct exec 200 -- apt update


4. 复制/克隆容器

与虚拟机类似,容器也可以被克隆或转换为模板。

  • 完整克隆容器
# 语法:pct clone <源vmid> <新vmid> --hostname <新主机名>
pct clone 200 205 --hostname lxc-clone

  • 将容器转换为模板
    (转换后,该容器将无法再被启动,但可以作为基础镜像用于快速生成“链接克隆”的子容器)
pct template <vmid>


5. 备份与恢复

LXC 容器的备份同样使用 vzdump 命令,但恢复命令与 KVM 不同,使用的是 pct restore

  • 备份容器 (快照模式,不停机)
# 语法:vzdump <vmid> --dumpdir <备份存放目录> --compress zstd --mode snapshot
vzdump 200 --dumpdir /var/lib/vz/dump --compress zstd --mode snapshot

  • 恢复容器
# 语法:pct restore <新vmid> <备份文件路径> --storage <目标存储>
pct restore 210 /var/lib/vz/dump/vzdump-lxc-200-xxx.tar.zst --storage local-lvm


6. 其他实用命令

  • 彻底删除容器及其磁盘
pct destroy <vmid>

  • 解锁容器
    (备份中断等异常情况导致容器被锁时使用)
pct unlock <vmid>

  • 动态调整容器配置
# 调整内存为 2048MB 和 Swap 为 512MB
pct set 200 --memory 2048 --swap 512

# 增加 CPU 核心数为 4
pct set 200 --cores 4


小提示: PVE 的命令行设计非常模块化。你可以注意到 qm (虚拟机) 和 pct (容器) 的大部分基础命令(如 list, start, stop, destroy, clone)在语法上是完全一致的,这大大降低了记忆成本。


管理存储


在 Proxmox VE (PVE) 中,管理存储的核心命令行工具是 pvesm (Proxmox VE Storage Manager)

PVE 的存储管理有一个核心概念:内容类型 (Content Types)。每挂载一个存储池,你都需要告诉 PVE 这个存储用来放什么。常见的内容类型包括:

  • images: 虚拟机磁盘 (KVM)
  • rootdir: 容器磁盘 (LXC)
  • vztmpl: 容器模板
  • backup: 备份文件 (vzdump)
  • iso: 光盘镜像
  • snippets: 脚本片段

以下是 PVE 存储管理的常用命令行手册:


1. 基础状态与查看

用于查看当前节点上挂载了哪些存储,以及它们的使用情况。

  • 查看所有存储池的状态与容量
pvesm status

  • 查看特定存储池中的内容 (例如查看 local 存储里有哪些文件)
pvesm list local


2. 添加本地存储

如果你在宿主机上新加了一块硬盘,或者划分了一个新的目录,可以通过以下命令将其接入 PVE 面板。

  • 添加本地目录 (Directory)
    通常用于存放 ISO 镜像、备份或容器模板。
# 语法:pvesm add dir <存储池名称> --path <本地绝对路径> --content <内容类型>

# 示例:将 /mnt/data 目录添加为名为 "local-data" 的存储,用于存放 ISO 和备份
pvesm add dir local-data --path /mnt/data --content iso,backup

  • 添加 LVM-Thin (精简配置逻辑卷)
    这是存放虚拟机/容器磁盘性能最好、最常用的本地存储方式(支持快照)。
    (注意:执行此命令前,需要你已经在 Linux 底层使用 vgcreatelvcreate 创建好了 VG 和 Thinpool)
# 语法:pvesm add lvmthin <存储池名称> --vgname <VG名称> --thinpool <Thinpool名称> --content rootdir,images

# 示例:添加名为 "fast-storage" 的 LVM-Thin 存储
pvesm add lvmthin fast-storage --vgname pve --thinpool data --content rootdir,images


3. 添加网络存储 (NAS/文件共享)

将外部存储挂载到 PVE 节点上,非常适合用来集中存放备份或做集群共享存储。

  • 添加 NFS 共享存储
# 语法:pvesm add nfs <存储池名称> --server <NFS服务器IP> --export <共享路径> --content <内容类型>

# 示例:挂载群晖/NAS 上的 NFS 共享用于存放备份
pvesm add nfs nas-backup --server 192.168.1.100 --export /volume1/pve-backup --content backup

  • 添加 CIFS/SMB (Windows 共享)
# 语法:pvesm add cifs <存储池名称> --server <服务器IP> --share <共享文件夹名> --username <账号> --password <密码> --content <内容类型>

# 示例:挂载 Windows 共享文件夹用于存放 ISO
pvesm add cifs win-share --server 192.168.1.101 --share isos --username admin --password secret --content iso


4. 修改与删除存储

当你需要调整存储用途或卸载旧硬盘时使用。

  • 修改现有存储的内容类型
# 示例:为 "local" 存储额外增加存放 "backup" (备份) 的权限
pvesm set local --content iso,vztmpl,backup

  • 临时禁用某个存储 (保留配置,但 PVE 不会再去连接它,常用于 NAS 离线维护时防止 PVE 报错)
pvesm set nas-backup --disable 1

# 重新启用:
pvesm set nas-backup --disable 0

  • 移除存储配置 (仅从 PVE 面板和配置中移除,不会删除硬盘上的实际数据)
pvesm remove <存储池名称>


5. 存储卷的高级操作

直接操作存储池里的具体虚拟磁盘文件 (Volume)。

  • 分配一个空白的虚拟磁盘
# 在 local-lvm 存储池中划分一个名为 vm-100-disk-1 的 20G 磁盘给虚拟机 100
pvesm alloc local-lvm 100 vm-100-disk-1 20G

  • 强制删除某个虚拟磁盘/备份文件 (:warning: 危险操作:数据将被彻底删除)
# 删除 local-lvm 中名为 vm-100-disk-0 的磁盘
pvesm free local-lvm:vm-100-disk-0


有了 qm (虚拟机)、pct (容器) 和 pvesm (存储),你基本上已经掌握了 PVE 核心架构的三大基石。

镜像篇

在 PVE 中,谈到“镜像”,通常分为两类:一类是用于 LXC 容器的系统模板 (Templates),另一类是用于 KVM 虚拟机的 ISO 光盘镜像Cloud-init 磁盘镜像

这两类的查找和下载方式完全不同。以下是关于查找和下载镜像的常用命令行操作:


1. LXC 容器镜像 (系统模板)

PVE 官方维护了一个丰富的 LXC 模板库(包含各种 Linux 发行版和预装好应用的 TurnKey 模板)。管理这些模板的专用工具是 pveam (Proxmox VE Appliance Manager)。

  • 更新官方镜像列表 (必做步骤)
    在查找和下载之前,建议先同步最新的镜像数据库:
pveam update

  • 查找/列出可用的镜像
# 列出所有官方提供的可用镜像
pveam available

# 结合 grep 命令,精准搜索特定的系统 (例如查找所有 debian 镜像)
pveam available | grep debian

# 查找特定分类的镜像 (例如 mail、system、turnkeylinux 等)
pveam available --section system

  • 下载镜像到指定存储
# 语法:pveam download <存储池名称> <镜像全名>
# 示例:将 Debian 12 的模板下载到名为 "local" 的存储池中
pveam download local debian-12-standard_12.2-1_amd64.tar.zst

  • 删除已下载的容器镜像
# 语法:pveam remove <存储池> <镜像全名>
pveam remove local debian-12-standard_12.2-1_amd64.tar.zst


2. KVM 虚拟机镜像 (ISO 文件 / qcow2 磁盘)

与 LXC 不同,PVE 没有内置的 ISO 搜索引擎。你需要自己从操作系统官网(如 Ubuntu, CentOS, Windows)获取下载链接,然后使用 Linux 原生的网络工具将文件直接下载到 PVE 的存储目录中。

在 PVE 中,默认的 local 存储存放 ISO 镜像的绝对物理路径是:/var/lib/vz/template/iso/

  • 使用 wget 直接下载 ISO 镜像
# 语法:wget -O <保存路径/文件名> <下载链接>
# 示例:下载 Ubuntu 22.04 Live Server ISO 到默认存储目录
wget -O /var/lib/vz/template/iso/ubuntu-22.04.3-live-server-amd64.iso https://releases.ubuntu.com/jammy/ubuntu-22.04.3-live-server-amd64.iso

  • 下载现成的 Cloud-init 磁盘镜像 (进阶)
    很多云服务商(如 Ubuntu Cloud Images)提供预装好的 .img.qcow2 格式的系统盘,下载后可以直接用 qm importdisk 导入虚拟机,无需经过漫长的安装过程。
# 下载 Ubuntu 22.04 Cloud-init 镜像
wget -O /root/ubuntu-22.04-server-cloudimg-amd64.img https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img

# 下载完成后,参考之前【新建虚拟机】章节中的 qm importdisk 命令导入


3. 查看已下载的镜像

下载完成后,你可以使用之前提到的存储管理工具 pvesm 来验证文件是否已经成功入库。

  • 查看存储池中已有的 LXC 容器模板
pvesm list local --content vztmpl

  • 查看存储池中已有的 ISO 镜像
pvesm list local --content iso


到目前为止,你已经掌握了虚拟机(qm)、容器(pct)、存储(pvesm)以及镜像(pveam)的命令行操作,这基本上涵盖了 PVE 日常运维的 90% 工作。


pve网络管理、cloud-init


这里是 PVE 命令行手册的进阶部分,包含网络管理Cloud-init 自动化初始化。掌握这两部分后,你就可以通过纯命令行实现虚拟机的批量、自动化部署了。


1. 网络管理 (网桥与 VLAN)

PVE 底层是基于 Debian 的,其网络配置主要依赖于 /etc/network/interfaces 文件和 ifupdown2 工具。在命令行下操作网络,主要是给虚拟机或容器分配不同的网络资源。

  • 查看当前宿主机网络状态
# 查看所有网卡和网桥的 IP 及状态
ip a

  • 应用网络更改 (极其重要)
    如果你手动编辑了 /etc/network/interfaces 文件(例如添加了一个新的网桥 vmbr1),不需要重启宿主机,使用以下命令即可无缝应用配置:
ifreload -a

  • 给虚拟机 (KVM) 配置网络与 VLAN
    使用 qm set 命令可以随时调整虚拟机的网络。
# 示例 1:给虚拟机 100 添加一块网卡,连接到默认的 vmbr0 网桥,模型为 virtio
qm set 100 --net0 virtio,bridge=vmbr0

# 示例 2:将虚拟机的网卡划分到 VLAN 10 (打上 VLAN Tag)
qm set 100 --net0 virtio,bridge=vmbr0,tag=10

# 示例 3:限制该网卡的网络带宽为 50MB/s (50 * 1024 / 8)
qm set 100 --net0 virtio,bridge=vmbr0,rate=50

# 示例 4:移除虚拟机的网卡 net0
qm set 100 --delete net0

  • 给容器 (LXC) 配置网络与 VLAN
    使用 pct set 命令。注意容器的网络参数与虚拟机略有不同,需要指定容器内的网卡名称(如 name=eth0)。
# 示例 1:给容器 200 配置网卡、VLAN 20,并设置静态 IP 和网关
pct set 200 --net0 name=eth0,bridge=vmbr0,tag=20,ip=192.168.1.50/24,gw=192.168.1.1

# 示例 2:让容器使用 DHCP 自动获取 IP
pct set 200 --net0 name=eth0,bridge=vmbr0,ip=dhcp


2. Cloud-init 自动化初始化 (KVM 专属)

Cloud-init 是云时代的基础设施标准。结合之前下载的 Cloud 镜像(如 Ubuntu Cloud Image),你可以不用挂载 ISO 走图形安装界面,直接在几秒内拉起一台配置好账号、密码和 IP 的虚拟机。

  • 完整工作流示例:基于 Cloud-init 快速创建一个 Ubuntu 虚拟机
    第一步:创建基础虚拟机并导入 Cloud 镜像
# 1. 创建虚拟机 102 (4核, 4G内存, 挂载网络)
qm create 102 --name ubuntu-cloud --memory 4096 --cores 4 --net0 virtio,bridge=vmbr0

# 2. 将之前下载好的 img 镜像导入为本地磁盘
qm importdisk 102 /root/ubuntu-22.04-server-cloudimg-amd64.img local-lvm

# 3. 将导入的磁盘挂载给虚拟机 (作为 scsi0),并设置 SCSI 控制器类型
qm set 102 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-102-disk-0

第二步:配置 Cloud-init

# 4. 必须添加一个 Cloud-init 驱动器 (用于向虚拟机注入配置数据,通常挂载在 ide2)
qm set 102 --ide2 local-lvm:cloudinit

# 5. 设置引导顺序,从我们导入的系统盘启动
qm set 102 --boot c --bootdisk scsi0

# 6. 配置 Cloud-init 参数 (设置用户名、密码)
qm set 102 --ciuser admin --cipassword "YourStrongPassword"

# 7. 注入 SSH 公钥 (可选,强烈推荐,实现免密登录)
qm set 102 --sshkeys ~/.ssh/id_rsa.pub

# 8. 配置网络信息 (静态 IP 或 DHCP)
qm set 102 --ipconfig0 gw=192.168.1.1,ip=192.168.1.100/24
# 或者使用 DHCP: qm set 102 --ipconfig0 ip=dhcp

# 9. 调整系统盘大小 (Cloud 镜像默认通常只有 2G,我们给它扩容加 20G)
qm resize 102 scsi0 +20G

第三步:启动并转化为模板 (可选)

# 如果你想把它做成模板,以后一键克隆:
qm template 102

# 如果你直接使用,启动它即可:
qm start 102

启动后,虚拟机内部的 Cloud-init 服务会读取你在第 6、7、8 步注入的信息,自动完成系统初始化。几十秒后,你就可以直接通过 ssh [email protected] 登录了!


结合前面所有的内容,你现在已经拥有一份非常完整的 PVE 核心命令行手册了。