跳转到内容

qm 与 pct 速查 ​

常用命令组合只覆盖了 qm 和 pct 最常用的一小部分。这篇把两者的子命令按用途摆全,对照官方 man page(qm(1)、pct(1),PVE 9.2)核实过语法。所有命令在宿主机 shell 以 root 执行,<vmid> / <ctid> 从 Web UI 左侧树的客户机名称前的数字获取。

记不住就查内置帮助

sh
qm help <子命令>
pct help <子命令>

比翻网页快,而且永远和你装的版本对得上。

qm:虚拟机 ​

生命周期 ​

命令说明
qm start <vmid>启动。--timeout 默认按内存大小估算
qm shutdown <vmid>正常关机(依赖 ACPI 或 guest agent),--forceStop 超时后转强制
qm reboot <vmid>正常重启
qm stop <vmid>强制断电,相当于拔电源
qm reset <vmid>硬复位,相当于按机箱 Reset 键
qm suspend <vmid> [--todisk]挂起,--todisk 连内存状态一起存盘
qm resume <vmid>从挂起恢复

stop 和 reset 不会给系统关机的机会

qm stop 和 qm reset 都不经过客户机操作系统的正常关机流程,等同于突然断电。文件系统正在写入时用这两个命令,有和真实断电一样的损坏风险。能用 shutdown 就不用它们,仅在客户机卡死无响应时才用。

配置与创建 ​

命令说明
qm create <vmid> [选项…]创建虚拟机,选项和 Web UI 创建向导一一对应,见创建第一个虚拟机
qm set <vmid> [选项…]修改配置,选项与 create 基本相同;--delete <key> 删除某项
qm config <vmid> [--current]查看生效配置
qm pending <vmid>查看待生效的修改(改了但客户机还没重启应用的项)
qm showcmd <vmid>打印 PVE 实际会执行的 QEMU 命令行,排查启动参数问题时有用
qm clone <vmid> <newid> [--full] [--name …]克隆;不加 --full 是链接克隆(依赖源盘)
qm template <vmid>把虚拟机转成模板,不可逆(转换后原虚拟机不能再正常启动,只能被克隆)

qm set --delete 配合 --force 会物理删除磁盘

qm set <vmid> --delete scsi1 --force 不只是从配置里摘掉这块盘,还会把底层存储上的数据一起删掉。不确定就先不加 --force,观察 unused[n] 条目。

磁盘操作 ​

命令说明
qm disk import <vmid> <源文件> <存储> [--format …](别名 qm importdisk)导入外部磁盘镜像(vmdk/raw/qcow2),导入后以 unused[n] 挂在配置里,需要手动接上总线
qm disk move <vmid> <盘> [<目标存储>] [--delete](别名 qm move-disk / qm move_disk)把磁盘搬到另一个存储,在线操作,不中断虚拟机
qm disk resize <vmid> <盘> <size>(别名 qm resize)扩容,例如 +10G。只能扩大,不支持缩小
qm disk rescan [--vmid <vmid>](别名 qm rescan)重新扫描存储上的磁盘,配置文件和实际文件不一致时用
qm disk unlink <vmid> --idlist <列表> [--force]从配置里摘除磁盘条目

disk move --delete 和 disk unlink 都会删数据

  • qm disk move ... --delete 成功后删除原位置的磁盘,中途失败也可能留下不一致状态,先确认目标存储空间够。
  • qm disk unlink 摘除 unused[n] 类型的条目时必然连底层数据一起物理删除,官方文档原话如此,不是简单解除关联。

批量操作前,先用 qm config <vmid> 截图或保存一份当前配置。

快照 ​

命令说明
qm listsnapshot <vmid>列出快照
qm snapshot <vmid> <名字> [--vmstate]创建快照,--vmstate 连内存状态一起存
qm rollback <vmid> <名字>回滚到快照
qm delsnapshot <vmid> <名字> [--force]删除快照

rollback 和 delsnapshot 不可撤销

qm rollback 会丢弃快照之后的所有改动,没有"回滚的回滚"。qm delsnapshot 删除后快照数据无法找回。执行前用 qm listsnapshot <vmid> 确认名字没写错。详细操作和取舍见快照、克隆与模板。

客户机代理与 Cloud-Init ​

命令说明
qm guest cmd <vmid> <子命令>(别名 qm agent)通过 QEMU Guest Agent 执行内置命令,如 ping、network-get-interfaces、fsfreeze-freeze/fsfreeze-thaw、fstrim
qm guest exec <vmid> [-- 命令]在客户机内部执行任意命令并取回结果,需要 agent 支持 exec
qm guest passwd <vmid> <用户名>通过 agent 重置客户机内用户密码
qm cloudinit dump <vmid> <meta|network|user>查看生成的 Cloud-Init 配置
qm cloudinit update <vmid>客户机运行中重新生成并下发 Cloud-Init 配置

迁移与导入 ​

命令说明
qm migrate <vmid> <目标节点> [--online]集群内迁移,--online 为在线迁移
qm remote-migrate <vmid> <目标端点> --target-bridge … --target-storage …跨集群迁移,官方标注为实验性功能,--delete 会在迁移成功后删除源虚拟机
qm importovf <vmid> <manifest.ovf> <存储>导入 OVF/OVA 虚拟机

跨集群与在线/离线迁移的完整操作见在线迁移与离线迁移,ESXi 导入向导的图形化做法见导入虚拟机。

销毁 ​

qm destroy 删除虚拟机和它的全部磁盘

text
qm destroy <vmid> [--purge] [--destroy-unreferenced-disks]

删除虚拟机定义、关联的权限和防火墙规则;--destroy-unreferenced-disks 还会连配置里已经摘除但存储上还留着的磁盘一起清掉。没有回收站,执行前用 qm config <vmid> 再核对一次编号。

需要保留数据只是不想要这台虚拟机时,先做一次备份或转成模板。

pct:容器 ​

生命周期 ​

命令说明
pct start <ctid>启动
pct shutdown <ctid> [--forceStop]正常关机
pct reboot <ctid>正常重启
pct stop <ctid>强制停止,会直接杀掉容器内所有进程
pct suspend <ctid> / pct resume <ctid>挂起与恢复,官方标注为实验性功能

配置与创建 ​

命令说明
pct create <ctid> <模板> [选项…]创建容器,见创建第一个容器
pct restore <ctid> <模板或备份> [选项…]从模板或备份恢复创建
pct set <ctid> [选项…]修改配置,--delete <key> 删除某项
pct config <ctid> [--current]查看生效配置
pct pending <ctid>查看待生效的修改
pct clone <ctid> <新ctid> [--full]克隆
pct template <ctid>转成模板,同样不可逆

磁盘与挂载点 ​

命令说明
pct resize <ctid> <挂载点> <size>扩容,例如 pct resize 100 rootfs +8G,只能扩大
pct move-volume <ctid> <卷> [<目标存储>] [--delete](别名 pct move_volume)迁移卷到另一存储,--delete 会删除原卷
pct mount <ctid> / pct unmount <ctid>手动挂载/卸载容器文件系统,仅用于应急维护,官方文档强调这会锁定容器
pct fsck <ctid> [--device rootfs|mpN]检查文件系统
pct fstrim <ctid>触发 TRIM 回收空间
pct df <ctid>查看容器内各挂载点用量

快照 ​

命令说明
pct listsnapshot <ctid>列出快照
pct snapshot <ctid> <名字>创建快照
pct rollback <ctid> <名字>回滚,不可逆
pct delsnapshot <ctid> <名字> [--force]删除快照,不可逆

访问与文件传输 ​

命令说明
pct enter <ctid>直接进入容器 shell,不走网络
pct exec <ctid> [-- 命令]在容器内执行单条命令
pct push <ctid> <宿主机路径> <容器内路径>推送文件进容器,会覆盖容器内同路径文件
pct pull <ctid> <容器内路径> <宿主机路径>从容器取出文件

迁移 ​

命令说明
pct migrate <ctid> <目标节点> [--online|--restart]集群内迁移,--restart 是重启迁移(有短暂停机),非特权容器一般才支持真正的在线迁移
pct remote-migrate <ctid> <目标端点> --target-bridge … --target-storage …跨集群迁移,官方标注为实验性功能,--delete 迁移成功后删除源容器

销毁 ​

pct destroy 删除容器和它的全部数据

text
pct destroy <ctid> [--purge] [--destroy-unreferenced-disks]

删除容器定义、根文件系统、挂载点数据、关联权限和防火墙规则。没有回收站,执行前用 pct config <ctid> 核对编号,需要保留数据就先备份或转模板。

qm 和 pct 的几个不对称之处 ​

  • qm 有 importdisk / importovf 从外部镜像导入;pct 没有对应功能,容器只能从模板或备份恢复。
  • 容器的挂载点(mp0…)本身就是独立卷,删除挂载点和 qm disk unlink 删除虚拟机盘一样是物理删除,用 pct set <ctid> --delete mp0 前要想清楚。
  • pct suspend/resume 是实验性功能,生产环境优先用关机/迁移代替。
  • 两者的 --force 含义不同:qm set --force 配合 --delete 才会真正删盘;pct create --force 和 pct restore --force 则是允许覆盖已存在的同编号容器。

参考资料 ​

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