Featured image of post ProxmoxVE 如何使用 qm 命令管理 KVM 虚拟机?

ProxmoxVE 如何使用 qm 命令管理 KVM 虚拟机?

qm 是 Proxmox VE (PVE) 中用于管理虚拟机 (QEMU/KVM) 的核心命令行工具。它功能强大,几乎可以完成 Web 界面能做的所有操作,非常适合自动化脚本、批量管理和高级配置。


一、基本语法

1
qm <command> <vmid> [options]
  • <command>: 要执行的操作(如 start, stop, create, set 等)。
  • <vmid>: 虚拟机的唯一数字 ID(如 100, 201)。
  • [options]: 命令的附加参数。

二、常用命令分类详解

1. 生命周期管理(启动/停止/重启/重置)

命令说明示例
qm start <vmid>启动虚拟机qm start 100
qm stop <vmid>优雅关机(发送 ACPI 信号)qm stop 100
qm shutdown <vmid>stop,优雅关机qm shutdown 100
qm reset <vmid>强制重启(相当于物理重置按钮)qm reset 100
qm suspend <vmid>挂起虚拟机(保存内存状态到磁盘)qm suspend 100
qm resume <vmid>恢复挂起的虚拟机qm resume 100
qm poweroff <vmid>强制断电(不推荐,可能导致数据损坏)qm poweroff 100

💡 提示:stopshutdown 会等待客户机操作系统正常关闭,如果客户机无响应,可使用 poweroff 强制关闭。


2. 创建与克隆

创建新虚拟机 (qm create)

这是最复杂的命令之一,需要指定大量参数。

基本结构:

1
qm create <vmid> [OPTIONS]

常用选项:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# 创建一个基础 Ubuntu VM 示例
qm create 100 \
  --name ubuntu-test \
  --memory 2048 \
  --cores 2 \
  --net0 virtio,bridge=vmbr0 \
  --scsihw virtio-scsi-pci \
  --scsi0 local-lvm:32 \
  --ide2 local:iso/ubuntu-22.04.iso,media=cdrom \
  --boot order=scsi0;ide2 \
  --ostype l26 \
  --agent enabled=1

关键参数解释:

参数说明示例值
--name虚拟机名称web-server
--memory内存大小 (MB)2048
--coresCPU 核心数2
--socketsCPU 插槽数1
--cpuCPU 类型host (最佳性能), kvm64 (兼容)
--net<n>网络配置virtio,bridge=vmbr0,firewall=1
--scsihwSCSI 控制器类型virtio-scsi-pci
--scsi<n>, --virtio<n>, --ide<n>, --sata<n>磁盘配置local-lvm:32,format=qcow2
--ide2 (或 --cdrom)挂载 ISOlocal:iso/ubuntu.iso,media=cdrom
--boot启动顺序order=scsi0;ide2
--ostype操作系统类型l26 (Linux 2.6+), wxp, w7, w11
--agent启用 QEMU Guest Agentenabled=1,fstrim_cloned_disks=1
--biosBIOS 类型ovmf (UEFI), seabios (传统)
--machine机器类型q35 (推荐), i440fx
--tpmstate添加 TPM 设备 (Win11 需要)storage=local-lvm
--tablet启用 USB 平板设备 (改善鼠标体验)0 (禁用,VNC 下推荐) 或 1

📌 磁盘格式说明

  • local-lvm:32 → 在 local-lvm 存储上创建 32GB 磁盘,使用默认格式(raw)。
  • local-lvm:32,format=qcow2 → 指定格式为 qcow2。
  • local:vm-100-disk-0.raw,size=32G → 使用指定文件名和大小。

克隆虚拟机 (qm clone)

1
qm clone <源vmid> <新vmid> [OPTIONS]

示例:

1
2
3
4
5
# 克隆 VM 100 为 VM 101,命名为 "clone-vm"
qm clone 100 101 --name clone-vm --full 1

# 克隆为链接克隆(节省空间,依赖源磁盘)
qm clone 100 102 --name linked-clone --full 0

关键选项:

  • --full 1: 完全克隆(独立磁盘)。
  • --full 0: 链接克隆(共享磁盘快照)。
  • --name: 新虚拟机名称。
  • --description: 描述信息。

3. 配置管理 (qm set, qm config)

修改虚拟机配置 (qm set)

用于修改已存在 VM 的配置。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 增加内存到 4GB
qm set 100 --memory 4096

# 增加一个新硬盘 (scsi1)
qm set 100 --scsi1 local-lvm:16

# 添加第二个网卡
qm set 100 --net1 virtio,bridge=vmbr1

# 启用/禁用 QEMU Agent
qm set 100 --agent enabled=1

# 修改启动顺序
qm set 100 --boot order=ide2;scsi0

# 修改 CPU 核心数
qm set 100 --cores 4

# 删除某个设备 (如 cdrom)
qm set 100 --delete ide2

# 锁定虚拟机防止误操作
qm set 100 --lock backup  # 或 migrate, snapshot, rollback, suspend

查看虚拟机配置 (qm config)

1
qm config <vmid>

示例:

1
qm config 100

输出类似:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
agent: enabled=1
boot: order=scsi0;ide2
cores: 2
ide2: local:iso/ubuntu-22.04.iso,media=cdrom
memory: 2048
name: ubuntu-test
net0: virtio=BC:24:11:AA:BB:CC,bridge=vmbr0
ostype: l26
scsi0: local-lvm:vm-100-disk-0,size=32G
scsihw: virtio-scsi-pci

4. 状态与信息查看

命令说明示例
qm list列出所有虚拟机及其状态qm list
qm status <vmid>查看指定 VM 的运行状态qm status 100
qm current <vmid>显示当前运行时的配置(与 config 不同,包含运行时状态)qm current 100
qm pending <vmid>显示待处理的配置更改(重启后生效)qm pending 100
qm running-config <vmid>显示当前生效的配置(包含运行时和持久化配置)qm running-config 100

qm list 输出示例:

1
2
3
VMID       NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID
100        ubuntu-test          running    2048       32.00        12345
101        clone-vm             stopped    2048       32.00        0

5. 快照管理 (qm snapshot, qm rollback, qm delsnapshot)

创建快照

1
qm snapshot <vmid> <snapshot-name> [OPTIONS]

示例:

1
2
3
4
5
# 创建名为 "pre-update" 的快照
qm snapshot 100 pre-update --description "Before system update"

# 创建快照并同时停止 VM(确保数据一致性)
qm snapshot 100 pre-update --vmstate stop

查看快照

1
qm listsnapshot <vmid>

回滚快照

1
qm rollback <vmid> <snapshot-name>

示例:

1
qm rollback 100 pre-update

删除快照

1
qm delsnapshot <vmid> <snapshot-name>

示例:

1
qm delsnapshot 100 pre-update

6. 备份与恢复 (qm backup, qm restore)

⚠️ 注意:qm backup 命令在较新版本的 PVE 中已被弃用,推荐使用 vzdump 命令进行备份。

使用 vzdump 备份 VM

1
2
3
4
5
# 备份 VM 100 到指定存储
vzdump 100 --storage backup-storage --compress zstd --mode snapshot

# 带描述和邮件通知
vzdump 100 --storage backup --notes "Daily backup" --mailto admin@example.com

恢复备份 (qm restore)

1
2
3
4
5
# 从备份文件恢复到新的 VM ID (102)
qm restore /var/lib/vz/dump/vzdump-qemu-100-2025_09_15-10_00_00.vma.zst 102 --storage local-lvm

# 覆盖现有 VM (谨慎使用!)
qm restore /path/to/backup.vma.zst 100 --force

7. 迁移与移动 (qm migrate, qm move-disk)

在线迁移 (Live Migration)

1
qm migrate <vmid> <目标节点> [OPTIONS]

示例:

1
2
3
4
5
# 将 VM 100 迁移到节点 pve2
qm migrate 100 pve2 --online

# 迁移并指定迁移网络
qm migrate 100 pve2 --online --migration_network 192.168.10.0/24

移动磁盘到其他存储

1
qm move-disk <vmid> <磁盘标识符> <目标存储> [OPTIONS]

示例:

1
2
# 将 VM 100 的 scsi0 磁盘移动到 storage2
qm move-disk 100 scsi0 storage2 --delete 1  # 移动后删除源磁盘

8. 控制台访问 (qm terminal, qm vncproxy)

串行控制台 (需客户机配置串口)

1
qm terminal <vmid>

获取 VNC 代理信息 (用于外部 VNC 客户端连接)

1
qm vncproxy <vmid>

输出类似:

1
{"status":"OK","data":{"port":5900,"ticket":"TICKET-STRING","cert_sha256":"..."}}

三、高级与实用技巧

1. 批量操作脚本示例

1
2
3
4
5
6
#!/bin/bash
# 批量启动 VM ID 100-105
for i in {100..105}; do
    echo "Starting VM $i..."
    qm start $i
done
1
2
3
4
5
# 批量设置所有运行中的 VM 启用 QEMU Agent
for vmid in $(qm list | awk '/running/ {print $1}'); do
    qm set $vmid --agent enabled=1
    echo "Enabled agent on VM $vmid"
done

2. 获取特定信息 (结合 grep/awk)

1
2
3
4
5
# 获取所有运行中 VM 的 ID 和名称
qm list | grep running | awk '{print $1, $2}'

# 获取 VM 100 的 IP 地址 (需 qemu-guest-agent 启用)
qm agent 100 network-get-interfaces | grep -A 1 -B 2 "ip-address"

3. 使用 qm guest 命令 (需 qemu-guest-agent)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 在客户机内执行命令 (Linux 客户机)
qm guest exec 100 -- ls -l /tmp

# 获取客户机 IP
qm guest network-get-interfaces 100

# 请求客户机关机
qm guest shutdown 100

# 冻结/解冻文件系统 (用于备份一致性)
qm guest fsfreeze-status 100
qm guest fsfreeze-freeze 100
qm guest fsfreeze-thaw 100

四、重要注意事项

  1. 权限: 大部分 qm 命令需要 root 权限或 sudo
  2. 配置文件位置: VM 配置文件存储在 /etc/pve/qemu-server/<vmid>.conf
  3. 磁盘文件位置: 取决于存储配置,通常在 /var/lib/vz/images/<vmid>/ 或 LVM/ZFS 卷中。
  4. 在线修改限制: 部分配置(如 BIOS 类型、机器类型)需要关机后才能修改。
  5. 备份首选 vzdump: qm backup 已过时,生产环境请使用 vzdump

五、总结

qm 命令是 Proxmox VE 管理员的利器,掌握它能极大提升管理效率,尤其适合:

  • 自动化部署和配置
  • 批量管理大量虚拟机
  • 编写监控和维护脚本
  • 执行 Web 界面难以完成的精细操作

建议结合 man qm 查看最新官方文档,并在测试环境中熟练操作后再用于生产环境。

祝你玩转 Proxmox! 🚀

持续学习,共同进步! 🚀
使用 Hugo 构建
主题 StackJimmy 设计