外观
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则是允许覆盖已存在的同编号容器。