这是一份针对 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 4096LXC篇
在 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 底层使用vgcreate和lvcreate创建好了 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强制删除某个虚拟磁盘/备份文件 (⚠️ 危险操作:数据将被彻底删除)
# 删除 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 核心命令行手册了。