
Proxmox Ve
- 43 installs
- 2 repo stars
- Updated August 3, 2026
- fandhe-ai/agent-reference-skills
Helps with ai & agent building tasks.
About
proxmox-ve is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- proxmox-ve
- AI & Agent Building
- AI-coding skill
Proxmox Ve by the numbers
- 43 all-time installs (skills.sh)
- Ranked #7,921 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 3, 2026 (Skillselion catalog sync)
npx skills add https://github.com/fandhe-ai/agent-reference-skills --skill proxmox-veAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 43 |
|---|---|
| repo stars | ★ 2 |
| Last updated | August 3, 2026 |
| Repository | fandhe-ai/agent-reference-skills ↗ |
What it does
Helps with ai & agent building tasks.
Files
ディレクトリ構成
skills/proxmox-ve/
SKILL.md
references/
core/
README.md
installation.md
cluster.md
storage.md
vm-qemu.md
container-lxc.md
networking-sdn.md
ceph.md
ha.md
backup-restore.md
firewall.md
user-access.md
notifications.md
cli/
README.md
qm.md
pct.md
pvesm.md
pvecm.md
pveceph.md
pvenode.md
pveum.md
pvesh.md
vzdump.md
pveam.md
pvesr.md
ha-manager.md
misc-cli.md
config/
README.md
qm-conf.md
pct-conf.md
datacenter-cfg.md
api/
README.md
rest-overview.md
endpoints-qemu.md
endpoints-lxc.md
endpoints-cluster.md
endpoints-access-storage.md
services/
README.md
daemons.md
samples/
README.md
vm-lifecycle.md
container-lifecycle.md
cluster-setup.md
backup-restore.md
api-automation.md
scripts/
README.md
install.md
vm-commands.md
container-commands.md
cluster-commands.md
storage-commands.md探索手順
タスクからカテゴリを引き、カテゴリの README.md で目的のページを特定する:
1. 下記マッピング表でタスクに対応するカテゴリを探す 2. そのカテゴリの README.md を参照して目的のページを特定する 3. 該当ページの .md を Read して詳細を確認する
タスク → カテゴリ マッピング
| タスク | カテゴリ | 参照 README |
|---|---|---|
| インストール・初期設定・ZFS/LVM ルート構成を知りたい | core | references/core/README.md |
| クラスター作成・ノード参加・Corosync 設定を知りたい | core | references/core/README.md |
| ストレージバックエンド (NFS/ZFS/RBD/iSCSI) を設定したい | core | references/core/README.md |
| KVM/QEMU 仮想マシンの作成・管理・マイグレーションを知りたい | core | references/core/README.md |
| LXC コンテナの作成・設定・スナップショットを知りたい | core | references/core/README.md |
| ネットワーク構成・SDN ゾーン・VNet を設定したい | core | references/core/README.md |
| Ceph クラスター (OSD/MON/MGR/プール) を構築したい | core | references/core/README.md |
| HA リソース・フェンシング・ウォッチドッグを設定したい | core | references/core/README.md |
| バックアップ・リストア・PBS 連携・保持設定を知りたい | core | references/core/README.md |
| ファイアウォールルール・セキュリティグループを設定したい | core | references/core/README.md |
| ユーザー・グループ・ロール・API トークン・2FA を管理したい | core | references/core/README.md |
| 通知ターゲット (SMTP/Gotify/webhook) を設定したい | core | references/core/README.md |
| qm コマンドのオプション・サブコマンドを調べたい | cli | references/cli/README.md |
| pct コマンドの使い方を知りたい | cli | references/cli/README.md |
| pvesm / pvecm / pveceph / pveum コマンドを調べたい | cli | references/cli/README.md |
| pvesh で REST API を直接呼び出したい | cli | references/cli/README.md |
| vzdump でバックアップ・スケジュールを組みたい | cli | references/cli/README.md |
| pveam でテンプレートをダウンロード・管理したい | cli | references/cli/README.md |
| pvesr でストレージレプリケーションを設定したい | cli | references/cli/README.md |
| ha-manager のリソース監視・フェイルオーバーを知りたい | cli | references/cli/README.md |
| VM 設定ファイル (qm.conf) の書式を知りたい | config | references/config/README.md |
| コンテナ設定ファイル (pct.conf) の書式を知りたい | config | references/config/README.md |
| データセンター設定 (datacenter.cfg) のパラメーターを知りたい | config | references/config/README.md |
| REST API の認証・エンドポイント体系・pvesh の使い方を知りたい | api | references/api/README.md |
| QEMU/LXC の REST API エンドポイントを調べたい | api | references/api/README.md |
| クラスター・アクセス・ストレージ系 API を呼び出したい | api | references/api/README.md |
| バックグラウンドデーモン (pvedaemon/pveproxy/pvestatd/pmxcfs 等) の役割・ポートを調べたい | services | references/services/README.md |
| pveproxy → pvedaemon の通信フロー・内部ポートを知りたい | services | references/services/README.md |
| 使用ポート一覧・systemctl 操作を知りたい | services | references/services/README.md |
| 典型的な使い方・ワークフロー例を見たい | samples | samples/README.md |
| インストール・VM・コンテナ・クラスター・ストレージの実行コマンドを知りたい | scripts | scripts/README.md |
Access & Storage Endpoints
REST API endpoints for user/permission management (/access) and storage pool management (/storage, /pools).
Signature / Usage
/access/ticket
/access/users
/access/groups
/access/roles
/access/acl
/access/domains
/storage
/poolsAccess Endpoints
Authentication
| Method | Path | Description |
|---|---|---|
| POST | /access/ticket | Create authentication ticket (login) |
| GET | /access/ticket | Test authentication (returns current user) |
Login request parameters:
| Name | Type | Description |
|---|---|---|
username | string | User in user@realm format |
password | string | User password |
realm | string | Authentication realm (optional, can be part of username) |
otp | string | OTP code if 2FA is enabled |
Login response fields:
| Name | Description |
|---|---|
ticket | Session ticket — use as PVEAuthCookie cookie value |
CSRFPreventionToken | Required header for POST/PUT/DELETE requests |
username | Authenticated username |
# Obtain ticket
curl -k -s -d "username=root@pam&password=secret" \
https://<host>:8006/api2/json/access/ticket | jq -r .data.ticketUsers
| Method | Path | Description |
|---|---|---|
| GET | /access/users | List users |
| POST | /access/users | Create user |
| GET | /access/users/{userid} | Get user details |
| PUT | /access/users/{userid} | Update user |
| DELETE | /access/users/{userid} | Delete user |
API Tokens
| Method | Path | Description |
|---|---|---|
| GET | /access/users/{userid}/token | List API tokens for user |
| POST | /access/users/{userid}/token/{tokenid} | Create API token |
| DELETE | /access/users/{userid}/token/{tokenid} | Delete API token |
# Create token via CLI
pveum user token add root@pam mytoken --privsep=0Groups, Roles & ACL
| Method | Path | Description |
|---|---|---|
| GET | /access/groups | List groups |
| POST | /access/groups | Create group |
| GET | /access/roles | List roles and their privileges |
| POST | /access/roles | Create custom role |
| GET | /access/acl | List all ACL entries |
| PUT | /access/acl | Set/update ACL entry |
Authentication Domains (Realms)
| Method | Path | Description |
|---|---|---|
| GET | /access/domains | List authentication realms |
| POST | /access/domains | Add realm (LDAP, AD, OpenID) |
Storage Endpoints
Storage Pool Definitions
| Method | Path | Description |
|---|---|---|
| GET | /storage | List all storage definitions |
| POST | /storage | Create storage definition |
| GET | /storage/{storage} | Get storage configuration |
| PUT | /storage/{storage} | Update storage configuration |
| DELETE | /storage/{storage} | Remove storage definition |
pvesh get /storage
pvesh get /nodes/pve1/storagePer-Node Storage
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/storage | List available storage on node |
| GET | /nodes/{node}/storage/{storage}/status | Storage usage stats |
| GET | /nodes/{node}/storage/{storage}/content | List files/volumes in storage |
| POST | /nodes/{node}/storage/{storage}/upload | Upload ISO/template |
| DELETE | /nodes/{node}/storage/{storage}/content/{volume} | Delete a volume |
Resource Pools
| Method | Path | Description |
|---|---|---|
| GET | /pools | List resource pools |
| POST | /pools | Create pool |
| GET | /pools/{poolid} | Get pool members (VMs, storage) |
| PUT | /pools/{poolid} | Update pool membership |
| DELETE | /pools/{poolid} | Delete pool |
Notes
- All users are in
user@realmformat; built-in realms arepam(Linux PAM) andpve(Proxmox internal). - API tokens bypass CSRF requirements; a token with
privsep=0inherits full user privileges. - ACL paths follow the resource tree:
/(root),/nodes/{node},/vms/{vmid},/storage/{storage},/pool/{poolid}. - Required privilege:
Sys.Auditfor reading access/storage config;User.Modifyfor user management.
Related
- REST API Overview
- Cluster & Node Endpoints
Cluster & Node Endpoints
REST API endpoints for cluster-wide management and per-node operations.
Signature / Usage
/nodes
/nodes/{node}
/nodes/{node}/status
/nodes/{node}/tasks
/cluster
/cluster/options
/cluster/ha
/cluster/replication
/cluster/metricsNode Endpoints
Node Listing
| Method | Path | Description |
|---|---|---|
| GET | /nodes | List all cluster nodes and their status |
| GET | /nodes/{node}/status | Detailed node status (CPU, memory, uptime) |
| GET | /nodes/{node}/rrddata | Historical resource usage metrics |
| GET | /nodes/{node}/netstat | Network statistics |
| GET | /nodes/{node}/services | List node services and their state |
pvesh get /nodes
pvesh get /nodes/pve1/status --output-format json-prettyTask Tracking (Async Operations)
All long-running API calls return an UPID (Unique Process ID). Use these endpoints to track progress:
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/tasks | List recent tasks on a node |
| GET | /nodes/{node}/tasks/{upid}/status | Get task status (running, stopped, exit code) |
| GET | /nodes/{node}/tasks/{upid}/log | Get task log output |
| DELETE | /nodes/{node}/tasks/{upid} | Stop a running task |
# Check task result
pvesh get /nodes/pve1/tasks/UPID:pve1:00001234:...:qmstart:100:root@pam:/statusCluster Endpoints
Cluster Information
| Method | Path | Description |
|---|---|---|
| GET | /cluster/status | Cluster membership and quorum status |
| GET | /cluster/resources | All cluster resources (VMs, containers, storage, nodes) |
| GET | /cluster/options | Datacenter configuration |
| PUT | /cluster/options | Update datacenter configuration |
| GET | /version | API version information |
pvesh get /cluster/status
pvesh get /cluster/resources --type vm
pvesh set cluster/options --console html5High Availability
| Method | Path | Description |
|---|---|---|
| GET | /cluster/ha/resources | List HA-managed resources |
| POST | /cluster/ha/resources | Add resource to HA |
| GET | /cluster/ha/resources/{sid} | Get HA resource config |
| PUT | /cluster/ha/resources/{sid} | Update HA resource config |
| DELETE | /cluster/ha/resources/{sid} | Remove resource from HA |
| GET | /cluster/ha/groups | List HA groups |
| GET | /cluster/ha/status/current | Current HA manager status |
Replication
| Method | Path | Description |
|---|---|---|
| GET | /cluster/replication | List replication jobs |
| POST | /cluster/replication | Create replication job |
| PUT | /cluster/replication/{id} | Update replication job |
| DELETE | /cluster/replication/{id} | Remove replication job |
Replication key parameters:
| Name | Type | Description |
|---|---|---|
id | string | Job ID format: <VMID>-<JOBNUM> |
target | string | Target node name |
schedule | string | systemd calendar format (default: */15) |
rate | number | Bandwidth limit in Mbps |
Notes
GET /cluster/resourcesaccepts atypefilter:vm,storage,node, orpool.- Quorum is required for most write operations on the cluster; nodes losing quorum become read-only.
- The
/versionendpoint requires no authentication and is useful for connectivity checks.
Related
- REST API Overview
- Access & Storage Endpoints
LXC Container Endpoints
REST API endpoints for managing Linux containers (LXC) under /nodes/{node}/lxc.
Signature / Usage
/nodes/{node}/lxc
/nodes/{node}/lxc/{vmid}
/nodes/{node}/lxc/{vmid}/status/{action}
/nodes/{node}/lxc/{vmid}/snapshot
/nodes/{node}/lxc/{vmid}/migrate
/nodes/{node}/lxc/{vmid}/config
/nodes/{node}/lxc/{vmid}/cloneEndpoints
Container Listing & Creation
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/lxc | List all containers on the node |
| POST | /nodes/{node}/lxc | Create a new container |
Create container key parameters:
| Name | Type | Description |
|---|---|---|
vmid | integer | Container ID (100–999999999) |
ostemplate | string | Template path (e.g., local:vztmpl/debian-12-standard_12.0-1_amd64.tar.zst) |
hostname | string | Container hostname |
memory | integer | RAM limit in MiB |
swap | integer | Swap in MiB |
rootfs | string | Root filesystem (e.g., local-lvm:8) |
password | string | Root password |
net0 | string | Network interface (e.g., name=eth0,bridge=vmbr0,ip=dhcp) |
start | boolean | Start container after creation |
unprivileged | boolean | Run as unprivileged container (recommended) |
# Example: create and start a container via pvesh
pvesh create /nodes/mynode/lxc \
--vmid 200 \
--ostemplate local:vztmpl/debian-12-standard_12.0-1_amd64.tar.zst \
--hostname myct \
--memory 512 \
--rootfs local-lvm:8 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--start 1Container Configuration
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/lxc/{vmid}/config | Get current container configuration |
| PUT | /nodes/{node}/lxc/{vmid}/config | Update container configuration |
| DELETE | /nodes/{node}/lxc/{vmid} | Destroy container (must be stopped) |
Container Status & Control
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/lxc/{vmid}/status/current | Get container status and runtime info |
| POST | /nodes/{node}/lxc/{vmid}/status/start | Start the container |
| POST | /nodes/{node}/lxc/{vmid}/status/stop | Force-stop the container |
| POST | /nodes/{node}/lxc/{vmid}/status/shutdown | Graceful shutdown |
| POST | /nodes/{node}/lxc/{vmid}/status/reboot | Reboot the container |
| POST | /nodes/{node}/lxc/{vmid}/status/suspend | Suspend the container |
| POST | /nodes/{node}/lxc/{vmid}/status/resume | Resume from suspend |
Snapshots
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/lxc/{vmid}/snapshot | List snapshots |
| POST | /nodes/{node}/lxc/{vmid}/snapshot | Create snapshot |
| DELETE | /nodes/{node}/lxc/{vmid}/snapshot/{snapname} | Delete snapshot |
| POST | /nodes/{node}/lxc/{vmid}/snapshot/{snapname}/rollback | Rollback to snapshot |
Migration & Clone
| Method | Path | Description |
|---|---|---|
| POST | /nodes/{node}/lxc/{vmid}/migrate | Migrate container to another node |
| POST | /nodes/{node}/lxc/{vmid}/clone | Clone container |
Notes
- All long-running operations return a task UPID. Poll
/nodes/{node}/tasks/{upid}/statusfor completion. - Required privilege:
VM.Auditfor reads;VM.PowerMgmtfor status actions;VM.Allocatefor create/delete. - Containers share the host kernel; privileged containers have more access to host namespaces — prefer
unprivileged: true. pvesh ls /nodes/<node>/lxc/<vmid>lists all available sub-paths for a specific container.
Related
- REST API Overview
- QEMU VM Endpoints
QEMU VM Endpoints
REST API endpoints for managing QEMU/KVM virtual machines under /nodes/{node}/qemu.
Signature / Usage
/nodes/{node}/qemu
/nodes/{node}/qemu/{vmid}
/nodes/{node}/qemu/{vmid}/status/{action}
/nodes/{node}/qemu/{vmid}/snapshot
/nodes/{node}/qemu/{vmid}/migrate
/nodes/{node}/qemu/{vmid}/config
/nodes/{node}/qemu/{vmid}/cloneEndpoints
VM Listing & Creation
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/qemu | List all VMs on the node |
| POST | /nodes/{node}/qemu | Create a new VM |
Create VM key parameters:
| Name | Type | Description |
|---|---|---|
vmid | integer | VM ID (100–999999999) |
memory | integer | RAM in MiB |
cores | integer | Number of CPU cores |
net0 | string | Network device (e.g., virtio,bridge=vmbr0) |
scsi0 | string | Primary disk (e.g., local-lvm:32) |
ostype | string | OS type: l26, win10, etc. |
start | boolean | Start VM after creation |
VM Configuration
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/qemu/{vmid}/config | Get current VM configuration |
| PUT | /nodes/{node}/qemu/{vmid}/config | Update VM configuration |
| DELETE | /nodes/{node}/qemu/{vmid} | Destroy VM (must be stopped) |
VM Status & Control
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/qemu/{vmid}/status/current | Get VM status and runtime info |
| POST | /nodes/{node}/qemu/{vmid}/status/start | Start the VM |
| POST | /nodes/{node}/qemu/{vmid}/status/stop | Force-stop the VM |
| POST | /nodes/{node}/qemu/{vmid}/status/shutdown | Graceful shutdown (ACPI) |
| POST | /nodes/{node}/qemu/{vmid}/status/reboot | Reboot the VM |
| POST | /nodes/{node}/qemu/{vmid}/status/reset | Hard reset the VM |
| POST | /nodes/{node}/qemu/{vmid}/status/suspend | Suspend to RAM |
| POST | /nodes/{node}/qemu/{vmid}/status/resume | Resume from suspend |
Snapshots
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/qemu/{vmid}/snapshot | List snapshots |
| POST | /nodes/{node}/qemu/{vmid}/snapshot | Create snapshot |
| DELETE | /nodes/{node}/qemu/{vmid}/snapshot/{snapname} | Delete snapshot |
| POST | /nodes/{node}/qemu/{vmid}/snapshot/{snapname}/rollback | Rollback to snapshot |
Snapshot key parameters:
| Name | Type | Description |
|---|---|---|
snapname | string | Snapshot name |
description | string | Optional description |
vmstate | boolean | Include RAM state |
Migration
| Method | Path | Description |
|---|---|---|
| GET | /nodes/{node}/qemu/{vmid}/migrate | Get preconditions for migration |
| POST | /nodes/{node}/qemu/{vmid}/migrate | Migrate VM to another node |
Migrate key parameters:
| Name | Type | Description |
|---|---|---|
target | string | Target node name |
online | boolean | Live migration (VM stays running) |
with-local-disks | boolean | Migrate local disks too |
Clone
| Method | Path | Description |
|---|---|---|
| POST | /nodes/{node}/qemu/{vmid}/clone | Clone VM (full or linked) |
Notes
- All long-running operations return a task UPID. Poll
/nodes/{node}/tasks/{upid}/statusfor completion. - Required privilege:
VM.Auditfor reads;VM.PowerMgmtfor status actions;VM.Allocatefor create/delete. pvesh ls /nodes/<node>/qemu/<vmid>lists all available sub-paths for a specific VM.
Related
- REST API Overview
- LXC Container Endpoints
API
| Name | Description | Path |
|---|---|---|
| REST API Overview | Authentication (ticket/token), base URL, pvesh CLI, endpoint groups | rest-overview.md |
| QEMU VM Endpoints | VM CRUD, status control, snapshots, migration via /nodes/{node}/qemu | endpoints-qemu.md |
| LXC Container Endpoints | Container CRUD, status control, snapshots, migration via /nodes/{node}/lxc | endpoints-lxc.md |
| Cluster & Node Endpoints | Node status, task tracking, HA, replication via /nodes, /cluster | endpoints-cluster.md |
| Access & Storage Endpoints | Users, tokens, ACLs, storage pools, resource pools via /access, /storage, /pools | endpoints-access-storage.md |
REST API Overview
Proxmox VE exposes its full management functionality through a RESTful HTTP API on port 8006. Every action available in the web UI is accessible via the API.
Signature / Usage
Base URL: https://<host>:8006/api2/json/Response format is specified in the URL path: json (default), extjs, html, text.
Authentication
Ticket Cookie (Session-based)
1. POST credentials to /access/ticket to obtain a signed ticket. 2. Pass the ticket via PVEAuthCookie cookie on subsequent requests. 3. For write operations (POST/PUT/DELETE), include the CSRFPreventionToken header. 4. Tickets expire after 2 hours.
# Obtain ticket
curl -k -d "username=root@pam&password=secret" \
https://<host>:8006/api2/json/access/ticketAPI Token (Stateless)
Tokens are created per user and do not require CSRF tokens. Suitable for automation.
# Create token
pveum user token add root@pam mytoken --privsep=0
# Use token
curl -k -H "Authorization: PVEAPIToken=root@pam!mytoken=<uuid>" \
https://<host>:8006/api2/json/nodesEndpoint Groups
| Group | Path Prefix | Purpose |
|---|---|---|
| Nodes | /nodes/{node} | Per-node resources: VMs, containers, storage, tasks |
| Cluster | /cluster | Cluster-wide config, HA, replication, metrics |
| Access | /access | Users, groups, roles, ACLs, tickets |
| Storage | /storage | Storage pool definitions |
| Pools | /pools | Resource pool management |
| Version | /version | Cluster API version |
pvesh — CLI Access to the API
pvesh provides direct API access from the command line on any Proxmox node (requires root). Calls are automatically proxied to the correct cluster member via SSH.
# Explore available paths
pvesh ls /nodes
pvesh ls /nodes/<node>/qemu
# Read operations
pvesh get /nodes/<node>/qemu
pvesh get /nodes/<node>/status
# Write operations
pvesh create /nodes/<node>/qemu --vmid 100 --memory 2048 --net0 virtio,bridge=vmbr0
pvesh set /cluster/options --console html5
pvesh delete /nodes/<node>/qemu/100
# Inspect API documentation for a path
pvesh usage /nodes/{node}/qemu -v
# Output formatting
pvesh get /nodes --output-format json-pretty
pvesh get /nodes --human-readablepvesh Commands
| Command | HTTP Method | Description |
|---|---|---|
ls | — | List child paths at an API endpoint |
get | GET | Retrieve data |
create | POST | Create or trigger an action |
set | PUT | Update a resource |
delete | DELETE | Remove a resource |
usage | — | Show API docs for a path |
Response Format
All JSON responses follow this envelope:
{
"data": { ... }
}Errors return an HTTP status code ≥ 400 with a errors key.
Notes
- The API is versioned per major release. An API call working in 6.0 works in 6.4 without changes; breaking changes only occur across major versions.
pveproxy(port 8006, external) forwards privileged operations topvedaemon(port 85, localhost-only). Never expose port 85 externally.- The interactive API viewer is available at
https://<host>:8006/api2/(JavaScript SPA); offline exploration is possible viapvesh lsandpvesh usage.
Related
- QEMU VM Endpoints
- LXC Container Endpoints
- Cluster & Node Endpoints
- Access & Storage Endpoints
ha-manager
Proxmox VE High Availability Manager. Monitors cluster resources and automatically performs failover of VMs and containers when node failures are detected.
Signature / Usage
ha-manager <COMMAND> [OPTIONS]
ha-manager help [<COMMAND>]Subcommands
Resource Management:
| Subcommand | Description |
|---|---|
add <sid> | Add a new HA-managed resource |
config | List all HA-managed resources |
set <sid> | Update resource configuration |
remove <sid> | Remove a resource from HA management |
status | Show HA manager state |
CRM Commands:
| Subcommand | Description |
|---|---|
crm-command migrate <sid> <node> | Online migrate resource to another node |
crm-command relocate <sid> <node> | Stop and restart resource on target node |
crm-command stop <sid> | Stop a managed resource |
crm-command node-maintenance enable <node> | Put node into maintenance mode |
crm-command node-maintenance disable <node> | Take node out of maintenance mode |
crm-command arm-ha | Re-enable HA stack after disarming |
crm-command disarm-ha | Release watchdogs cluster-wide (for full cluster shutdown) |
Rules (Affinity / Anti-affinity):
| Subcommand | Description |
|---|---|
rules add <ruleid> | Create an affinity/anti-affinity rule |
rules config | List all HA rules |
rules set <ruleid> | Modify a rule |
rules remove <ruleid> | Delete a rule |
Options / Props
Key options for ha-manager add:
| Name | Type | Description |
|---|---|---|
<sid> | string | Service ID (e.g. vm:100, ct:200) |
--state | enum | Desired state: started, stopped, disabled, ignored |
--max-restart | integer | Max restart attempts on same node (default: 1) |
--max-relocate | integer | Max relocate attempts to other nodes (default: 1) |
--comment | string | Descriptive comment |
--group | string | HA group for node priority (deprecated; use rules) |
Key options for ha-manager status:
| Name | Type | Description |
|---|---|---|
--verbose | boolean | Include full CRM and LRM status output |
Notes
- HA requires a functional cluster with quorum; at least 3 nodes are recommended.
- A watchdog device is required on each node for reliable fencing.
- Use
crm-command disarm-habefore planned full cluster shutdowns to prevent unintended fencing. - Node maintenance mode (
node-maintenance enable) gracefully migrates all resources off a node before maintenance. --state ignoredremoves HA management without deleting the resource config entry.- Legacy group commands (
groupadd,groupset, etc.) are deprecated; userulesinstead.
Related
- pvecm.md
- pvenode.md
- qm.md
- pct.md
misc-cli
Miscellaneous Proxmox VE CLI tools: pveperf, pvesubscription, and qmrestore.
---
pveperf
Proxmox VE performance benchmark script. Measures CPU and disk performance on the specified path.
Signature / Usage
pveperf [PATH]PATH defaults to / if not specified.
Metrics Reported
| Metric | Description |
|---|---|
| CPU BOGOMIPS | Combined CPU processing power |
| REGEX/SECOND | Perl regex throughput (target: >300,000) |
| HD SIZE | Storage capacity |
| BUFFERED READS | Disk read speed in MB/s (target: ≥40 MB/s) |
| AVERAGE SEEK TIME | Disk seek latency in ms |
| FSYNCS/SECOND | Write sync rate (target: >200) |
| DNS EXT | External DNS resolution latency |
| DNS INT | Internal/local DNS resolution latency |
---
pvesubscription
Proxmox VE Subscription Manager. Manages the Proxmox VE support subscription key on a node.
Signature / Usage
pvesubscription <COMMAND> [OPTIONS]Subcommands
| Subcommand | Description |
|---|---|
get | Show current subscription status and details |
set <key> | Install a subscription key |
delete | Remove the subscription key |
update | Refresh subscription data from the server |
Options / Props
| Name | Type | Description |
|---|---|---|
<key> | string | Subscription key (format: pve[1248][cbsp]-[0-9a-f]{10}) |
--force | boolean | Force server refresh even if local cache is valid (default: 0) |
Notes
- Run
pvesubscription updateafter setting a key to activate the enterprise repository. pvesubscription getreturnsNotFoundif no key is installed.
---
qmrestore
Restore a QEMU/KVM VM from a vzdump backup archive. Volumes are allocated on the original storage unless overridden.
Signature / Usage
qmrestore <archive> <vmid> [OPTIONS]
qmrestore help| Argument | Description |
|---|---|
<archive> | Path to backup file, or - to read from stdin |
<vmid> | Target VM ID (100–999999999) |
Options / Props
| Name | Type | Description |
|---|---|---|
--storage | string | Default storage for restored volumes |
--force | boolean | Overwrite existing VM with same ID |
--unique | boolean | Generate new random MAC addresses |
--start | boolean | Start VM immediately after restore |
--live-restore | boolean | Start VM while restore runs in background (PBS only) |
--ha-managed | boolean | Register restored VM as an HA resource |
--pool | string | Assign to a resource pool |
--bwlimit | integer | I/O bandwidth limit in KiB/s |
Notes
qmrestoreis functionally equivalent toqm create --archive <file>.--live-restoreis only supported with Proxmox Backup Server (PBS) sources.- For LXC container restore, use
pct restore(alias forpct createwith an archive).
---
Related
- vzdump.md
- qm.md
- pct.md
- pvesm.md
pct
Proxmox Container Toolkit. Manages LXC containers on a Proxmox VE node, abstracting complex LXC configuration into a unified CLI.
Signature / Usage
pct <COMMAND> [OPTIONS]
pct help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
create <vmid> <ostemplate> | Create a new container from a template |
clone <vmid> <newid> | Clone an existing container |
destroy <vmid> | Remove a container permanently |
start <vmid> | Start a container |
stop <vmid> | Force stop a container |
shutdown <vmid> | Gracefully shut down a container |
reboot <vmid> | Reboot a container |
suspend <vmid> | Suspend a container |
resume <vmid> | Resume a suspended container |
status <vmid> | Show container state |
config <vmid> | Show container configuration |
set <vmid> | Modify container settings |
pending <vmid> | Show current and pending config values |
list | List all containers on this node |
console <vmid> | Open interactive terminal |
enter <vmid> | Start a shell inside the container |
exec <vmid> -- <command> | Run a command inside the container |
push <vmid> <file> <dest> | Copy file into container |
pull <vmid> <file> <dest> | Copy file out of container |
snapshot <vmid> <snapname> | Create a snapshot |
delsnapshot <vmid> <snapname> | Delete a snapshot |
listsnapshot <vmid> | List snapshots |
rollback <vmid> <snapname> | Restore to a snapshot |
migrate <vmid> <target> | Migrate container to another node |
resize <vmid> <disk> <size> | Resize a mount point |
move-volume <vmid> <volume> | Move volume to different storage |
mount <vmid> | Mount container filesystem |
unmount <vmid> | Unmount container filesystem |
df <vmid> | Show disk usage |
fsck <vmid> | Run filesystem check |
fstrim <vmid> | Run fstrim inside container |
template <vmid> | Convert container to a template |
cpusets | Show CPU assignments |
Options / Props
Key options for pct create:
| Name | Type | Description |
|---|---|---|
--ostemplate | string | OS template volume (e.g. local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst) |
--hostname | string | Container hostname |
--storage | string | Default storage for root volume |
--rootfs | string | Root filesystem volume and size (e.g. local-lvm:8) |
--memory | integer | RAM in MB (default: 512) |
--swap | integer | Swap in MB (default: 512) |
--cores | integer | Number of CPU cores |
--cpulimit | number | CPU usage limit (0 = unlimited) |
--net[n] | string | Network interface config (name, bridge, IP, GW) |
--nameserver | string | DNS nameserver |
--searchdomain | string | DNS search domain |
--mp[n] | string | Additional mount points (up to 256) |
--unprivileged | boolean | Run as unprivileged container (recommended) |
--password | string | Root password |
--ssh-public-keys | string | SSH public keys for root |
--ostype | enum | OS type (e.g. ubuntu, debian, alpine) |
--onboot | boolean | Start on host boot |
--start | boolean | Start after creation |
--pool | string | Resource pool assignment |
--force | boolean | Overwrite existing container |
Notes
--unprivilegedis recommended for new containers; it maps container root to an unprivileged host user.pct enterrequires the container to be running; usepct mount+ chroot for offline access.- Snapshots require storage that supports them (e.g. ZFS, Ceph, or qcow2-backed storage).
pct restoreis an alias forpct createwhen restoring from a vzdump backup archive.
Related
- qm.md
- pveam.md
- vzdump.md
- pvesm.md
pveam
Proxmox VE Appliance Manager. Downloads and manages LXC container OS templates from the Proxmox template repository.
Signature / Usage
pveam <COMMAND> [OPTIONS]
pveam help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
update | Refresh the container template database from the repository |
available | List available templates from the online repository |
download <storage> <template> | Download a template to a storage location |
list <storage> | List templates stored on a given storage |
remove <template-path> | Remove a template |
Options / Props
Key options for pveam available:
| Name | Type | Description |
|---|---|---|
--section | enum | Filter by category: system, mail, turnkeylinux |
Key options for pveam download:
| Name | Type | Description |
|---|---|---|
<storage> | string | Target storage ID (must support vztmpl content type) |
<template> | string | Template filename (as shown in pveam available) |
Notes
- Run
pveam updatebeforepveam availableto get the latest template list. - The storage must be configured with content type
vztmplto accept templates. - Downloaded templates are used with
pct createvia the--ostemplateoption. - Template filenames follow the pattern
<distro>-<version>-standard_<ver>_<arch>.tar.zst.
Related
- pct.md
- pvesm.md
pveceph
Proxmox VE Ceph Manager. Manages Ceph services (monitors, managers, OSDs, pools, and filesystems) integrated into Proxmox VE nodes.
Signature / Usage
pveceph <COMMAND> [OPTIONS]
pveceph help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
init | Initial Ceph cluster configuration |
install | Deploy Ceph packages on the node |
status | Display Ceph cluster health and status |
start [<service>] | Start Ceph services |
stop [<service>] | Stop Ceph services |
mon create | Create a Ceph Monitor (and optional Manager) |
mon destroy <monid> | Remove a Monitor |
mgr create | Deploy a Ceph Manager daemon |
mgr destroy <id> | Remove a Manager daemon |
osd create <dev> | Initialize an OSD on a block device |
osd destroy <osdid> | Remove an OSD |
osd details <osdid> | Show OSD details |
pool create <name> | Create a storage pool |
pool destroy <name> | Delete a pool |
pool get <name> | Show pool configuration |
pool set <name> | Modify pool parameters |
pool ls | List all pools |
fs create | Create a CephFS filesystem |
fs destroy <name> | Remove a CephFS filesystem |
Options / Props
Key options for pveceph init:
| Name | Type | Description |
|---|---|---|
--network | CIDR | Ceph public network (required) |
--cluster-network | CIDR | Separate OSD replication/heartbeat network |
--size | integer | Target replicas per object (default: 3) |
--min_size | integer | Minimum replicas for I/O (default: 2) |
--pg_num | integer | Placement groups per pool (default: 128) |
Key options for pveceph osd create:
| Name | Type | Description |
|---|---|---|
<dev> | path | Block device path (e.g. /dev/sdb) |
--db_dev | path | Fast device for RocksDB metadata |
--wal_dev | path | Fast device for write-ahead log |
--encrypted | boolean | Enable OSD encryption |
Key options for pveceph pool create:
| Name | Type | Description |
|---|---|---|
--size | integer | Number of replicas |
--min_size | integer | Minimum replicas required for I/O |
--pg_num | integer | Number of placement groups |
--add_storages | boolean | Add corresponding Proxmox storage entries |
Notes
- Ceph requires a minimum of 3 monitors for reliable operation.
- The
--networkoption inpveceph initmust be specified before creating monitors or OSDs. - Destroying the last monitor is prevented to protect cluster integrity.
- OSD encryption (
--encrypted) is configured at creation time and cannot be changed later. pveceph pool destroycan optionally remove associated Proxmox storage entries.
Related
- pvesm.md
- pvecm.md
pvecm
Proxmox VE Cluster Manager. Creates and manages clusters of Proxmox VE nodes using the Corosync Cluster Engine for reliable group communication.
Signature / Usage
pvecm <COMMAND> [OPTIONS]
pvecm help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
create <clustername> | Create a new cluster |
add <hostname> | Join this node to an existing cluster |
nodes | Display local view of cluster nodes |
status | Display local view of cluster status |
delnode <node> | Remove a node from cluster configuration |
addnode <node> | Add a node to cluster config (internal use) |
keygen <filename> | Generate a new cryptographic key for Corosync |
updatecerts | Update node certificates and generate required files |
expected <votes> | Set expected vote count for Corosync |
qdevice setup <address> | Set up external Corosync QDevice |
qdevice remove | Remove a configured QDevice |
apiver | Show cluster join API version on this node |
mtunnel | VM/CT migration tunnel (internal use) |
Options / Props
Key options for pvecm create:
| Name | Type | Description |
|---|---|---|
--link[n] | string | Corosync link address and priority (up to 8 links) |
--nodeid | integer | Node ID number |
--votes | integer | Number of votes for this node |
--token-coefficient | integer | Corosync token timeout coefficient (default: 125) |
Key options for pvecm add:
| Name | Type | Description |
|---|---|---|
--link[n] | string | Corosync link address for this node |
--nodeid | integer | Node ID number |
--votes | integer | Number of votes for this node |
--fingerprint | string | Certificate SHA-256 fingerprint for verification |
--force | boolean | Bypass error checks for existing nodes |
Notes
- All nodes must be able to connect via UDP ports 5405–5412 for Corosync.
- SSH (TCP 22) must be open between all nodes for cluster operations.
- Date/time must be synchronized across all nodes (use NTP).
- A minimum of 3 nodes is recommended for reliable quorum in HA setups.
- Latency between cluster nodes must be under 5 ms.
pvecm delnoderequires quorum; usepvecm expectedif quorum is lost.
Related
- pvenode.md
- ha-manager.md
- pveum.md
pvenode
Proxmox VE Node Management Tool. Controls node-specific settings, certificates, guest bulk operations, and task history.
Signature / Usage
pvenode <COMMAND> [OPTIONS]
pvenode help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
config get | Retrieve node configuration settings |
config set | Modify node configuration options |
cert info | Display current certificate information |
cert set <certificate> <key> | Upload custom TLS certificate and key |
cert delete | Remove custom certificate |
acme account register | Register an ACME account |
acme account deactivate | Deactivate an ACME account |
acme account update | Update ACME account contact info |
acme account list | List configured ACME accounts |
acme cert order | Order/renew certificate from ACME CA |
acme cert revoke | Revoke ACME certificate |
acme plugin add <type> <pluginid> | Add ACME DNS/standalone plugin |
acme plugin update <pluginid> | Update plugin configuration |
acme plugin remove <pluginid> | Remove a plugin |
acme plugin list | List configured plugins |
startall | Start all VMs and containers (onboot=1 by default) |
stopall | Stop all VMs and containers |
migrateall <target> | Migrate all guests to another node |
task list | Show finished task history |
task log <upid> | Show task execution log |
task status <upid> | Check task completion status |
wakeonlan <node> | Send Wake-on-LAN packet to a node |
Options / Props
Key options for pvenode startall / pvenode stopall:
| Name | Type | Description |
|---|---|---|
--vms | list | Limit to specific VM/CT IDs |
--force | boolean | Start all VMs, not just those with onboot=1 |
--timeout | integer | Timeout in seconds |
Key options for pvenode migrateall:
| Name | Type | Description |
|---|---|---|
<target> | string | Target node name |
--maxworkers | integer | Maximum simultaneous migrations |
--vms | list | Limit to specific VM/CT IDs |
--with-local-disks | boolean | Migrate VMs with local disks |
Key options for pvenode task list:
| Name | Type | Description |
|---|---|---|
--errors | boolean | Show only failed tasks |
--source | enum | Filter by source: all, active, archive |
--limit | integer | Maximum number of tasks to return |
General output option:
| Name | Type | Description |
|---|---|---|
--output-format | enum | Output format: json, json-pretty, yaml, text |
Notes
pvenode startall --forcestarts all VMs regardless ofonbootsetting; use with care.- ACME certificate management integrates with Let's Encrypt and other ACME-compatible CAs.
pvenode stopallsends a shutdown signal and waits; use--timeoutto set a maximum wait time.- Task UPIDs can be obtained from
pvenode task listor API responses.
Related
- pvecm.md
- pveum.md
- ha-manager.md
pvesh
Proxmox VE API Shell. Directly invokes Proxmox REST API endpoints from the command line without going through the HTTPS server.
Signature / Usage
pvesh <COMMAND> <api-path> [OPTIONS]
pvesh help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
get <path> | Execute GET request (read/list resource) |
create <path> | Execute POST request (create resource) |
set <path> | Execute PUT request (update resource) |
delete <path> | Execute DELETE request (remove resource) |
ls <path> | List child endpoints at a given API path |
usage <path> | Show API usage/schema for a path |
Options / Props
| Name | Type | Description |
|---|---|---|
--output-format | enum | Output style: json, json-pretty, text, yaml (default: text) |
--human-readable | boolean | Format dates and byte sizes for readability |
--noproxy | boolean | Disable automatic request proxying |
--quiet | boolean | Suppress output |
--noborder | boolean | Remove borders from text table output |
--noheader | boolean | Remove header row from text table output |
--verbose | boolean | Detailed output (for usage subcommand) |
Notes
- Most operations require root privileges on the local node.
pveshbypasses the HTTPS REST API and calls the API handlers directly; useful for scripting and automation.- API paths mirror the web UI structure (e.g.
/nodes/pve1/qemu/100/status/start). - Use
pvesh ls /to explore the available API tree. - Use
pvesh usage <path> --verboseto see all parameters for a given endpoint.
Related
- pveum.md
- pvenode.md
pvesm
Proxmox VE Storage Manager. Manages storage pools and volumes across the cluster.
Signature / Usage
pvesm <COMMAND> [OPTIONS]
pvesm help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
add <type> <storageid> | Add a new storage pool |
set <storageid> | Update storage configuration |
remove <storageid> | Remove storage config (does not delete data) |
list <storageid> | List storage contents |
status | Show status of all datastores |
path <volume> | Print filesystem path for a volume |
alloc <storageid> <vmid> <filename> <size> | Allocate a disk image |
free <volume> | Delete a volume |
scan <type> | Discover available storage resources |
prune-backups <storageid> | Prune backups based on retention rules |
export <volume> <format> <filename> | Export a volume |
import <storageid> <format> <filename> | Import a volume |
Options / Props
Key options for pvesm add:
| Name | Type | Description |
|---|---|---|
--content | list | Allowed content types: images, rootdir, vztmpl, iso, backup, snippets |
--path | string | Filesystem mount point (for dir type) |
--shared | boolean | Mark storage as accessible from all cluster nodes |
--disable | boolean | Disable this storage |
--format | enum | Default image format: raw, qcow2, vmdk, subvol |
--nodes | list | Restrict storage to specific cluster nodes |
--prune-backups | string | Backup retention rules (e.g. keep-last=3,keep-daily=7) |
--maxfiles | integer | Maximum number of backups to keep (deprecated, use --prune-backups) |
For pvesm scan:
| Name | Type | Description |
|---|---|---|
<type> | enum | Type to scan: nfs, cifs, iscsi, lvm, zfs, pbs |
Notes
pvesm removeonly removes the storage configuration entry; it does not delete the underlying data or pool.- Content type
rootdiris for container root volumes;imagesis for VM disk images. --sharedmust be set correctly in cluster environments to avoid storage conflicts.- Use
pvesm prune-backupswith--dry-runto preview what would be deleted.
Related
- pveceph.md
- vzdump.md
- pvesr.md
pvesr
Proxmox VE Storage Replication. Manages replication jobs that continuously replicate guest volumes to other cluster nodes using ZFS snapshots to minimize network traffic.
Signature / Usage
pvesr <COMMAND> [OPTIONS]
pvesr help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
create-local-job <id> | Create a new local replication job |
list | List all configured replication jobs |
read <id> | Show configuration of a specific job |
update <id> | Modify an existing job |
delete <id> | Mark a job for removal |
enable <id> | Activate a previously disabled job |
disable <id> | Deactivate a replication job |
status | Show current state of all jobs on this node |
schedule-now <id> | Trigger immediate replication for a job |
run | Run sync jobs (called by systemd timer) |
prepare-local-job <id> | Prepare target node before replication (internal) |
finalize-local-job <id> | Remove snapshots after replication (internal) |
Options / Props
Key options for pvesr create-local-job:
| Name | Type | Description |
|---|---|---|
<id> | string | Job ID in <vmid>-<jobnum> format (e.g. 100-0) |
--target | string | Target node name |
--schedule | string | Replication schedule (default: */15 — every 15 minutes) |
--rate | number | Bandwidth limit in MB/s |
--comment | string | Descriptive comment |
--disable | boolean | Create job in disabled state |
Key options for pvesr delete:
| Name | Type | Description |
|---|---|---|
--force | boolean | Skip cleanup of target data |
--keep | boolean | Keep replicated data at destination |
Notes
- Storage replication requires ZFS-based storage; it uses ZFS send/receive with incremental snapshots.
- The default schedule (
*/15) replicates every 15 minutes; use standard systemdOnCalendarsyntax for custom schedules. - Replicated data can serve as a warm standby for HA failover, but
pvesritself is not an HA mechanism. - Job IDs are in the format
<vmid>-<jobnum>; multiple jobs per VM are allowed with different targets.
Related
- pvesm.md
- pvecm.md
- ha-manager.md
pveum
Proxmox VE User Manager. Manages users, groups, authentication realms, roles, resource pools, API tokens, and access control lists.
Signature / Usage
pveum <COMMAND> [OPTIONS]
pveum help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
user add <userid> | Add a new user |
user modify <userid> | Modify user settings |
user delete <userid> | Delete a user |
user list | List all users |
user token add <userid> <tokenid> | Create an API token |
user token modify <userid> <tokenid> | Modify an API token |
user token remove <userid> <tokenid> | Remove an API token |
user token list <userid> | List API tokens for a user |
passwd <userid> | Change user password |
group add <groupid> | Create a group |
group modify <groupid> | Modify group settings |
group delete <groupid> | Delete a group |
group list | List all groups |
role add <roleid> | Create a role with privileges |
role modify <roleid> | Modify role privileges |
role delete <roleid> | Delete a role |
role list | List all roles |
realm add <realm> | Add an authentication realm |
realm modify <realm> | Modify realm settings |
realm delete <realm> | Delete a realm |
realm list | List all realms |
realm sync <realm> | Sync users/groups from external realm |
pool add <poolid> | Create a resource pool |
pool modify <poolid> | Modify pool configuration |
pool delete <poolid> | Delete a resource pool |
pool list | List all resource pools |
acl modify | Add or modify an ACL entry |
acl delete | Remove an ACL entry |
acl list | List all ACL entries |
ticket <userid> | Generate an authentication ticket |
Options / Props
Key options for pveum user add / pveum user modify:
| Name | Type | Description |
|---|---|---|
<userid> | string | User ID in name@realm format |
--password | string | User password |
--enable | boolean | Enable account (default: 1) |
--expire | integer | Expiry timestamp (Unix epoch, 0 = never) |
--groups | list | Group membership |
--comment | string | Descriptive comment |
--email | string | Email address |
Key options for pveum realm add:
| Name | Type | Description |
|---|---|---|
--type | enum | Realm type: ad, ldap, openid, pam, pve |
--server1 | string | Primary server address |
--server2 | string | Fallback server address |
--base_dn | string | LDAP base distinguished name |
Key options for pveum acl modify:
| Name | Type | Description |
|---|---|---|
--path | string | ACL path (e.g. /, /vms/100, /storage/local) |
--roles | list | Roles to assign |
--users | list | User IDs to apply ACL to |
--groups | list | Group IDs to apply ACL to |
--tokens | list | API token IDs to apply ACL to |
--propagate | boolean | Propagate permissions to child paths (default: 1) |
Key options for pveum user token add:
| Name | Type | Description |
|---|---|---|
--privsep | boolean | Separate token privileges from user (default: 1) |
--expire | integer | Token expiry timestamp |
Notes
- User IDs must be in
name@realmformat (e.g.admin@pam,john@pve). pamrealm uses Linux PAM authentication;pverealm stores credentials in the Proxmox database.- API tokens with
--privsep 1(default) are limited to the permissions explicitly granted via ACL, independent of the owning user's rights. pveum realm syncis available for LDAP, AD, and OpenID realms.- Roles are sets of privileges; built-in roles include
Administrator,PVEVMAdmin,PVEDatastoreAdmin, etc.
Related
- pvecm.md
- pvesh.md
qm
QEMU/KVM Virtual Machine Manager. Manages the full lifecycle of VMs on a Proxmox VE node.
Signature / Usage
qm <COMMAND> [OPTIONS]
qm help [<COMMAND>]Subcommands
| Subcommand | Description |
|---|---|
start <vmid> | Start a virtual machine |
stop <vmid> | Force stop a VM (unsafe) |
shutdown <vmid> | Graceful shutdown via ACPI |
reboot <vmid> | Reboot VM (applies pending changes) |
reset <vmid> | Hardware reset |
suspend <vmid> | Suspend VM to disk or memory |
resume <vmid> | Resume a suspended VM |
create <vmid> | Create or restore a VM |
destroy <vmid> | Remove VM and its volumes |
set <vmid> | Modify VM options |
config <vmid> | Show VM config (with pending changes) |
pending <vmid> | Show current and pending config values |
status <vmid> | Show VM operational state |
list | List VMs on this node |
clone <vmid> <newid> | Clone a VM or template |
migrate <vmid> <target> | Migrate VM to another node |
snapshot <vmid> <snapname> | Create a snapshot |
delsnapshot <vmid> <snapname> | Delete a snapshot |
listsnapshot <vmid> | List snapshots |
rollback <vmid> <snapname> | Restore VM to a snapshot |
disk import <vmid> <source> <storage> | Import external disk image |
disk move <vmid> <disk> | Move disk to different storage |
disk resize <vmid> <disk> <size> | Resize a disk |
disk rescan | Rescan storages and update disk sizes |
disk unlink <vmid> | Remove disk image reference |
template <vmid> | Convert VM to a template |
cloudinit dump <vmid> <type> | Show generated cloud-init config |
cloudinit update <vmid> | Regenerate cloud-init drive |
guest cmd <vmid> <command> | Run QEMU Guest Agent command |
guest exec <vmid> | Execute command via guest agent |
guest passwd <vmid> <username> | Change guest user password |
import <vmid> <source> | Import foreign VM (ESXi/OVF) |
importovf <vmid> <manifest> | Create VM from OVF manifest |
monitor <vmid> | Access QEMU Monitor interface |
showcmd <vmid> | Show QEMU command line (debug) |
sendkey <vmid> <key> | Send keyboard event to VM |
waitlock <vmid> | Wait for VM config lock release |
vncproxy <vmid> | Start VNC proxy |
Options / Props
Key options for qm create / qm set:
| Name | Type | Description |
|---|---|---|
--name | string | Display name for the VM |
--memory | integer | RAM in MiB |
--cores | integer | CPU cores per socket (default: 1) |
--sockets | integer | Number of CPU sockets (default: 1) |
--cpulimit | number | CPU usage limit (0 = unlimited) |
--cpu | string | Emulated CPU type (e.g. x86-64-v2-AES) |
--bios | enum | Firmware: seabios or ovmf |
--ostype | enum | Guest OS type (e.g. l26, win11) |
--scsi[n] | string | SCSI disk config (volume, size, cache) |
--ide[n] | string | IDE disk / CDROM config |
--sata[n] | string | SATA disk config |
--virtio[n] | string | VirtIO disk config |
--net[n] | string | Network interface (model, bridge, VLAN) |
--ipconfig[n] | string | Cloud-init IP config for interface n |
--boot | string | Boot order (e.g. order=scsi0;net0) |
--onboot | boolean | Start VM on host boot |
--hotplug | string | Hotplug features (cpu, memory, disk, usb) |
--balloon | integer | Dynamic memory target in MiB (0 = off) |
--ciuser | string | Cloud-init default user |
--cipassword | string | Cloud-init password |
--sshkeys | string | Cloud-init SSH public keys |
--storage | string | Default storage for disk allocation |
--force | boolean | Overwrite existing VM |
--skiplock | boolean | Skip lock check (use with caution) |
--timeout | integer | Timeout in seconds for operations |
Notes
qm stopis a hard power-off; preferqm shutdownfor graceful stops.- Cloud-init options (
--ciuser,--sshkeys, etc.) require a cloud-init drive (--ide[n]or--scsi[n]withmedia=cdrom,format=raw). --skiplockshould only be used when the lock is stale; misuse can corrupt VM state.- Snapshots require storage that supports them (e.g. qcow2, ZFS, Ceph).
Related
- pct.md
- vzdump.md
- pvesm.md
CLI
| Name | Description | Path |
|---|---|---|
| qm | QEMU/KVM VM management — lifecycle, disks, snapshots, cloud-init, guest agent | qm.md |
| pct | LXC container management — create, configure, exec, snapshots, migrate | pct.md |
| pvesm | Storage pool management — add, list, allocate volumes, prune backups | pvesm.md |
| pvecm | Cluster management — create, join, node management, QDevice, certs | pvecm.md |
| pveceph | Ceph cluster management — MON, MGR, OSD, pools, CephFS | pveceph.md |
| pvenode | Node management — config, certificates, ACME, guest bulk ops, tasks | pvenode.md |
| pveum | User and access management — users, groups, roles, realms, ACLs, API tokens | pveum.md |
| pvesh | REST API shell — invoke API endpoints directly without HTTPS server | pvesh.md |
| vzdump | Backup utility for VMs and containers — full backup, retention, scheduling | vzdump.md |
| pveam | Appliance template manager — download and manage LXC OS templates | pveam.md |
| pvesr | Storage replication — ZFS-based incremental replication to other nodes | pvesr.md |
| ha-manager | High Availability manager — resource monitoring, failover, affinity rules | ha-manager.md |
| misc-cli | Miscellaneous tools: pveperf (benchmark), pvesubscription, qmrestore | misc-cli.md |
vzdump
Backup utility for Proxmox VE VMs and containers. Creates full backups containing VM/CT configuration and all disk data.
Signature / Usage
vzdump {<vmid>} [OPTIONS]
vzdump help<vmid> can be a single ID, a comma-separated list, or omitted with --all.
Options / Props
| Name | Type | Description |
|---|---|---|
--all | boolean | Backup all guests on this host |
--storage <id> | string | Destination storage ID |
--dumpdir <path> | string | Output directory (alternative to --storage) |
--mode | enum | Backup mode: snapshot (default), stop, suspend |
--compress | enum | Compression: 0 (none), gzip, lzo, zstd |
--exclude <vmid> | string | Exclude guests (comma-separated, used with --all) |
--bwlimit <KiB/s> | integer | I/O bandwidth limit |
--prune-backups | string | Retention policy (e.g. keep-last=3,keep-daily=7,keep-weekly=4) |
--protected | boolean | Mark backup as deletion-protected |
--fleecing | string | Use fleecing (copy-on-write cache) for live backup |
--notes-template | string | Template for backup notes |
--mailto | list | Email addresses to notify on completion |
--mailnotification | enum | When to send email: always or failure |
--node | string | Run only on this cluster node |
--pool | string | Backup only VMs/CTs in this pool |
--stdout | boolean | Write backup to stdout |
--tmpdir <path> | string | Temporary directory for backup files |
Backup Modes
| Mode | Description |
|---|---|
snapshot | Live backup with minimal downtime (default; uses storage snapshots or fleecing) |
stop | Stop VM/CT before backup for maximum consistency |
suspend | Suspend VM before backup (compatibility mode) |
Notes
- Global defaults can be set in
/etc/vzdump.confusingkey: valueformat. --prune-backupssupports:keep-last,keep-hourly,keep-daily,keep-weekly,keep-monthly,keep-yearly.snapshotmode requires storage snapshot support or fleecing; falls back gracefully.- Use
--stdoutto pipe backup data directly to a custom destination. vzdumpis also invoked internally by scheduled backup jobs configured in the web UI.
Related
- qm.md
- pct.md
- pvesm.md
- misc-cli.md
datacenter.cfg — Datacenter Configuration File
Cluster-wide default settings for a Proxmox VE datacenter.
Path: /etc/pve/datacenter.cfg
Signature / Usage
OPTION: valueEach line is a colon-separated key-value pair. Blank lines and lines starting with # are treated as comments. This file applies to all nodes in the cluster.
# Example datacenter.cfg
keyboard: en-us
language: en
email_from: admin@example.com
migration: type=secure
fencing: watchdog
mac_prefix: BC:24:11Options / Props
UI & Localisation
| Name | Type | Default | Description |
|---|---|---|---|
language | enum | — | Web GUI language: en, de, fr, zh-cn, ja, and others |
keyboard | enum | — | VNC server keyboard layout (e.g., en-us, de, fr, ja) |
console | enum | — | Default console viewer: applet, html5, vv (Virt-Viewer), xtermjs |
description | string | — | Datacenter description shown in the web UI summary |
consent-text | string | — | Text displayed to users before login |
Networking
| Name | Type | Default | Description |
|---|---|---|---|
mac_prefix | string | BC:24:11 | MAC address prefix applied to all auto-generated virtual NIC addresses |
http_proxy | URL | — | External HTTP proxy for package downloads and APT updates |
Migration & Replication
| Name | Type | Default | Description |
|---|---|---|---|
migration | complex | type=secure | Default live migration settings |
replication | complex | type=secure | Default storage replication settings |
migration sub-options:
| Sub-option | Values | Description |
|---|---|---|
type | `secure\ | insecure` |
network | CIDR | Restrict migration traffic to a specific network |
replication sub-options mirror migration (type, network).
High Availability
| Name | Type | Default | Description |
|---|---|---|---|
ha | complex | — | HA manager behaviour |
fencing | enum | watchdog | HA fencing mode: watchdog, hardware, both |
ha sub-options:
| Sub-option | Values | Description |
|---|---|---|
shutdown_policy | `conditional\ | failover\ |
Fencing modes:
watchdog— software watchdog only (default, supported everywhere)hardware— external IPMI/BMC fencing (requires hardware setup)both— watchdog + hardware (experimental)
Cluster Resource Scheduling
| Name | Type | Default | Description |
|---|---|---|---|
crs | complex | — | Cluster Resource Scheduler settings |
crs sub-options:
| Sub-option | Values | Description |
|---|---|---|
ha | `0\ | 1` |
rebalance-on-start | `0\ | 1` |
Bandwidth Limits
| Name | Type | Default | Description |
|---|---|---|---|
bwlimit | complex | — | I/O bandwidth limits in KiB/s for various operations |
bwlimit sub-options:
| Sub-option | Description |
|---|---|
default | Default limit applied to all operations not specifically set |
clone | Limit for storage clone operations |
migration | Limit for VM live migration data transfer |
move | Limit for storage move operations |
restore | Limit for backup restore operations |
Example: bwlimit: default=10240,migration=51200
VMID Allocation
| Name | Type | Default | Description |
|---|---|---|---|
next-id | complex | lower=100,upper=1000000 | Auto-selected VMID range boundaries |
next-id sub-options: lower=<int>,upper=<int>
Notifications & Email
| Name | Type | Default | Description |
|---|---|---|---|
email_from | string | root@<hostname> | Sender address for system notification emails |
notify | complex | — | Notification targets and conditions |
notify sub-options:
| Sub-option | Values | Description |
|---|---|---|
fencing | `always\ | never` |
package-updates | `always\ | auto\ |
replication | `always\ | error\ |
target-fencing | string | Notification channel name for fencing alerts |
target-package-updates | string | Notification channel name for update alerts |
target-replication | string | Notification channel name for replication alerts |
Tag Management
| Name | Type | Default | Description |
|---|---|---|---|
registered-tags | string | — | Space-separated list of tags that require Sys.Modify privilege to assign |
user-tag-access | complex | free | Controls which users can create/assign tags |
tag-style | complex | — | Tag appearance settings |
user-tag-access sub-options: user-allow=free|existing|list|none, user-allow-list=<tag;...>
tag-style sub-options: case-sensitive=0|1, color-map=<tag:color:fg-color;...>, ordering=config|alphabetical, shape=full|circle|dense|none
Geographic Location
| Name | Type | Default | Description |
|---|---|---|---|
location | complex | — | Geographic coordinates for the datacenter: lat=<float>,lon=<float>,name=<string> |
Authentication
| Name | Type | Default | Description |
|---|---|---|---|
u2f | complex | — | U2F two-factor authentication settings: appid=<URL>,origin=<URL> |
webauthn | complex | — | WebAuthn/FIDO2 settings: id=<domain>,origin=<URL>,rp=<name> |
Performance
| Name | Type | Default | Description |
|---|---|---|---|
max_workers | integer | — | Maximum number of parallel workers per node for bulk operations |
Notes
datacenter.cfgis cluster-replicated viapmxcfs; edits on any node propagate automatically.fencing: hardwareandfencing: bothare marked experimental and require IPMI/BMC hardware.- Several deprecated options exist (e.g.,
migration_unsecure); usemigration: type=insecureinstead. - Some options have prerequisites noted in the full man page (e.g.,
webauthnrequires a configured realm). - Editing via the web UI (Datacenter > Options) is recommended to avoid syntax errors.
Related
- qm-conf.md — VM configuration file format
- pct-conf.md — Container configuration file format
pct.conf — Container Configuration File
Configuration file for LXC containers managed by Proxmox VE.
Path: /etc/pve/lxc/<CTID>.conf
Signature / Usage
OPTION: valueEach line is a colon-separated key-value pair. Blank lines and lines starting with # are treated as comments. Low-level LXC directives can also be placed directly using lxc.<key> = <value> syntax.
# Example container config
hostname: mycontainer
arch: amd64
ostype: ubuntu
memory: 1024
swap: 512
cores: 2
unprivileged: 1
onboot: 1
rootfs: local-lvm:vm-200-disk-0,size=8G
net0: name=eth0,bridge=vmbr0,ip=dhcp,firewall=1Options / Props
Identity & OS
| Name | Type | Default | Description |
|---|---|---|---|
hostname | string | — | Container hostname |
ostype | enum | — | OS type for setup scripts: debian, ubuntu, centos, fedora, opensuse, archlinux, alpine, gentoo, nixos, devuan, unmanaged |
arch | enum | amd64 | Container architecture: amd64, arm64, armhf, i386, riscv32, riscv64 |
description | string | — | Free-text description shown in the web UI |
tags | string | — | Semicolon-separated metadata tags |
timezone | string | — | Timezone inside the container; host to inherit from node, or a zoneinfo path (e.g., Europe/Berlin) |
CPU
| Name | Type | Default | Description |
|---|---|---|---|
cores | integer (1–8192) | unlimited | Number of CPU cores assigned to the container |
cpulimit | float (0–8192) | 0 | Hard CPU usage cap in CPU units; 0 = unlimited |
cpuunits | integer (0–500000) | 1024 (cgv1) / 100 (cgv2) | Relative CPU scheduling weight |
Memory
| Name | Type | Default | Description |
|---|---|---|---|
memory | integer (MB) | 512 | Maximum RAM for the container |
swap | integer (MB) | 512 | Swap space; 0 to disable |
Storage
| Name | Type | Default | Description |
|---|---|---|---|
rootfs | complex | — | Root filesystem volume; required |
mp[n] | complex | — | Additional mount points (n: 0–255) |
unused[n] | volume | — | Detached/unused volumes; managed internally |
rootfs format: [volume=]<volume>[,acl=1][,idmap=<mapping>][,mountoptions=<opt;...>][,quota=1][,replicate=1][,ro=1][,shared=1][,size=<DiskSize>]
mp[n] format adds mp=<Path> and backup=0|1 to the same sub-options as rootfs.
Mount sub-options:
| Sub-option | Values | Description |
|---|---|---|
size | DiskSize | Volume size (e.g., 8G) |
acl | `0\ | 1` |
ro | `0\ | 1` |
quota | `0\ | 1` |
backup | `0\ | 1` |
replicate | `0\ | 1` |
shared | `0\ | 1` |
idmap | mapping | UID/GID mapping for unprivileged containers |
mountoptions | string | Semicolon-separated extra mount options |
Network
| Name | Type | Default | Description |
|---|---|---|---|
net[n] | complex | — | Network interface definition (n: 0–N) |
net[n] format: name=<ifname>,bridge=<bridge>,hwaddr=<MAC>,firewall=1,ip=dhcp|<CIDR>|manual,gw=<IPv4>,ip6=auto|dhcp|<CIDR>|manual,gw6=<IPv6>,tag=<1-4094>,rate=<Mbps>,mtu=<int>,type=veth
| Sub-option | Description |
|---|---|
name | Interface name inside the container (required) |
bridge | Host bridge device (e.g., vmbr0) |
hwaddr | MAC address |
ip / ip6 | IPv4/IPv6 address or dhcp/auto/manual |
gw / gw6 | Default gateway |
firewall | Enable Proxmox firewall rules |
rate | Bandwidth limit in Mbps |
tag | VLAN tag (1–4094) |
DNS
| Name | Type | Default | Description |
|---|---|---|---|
nameserver | string | — | DNS server IP address(es) |
searchdomain | string | — | DNS search domain(s) |
Console & TTY
| Name | Type | Default | Description |
|---|---|---|---|
console | boolean | 1 | Attach /dev/console device to the container |
cmode | `console\ | shell\ | tty` |
tty | integer (0–6) | 2 | Number of TTY devices available |
Boot & Lifecycle
| Name | Type | Default | Description |
|---|---|---|---|
onboot | boolean | 0 | Start container automatically at node boot |
startup | complex | — | Startup/shutdown ordering: order=<n>,up=<sec>,down=<sec> |
protection | boolean | 0 | Prevent accidental CT deletion or disk modification |
template | boolean | 0 | Mark as a template (disables start) |
lock | enum | — | Internal lock state: backup, create, migrate, snapshot, etc. |
hookscript | string | — | Script path (<storage>:snippets/<file>) run at CT lifecycle events |
Security & Features
| Name | Type | Default | Description |
|---|---|---|---|
unprivileged | boolean | 0 | Run as an unprivileged container (uid/gid mapping, no root on host) |
features | complex | — | Advanced feature grants |
features sub-options:
| Sub-option | Values | Description |
|---|---|---|
nesting | `0\ | 1` |
fuse | `0\ | 1` |
keyctl | `0\ | 1` |
mknod | `0\ | 1` |
mount | fstype list | Allow mounting specific filesystem types (e.g., nfs;cifs) |
force_rw_sys | `0\ | 1` |
Device Passthrough
| Name | Type | Default | Description |
|---|---|---|---|
dev[n] | complex | — | Pass a host device into the container |
dev[n] format: [path=]<Path>[,deny-write=1][,gid=<gid>][,mode=<octal>][,uid=<uid>]
Init & Runtime
| Name | Type | Default | Description |
|---|---|---|---|
entrypoint | string | /sbin/init | Init command with optional arguments |
debug | boolean | 0 | Verbose debug logging on container start |
Low-Level LXC
| Name | Type | Description |
|---|---|---|
lxc[n] | key=value | Raw LXC configuration lines passed through directly (advanced use) |
Notes
- Container IDs below 100 are reserved for internal Proxmox use.
unprivileged: 1is strongly recommended for untrusted workloads; it maps container root (uid 0) to an unprivileged host uid.- Mount points must not contain symlinks for security reasons.
shared: 1on a mount point only marks it as already shared — it does not automatically share the storage across nodes.- Most options take effect on next container start; running containers can be modified live for some options via
pct set. - Use
pct set <ctid> --<option> <value>rather than editing the file directly while the container is running.
Related
- qm-conf.md — QEMU VM configuration file format
- datacenter-cfg.md — Datacenter-wide configuration
qm.conf — VM Configuration File
Configuration file for QEMU/KVM virtual machines managed by Proxmox VE.
Path: /etc/pve/qemu-server/<VMID>.conf
Signature / Usage
OPTION: valueEach line is a colon-separated key-value pair. Blank lines and lines starting with # are treated as comments. Snapshot sections are appended at the end of the file with a [<snapshot-name>] header.
# Example VM config
name: myvm
memory: 2048
cores: 2
sockets: 1
ostype: l26
bios: seabios
boot: order=scsi0;ide2;net0
scsi0: local-lvm:vm-100-disk-0,size=32G
ide2: none,media=cdrom
net0: virtio,bridge=vmbr0,firewall=1
onboot: 1Options / Props
System & CPU
| Name | Type | Default | Description |
|---|---|---|---|
name | string | — | VM name displayed in the web interface |
ostype | enum | other | Guest OS type: l24, l26, win10, win11, w2k8, wvista, wxp, other, etc. |
bios | `ovmf\ | seabios` | seabios |
machine | string | — | QEMU machine type (e.g., q35, pc); can include `viommu=intel\ |
arch | `x86_64\ | aarch64` | host |
cores | integer (1-N) | 1 | CPU cores per socket |
sockets | integer (1-N) | 1 | Number of CPU sockets |
vcpus | integer | — | Number of hotplugged vCPUs (subset of total cores×sockets) |
cpu | complex | cputype=kvm64 | Emulated CPU type and flags; e.g., cputype=host,flags=+aes |
cpulimit | float (0–128) | 0 | Hard CPU usage cap in CPU units; 0 = unlimited |
cpuunits | integer (1–262144) | 1024 | Relative CPU weight for fair scheduling |
kvm | boolean | 1 | Enable KVM hardware virtualisation |
numa | boolean | 0 | Enable NUMA topology |
numa[n] | complex | — | NUMA node definition: `cpus=<id[-id]>,hostnodes=<...>,memory=<MiB>,policy=<preferred\ |
hugepages | `2\ | 1024\ | any` |
keephugepages | boolean | 0 | Retain hugepages allocation after VM shutdown |
Memory
| Name | Type | Default | Description |
|---|---|---|---|
memory | integer (MiB) | 512 | Maximum RAM; also accepts current=<MiB> form |
balloon | integer | — | Target RAM for balloon driver in MiB; enables memory ballooning |
shares | integer (0–50000) | 1000 | Memory share weight for auto-ballooning across VMs |
Boot
| Name | Type | Default | Description |
|---|---|---|---|
boot | complex | cdn | Boot order; preferred form: order=scsi0;ide2;net0 |
onboot | boolean | 0 | Start VM automatically at node boot |
startup | complex | — | Startup/shutdown ordering: order=<n>,up=<sec>,down=<sec> |
startdate | string | now | Initial RTC date: now, YYYY-MM-DD, or YYYY-MM-DDTHH:MM:SS |
freeze | boolean | — | Freeze CPU at start (use c in QEMU monitor to continue) |
Storage Devices
| Name | Type | Default | Description |
|---|---|---|---|
ide[n] | complex | media=disk | IDE hard disk or CD-ROM (n: 0–3) |
sata[n] | complex | media=disk | SATA hard disk or CD-ROM (n: 0–5) |
scsi[n] | complex | media=disk | SCSI hard disk or CD-ROM (n: 0–30); supports iothread, ro, ssd, discard |
virtio[n] | complex | — | VirtIO paravirtualised block device (n: 0–15) |
scsihw | enum | lsi | SCSI controller model: lsi, lsi53c810, virtio-scsi-pci, virtio-scsi-single, megasas, pvscsi |
efidisk0 | complex | efitype=2m | EFI variables disk; `efitype=2m\ |
tpmstate0 | complex | version=v1.2 | TPM 2.0 state disk; `version=v1.2\ |
cdrom | volume | — | Alias for ide2; specify ISO image or none,media=cdrom |
unused[n] | volume | — | References to detached/unused volumes; managed internally |
vmstatestorage | string | — | Storage ID for VM state (suspend/resume) |
Disk sub-options (common across ide, sata, scsi, virtio):
| Sub-option | Values | Description |
|---|---|---|
cache | `none\ | directsync\ |
aio | `io_uring\ | native\ |
discard | `ignore\ | on` |
backup | `0\ | 1` |
snapshot | `0\ | 1` |
ssd | `0\ | 1` |
Network
| Name | Type | Default | Description |
|---|---|---|---|
net[n] | complex | — | Network device (n: 0–31); model, bridge, MAC, VLAN, rate, firewall |
net[n] format: model=virtio,bridge=vmbr0,macaddr=BC:24:11:xx:xx:xx,firewall=1,tag=<1-4094>,rate=<Mbps>,queues=<n>,mtu=<int>
Common models: virtio, e1000, e1000e, rtl8139, vmxnet3.
Display & Console
| Name | Type | Default | Description |
|---|---|---|---|
vga | complex | — | Graphics adapter: std, cirrus, vmware, qxl, virtio, none; supports memory=<MiB> |
tablet | boolean | 1 | Enable USB tablet (absolute pointer; needed for correct mouse in VNC/Spice) |
serial[n] | string | — | Serial device: /dev/ttyS0 or socket (n: 0–3) |
parallel[n] | string | — | Parallel device passthrough: /dev/parport0 (n: 0–2) |
audio0 | complex | — | Audio device; device=intel-hda,driver=spice |
keyboard | enum | — | VNC keyboard layout (e.g., en-us, de, fr) |
spice_enhancements | complex | — | `foldersharing=1,videostreaming=all\ |
PCI / USB Passthrough
| Name | Type | Default | Description |
|---|---|---|---|
hostpci[n] | complex | driver=vfio | PCI passthrough: host=<BDF>[;BDF2],pcie=1,x-vga=1,rombar=1,mdev=<type> |
usb[n] | complex | — | USB passthrough: `host=<vendorid>:<productid>\ |
ivshmem | complex | — | Inter-VM shared memory: size=<MiB>,name=<string> |
rng0 | complex | source=/dev/urandom | VirtIO RNG: `source=/dev/urandom\ |
Cloud-Init
| Name | Type | Default | Description |
|---|---|---|---|
citype | enum | (OS-dependent) | Cloud-init format: nocloud, configdrive2, opennebula |
ciuser | string | — | Override cloud-init default user name |
cipassword | string | — | Cloud-init user password (stored hashed) |
ciupgrade | boolean | 1 | Run package upgrade on first boot |
sshkeys | string | — | URL-encoded public SSH key(s) for cloud-init user |
ipconfig[n] | complex | — | Per-NIC IP config: `ip=dhcp\ |
nameserver | string | — | Cloud-init DNS server IP |
searchdomain | string | — | Cloud-init DNS search domain |
cicustom | complex | — | Override cloud-init data volumes: user=<vol>,network=<vol>,meta=<vol>,vendor=<vol> |
SMBIOS / Identity
| Name | Type | Default | Description |
|---|---|---|---|
smbios1 | complex | — | SMBIOS type 1 data: manufacturer=<str>,product=<str>,serial=<str>,uuid=<UUID> |
vmgenid | UUID | auto | VM Generation ID; changes on clone/restore to signal guest |
hookscript | string | — | Script path (<storage>:snippets/<file>) run at VM lifecycle events |
Lifecycle & Protection
| Name | Type | Default | Description |
|---|---|---|---|
protection | boolean | 0 | Prevent accidental VM deletion or disk modification |
template | boolean | 0 | Mark VM as a template (disables start) |
lock | enum | — | Internal lock state: backup, clone, migrate, snapshot, etc. |
reboot | boolean | 1 | Allow guest-initiated reboot |
watchdog | complex | — | Watchdog device: `model=i6300esb\ |
acpi | boolean | 1 | Enable ACPI support |
localtime | boolean | — | Set guest RTC to local time (recommended for Windows) |
tdf | boolean | 0 | Time drift fix for Windows guests |
hotplug | string | network,disk,usb | Comma-separated list of hotpluggable features |
migrate_downtime | float (s) | 0.1 | Maximum tolerated downtime during live migration |
migrate_speed | integer (MB/s) | 0 | Migration bandwidth cap; 0 = unlimited |
QEMU Guest Agent
| Name | Type | Default | Description |
|---|---|---|---|
agent | complex | enabled=0 | Enable QEMU Guest Agent: `enabled=1,type=virtio\ |
Metadata
| Name | Type | Default | Description |
|---|---|---|---|
description | string | — | Free-text VM description shown in the web UI |
tags | string | — | Semicolon-separated metadata tags |
Notes
- VM IDs below 100 are reserved for internal Proxmox use.
- Options
hostpci[n]andpcie=1generally prevent live migration unless the host supports SR-IOV or mdev. - For UEFI boot, set
bios: ovmfand add anefidisk0. - Snapshot state is appended inline; do not edit the
[<snapshot>]sections manually. - Changes to most options require a VM restart; some (network, disk) support hotplug.
- Use
qm set <vmid> --<option> <value>rather than editing the file directly while the VM is running.
Related
- pct-conf.md — LXC container configuration file format
- datacenter-cfg.md — Datacenter-wide configuration
config
| Name | Description | Path |
|---|---|---|
| datacenter.cfg — Datacenter Configuration File | Cluster-wide default settings for a Proxmox VE datacenter. | datacenter-cfg.md |
| pct.conf — Container Configuration File | Configuration file for LXC containers managed by Proxmox VE. | pct-conf.md |
| qm.conf — VM Configuration File | Configuration file for QEMU/KVM virtual machines managed by Proxmox VE. | qm-conf.md |
Backup & Restore
Proxmox VE provides integrated backup via vzdump. All backups are full backups containing VM/CT configuration and complete disk data. Proxmox Backup Server (PBS) integration adds deduplication, live-restore, and single-file restore.
Signature / Usage
# Backup a VM (snapshot mode)
vzdump <vmid> --mode snapshot --storage <storage-id>
# Backup with retention
vzdump <vmid> --mode snapshot --storage pbs-storage \
--prune-backups keep-daily=7,keep-weekly=4,keep-monthly=3
# Restore a VM
qmrestore <backup-file> <new-vmid>
# Restore a container
pct restore <ctid> <backup-file>
# Limit bandwidth during restore (KiB/s)
qmrestore <backup-file> <vmid> --bwlimit 51200Options / Props
vzdump modes
| Mode | VM behavior | Consistency |
|---|---|---|
snapshot | Runs throughout; uses storage snapshot | Minimal inconsistency risk |
stop | Shuts down for backup, restarts after | Highest consistency |
suspend | Suspends VM/CT briefly for snapshot | Compatibility fallback |
Container-specific change detection (with PBS)
| Mode | Description |
|---|---|
default | Detects changes by metadata + data |
data | Hash-based data comparison |
metadata | Metadata-only comparison (faster, less thorough) |
Retention (--prune-backups)
| Key | Description |
|---|---|
keep-last=N | Keep the N most recent backups |
keep-hourly=N | Keep N hourly backups |
keep-daily=N | Keep N daily backups |
keep-weekly=N | Keep N weekly backups |
keep-monthly=N | Keep N monthly backups |
keep-yearly=N | Keep N yearly backups |
Key options
| Option | Description |
|---|---|
--storage | Target storage ID |
--mode | Backup mode: snapshot, stop, suspend |
--bwlimit | Bandwidth limit in KiB/s |
--fleecing | Cache backup data on designated storage before sending to target (reduces guest I/O impact) |
--notes-template | Template for backup notes |
Notes
- Fleecing (VMs only): caches backup data on a fast local storage before streaming to PBS, improving guest I/O at the cost of extra storage space
- Live-restore (PBS only): VM starts immediately while disk data is loaded in the background; ideal for large VMs requiring rapid recovery
- Single-file restore (PBS only): browse and download individual files from a backup without restoring the entire disk
- Backup jobs can be scheduled in the web UI under Datacenter → Backup; retention policies are set per job
--bwlimitprevents backup/restore from saturating storage and impacting running guests
Related
- vm-qemu.md
- container-lxc.md
- storage.md
Hyper-Converged Ceph
Proxmox VE integrates Ceph directly, allowing cluster nodes to serve as both compute and storage. Core components are OSD (object storage), MON (monitor), and MGR (manager).
Signature / Usage
# Initialize Ceph on the first node
pveceph init --network 10.10.10.0/24
# Add a monitor
pveceph mon create
# Add an OSD (one per physical disk)
pveceph osd create /dev/sdb
# Create a storage pool
pveceph pool create <pool-name> --size 3 --min_size 2
# Check Ceph cluster status
ceph statusOptions / Props
pveceph init
| Option | Description |
|---|---|
--network | Public network CIDR (storage traffic) |
--cluster-network | Separate OSD replication/heartbeat network (optional but recommended) |
pveceph pool create
| Option | Description |
|---|---|
--size | Number of replicas (default: 3) |
--min_size | Minimum replicas to allow I/O (default: 2) |
--pg_num | Number of Placement Groups (default: 128) |
--erasure-coding | Use erasure-coded pool instead of replicated |
Component roles
| Component | Minimum | Role |
|---|---|---|
| MON | 3 | Maintains cluster map and quorum |
| MGR | 1 (2+ recommended) | Monitoring, dashboards, modules |
| OSD | 1 per disk | Stores objects; 1 OSD = 1 physical disk |
Notes
- Minimum recommended deployment: 3 nodes, 12 OSDs distributed evenly across nodes
- Recommended memory: 8 GB per OSD for stable performance
- Recommended network: 10+ Gbps dedicated; separate public and cluster networks reduce OSD replication impact on client I/O
- Do not use hardware RAID controllers with Ceph OSDs; use raw disks or HBAs in passthrough mode
- SSDs improve OSD recovery time and latency; NVMe recommended for WAL/DB devices
Related
- storage.md
- cluster.md
- ha.md
Cluster Management
Proxmox VE cluster management uses pvecm with Corosync for group communication and pmxcfs (Proxmox Cluster File System) to distribute configuration across all nodes in real time.
Signature / Usage
# Create a new cluster
pvecm create <cluster-name>
# Add a node to an existing cluster (run on the new node)
pvecm add <existing-node-IP>
# Show cluster status
pvecm status
# Remove a node (run from another cluster node)
pvecm delnode <nodename>Options / Props
pvecm add
| Option | Description |
|---|---|
<IP> | IP address of an existing cluster node |
--ring0_addr | Explicit address for ring 0 (Corosync link 0) |
--link1 | Address for a second Corosync link (redundancy) |
Corosync requirements
| Parameter | Value |
|---|---|
| UDP ports | 5405–5412 |
| TCP port | 22 (SSH tunnel) |
| Max latency | < 5 ms between nodes |
| Minimum nodes for HA quorum | 3 |
Notes
- Each node receives one vote; quorum is lost when fewer than half the nodes are reachable, causing the cluster to enter read-only mode
- Dedicated physical NIC for cluster traffic is strongly recommended; Corosync is latency-sensitive despite low bandwidth usage
- Before removing a node: migrate all VMs/CTs away and remove any Ceph or replication jobs referencing it — these become irremovable otherwise
- Always power off a node before deletion to avoid cluster corruption
pmxcfstransparently replicates/etc/pve/to all nodes in real time over a FUSE filesystem
Related
- ha.md
- storage.md
LXC Containers
Proxmox VE manages Linux Containers (LXC) via the pct CLI and the web UI. Containers share the host kernel and are lighter than VMs. Unprivileged containers are the recommended default.
Signature / Usage
# Download a container template
pveam download local debian-12-standard_12.7-1_amd64.tar.zst
# Create a container from a template
pct create <ctid> local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
--hostname myct --memory 512 --rootfs local-lvm:8
# Start / stop / enter shell
pct start <ctid>
pct stop <ctid>
pct enter <ctid>
# Resize root disk
pct resize <ctid> rootfs +5G
# Restore from backup
pct restore <ctid> /path/to/backup.tar.zstOptions / Props
pct create key options
| Option | Description |
|---|---|
--hostname | Container hostname |
--memory | RAM in MiB |
--swap | Swap in MiB |
--rootfs | Root disk: <storage>:<size> |
--net0 | Network: name=eth0,bridge=vmbr0,ip=dhcp |
--cores | Visible CPU cores |
--cpulimit | Max CPU time (fractional, e.g. 0.5) |
--unprivileged | Run as unprivileged (default: 1) |
--features | Enable extra kernel features: nesting=1, keyctl=1 |
Mount points
| Type | Description |
|---|---|
| Storage-backed | Managed by PVE; supports snapshots and resize |
| Bind mount | Direct host path access; avoid system directories |
| Device mount | Raw block device; rarely recommended |
Notes
- Unprivileged containers (default) map container root UID to an unprivileged host UID — container escapes affect only unprivileged users
- Privileged containers rely on AppArmor and seccomp; use only in trusted environments
- Bind mounts bypass Proxmox storage management and do not support snapshots or backups via
vzdump - Enable
nesting=1feature to run Docker or systemd inside a container - Templates are tar archives managed by
pveam; available from official Proxmox template repositories - Resource limits use Linux cgroupv2 in modern Proxmox versions
Related
- storage.md
- backup-restore.md
Firewall
Proxmox VE includes a built-in firewall that operates at three levels: datacenter, node/host, and VM/container. Configuration is stored in /etc/pve/firewall/ and distributed via pmxcfs.
Signature / Usage
# Configuration files
/etc/pve/firewall/cluster.fw # Datacenter-level rules
/etc/pve/nodes/<node>/host.fw # Node/host-level rules
/etc/pve/firewall/<vmid>.fw # VM/CT-level rules# Example cluster.fw
[OPTIONS]
enable: 1
policy_in: DROP
policy_out: ACCEPT
[RULES]
IN ACCEPT -p tcp --dport 22 -source +management
IN DROP -source +blacklistOptions / Props
Configuration levels
| Level | Config file | Scope |
|---|---|---|
| Datacenter | /etc/pve/firewall/cluster.fw | Cluster-wide default rules |
| Node/host | /etc/pve/nodes/<node>/host.fw | Per-node overrides |
| VM/CT | /etc/pve/firewall/<vmid>.fw | Per-VM/CT interface rules |
Traffic zones
| Zone | Description |
|---|---|
host | Traffic to/from the PVE host itself |
vm | Traffic to/from VMs and containers |
vnet | Traffic through SDN virtual networks |
Traffic directions
| Direction | Applies to |
|---|---|
IN | Incoming traffic |
OUT | Outgoing traffic |
FORWARD | Forwarded traffic (host/VNet zones only) |
Standard IP sets
| Set name | Description |
|---|---|
management | IPs allowed administrative access |
blacklist | IPs denied across all firewall levels |
ipfilter-net<N> | Anti-spoofing filter per VM network interface |
Default auto-allowed traffic (when firewall is enabled)
- Loopback interface
- Established/related connections
- Corosync cluster traffic (UDP 5405–5412)
- Web UI (TCP 8006), SSH (TCP 22), SPICE (TCP 5900–5999), SPICE proxy (TCP 3128)
Notes
- Each virtual network device has its own firewall enable flag; the firewall must be enabled at both the datacenter and VM level to take effect
- Security groups bundle reusable rule sets at the cluster level; reference them in VM rules using
GROUP <name> - IP sets group hosts/networks referenced in rules with
+setnamesyntax - IP aliases associate human-readable names with addresses for cleaner rule definitions
Related
- networking-sdn.md
- user-access.md
High Availability (HA)
Proxmox VE HA manager automatically restarts or migrates VMs and containers when a cluster node fails. It uses watchdog-based fencing to prevent split-brain scenarios.
Signature / Usage
# Add a VM to HA management
ha-manager add vm:<vmid> --state started --max_restart 2 --max_relocate 1
# Add a container to HA
ha-manager add ct:<ctid> --state started
# List HA resources
ha-manager status
# Remove from HA
ha-manager remove vm:<vmid>Options / Props
ha-manager resource options
| Option | Default | Description |
|---|---|---|
--state | started | Desired state: started, stopped, disabled, ignored |
--max_restart | 1 | Restart attempts on the same node before relocating |
--max_relocate | 1 | Relocation attempts to other nodes before giving up |
--group | — | HA group name for node affinity (deprecated since v9.0) |
Node Affinity Rules (v9.0+, replaces HA Groups)
| Property | Description |
|---|---|
| Nodes | List of preferred/allowed nodes |
| Priority | Higher priority = preferred failover target |
| Strict | If true, resource only runs on listed nodes |
Resource Affinity Rules
| Type | Behavior |
|---|---|
| Positive affinity | Keep resources together on the same node |
| Negative affinity | Spread resources across separate nodes |
Watchdog modes
| Mode | Description |
|---|---|
| Hardware watchdog | Independent circuit; preferred for reliable fencing |
softdog | Linux kernel fallback; less reliable |
Watchdog states
| State | Description |
|---|---|
| Armed | Active HA, watchdog open, auto-failover enabled |
| Standby | Ready but no active CRM master |
| Disarmed | No auto-failover (e.g., during maintenance) |
Notes
- HA requires a minimum of 3 cluster nodes for reliable quorum
- Two daemons cooperate:
pve-ha-lrm(Local Resource Manager, per node) andpve-ha-crm(Cluster Resource Manager, elected master) - Fencing is mandatory — without reliable fencing, HA cannot safely restart services from a failed node
- HA Groups are deprecated since PVE 9.0; use Node Affinity Rules instead
pmxcfslocking ensures only one LRM and one CRM master run at any time
Related
- cluster.md
- vm-qemu.md
- container-lxc.md
Installation
Install Proxmox VE from a hybrid ISO image (recommended) or on top of an existing Debian system. The installer handles partitioning, timezone/network configuration, and package setup.
Signature / Usage
# Access web UI after installation
https://<IP>:8006Options / Props
Installer disk layout options (LVM)
| Parameter | Description |
|---|---|
hdsize | Total disk space to use |
swapsize | Swap volume size (default: 4–8 GB) |
maxroot | Maximum size for OS root volume |
maxvz | Maximum size for VM data volume |
ZFS options
| Parameter | Description |
|---|---|
ashift | Sector size exponent (12 = 4 KB sectors) |
compress | Compression algorithm (lz4, gzip, zstd) |
checksum | Data integrity verification level |
copies | Number of data copies across vdevs |
BTRFS options
| Parameter | Description |
|---|---|
| Compression | zlib, lzo, or zstd |
| Reserved space | Allows future manual partition additions |
Notes
- All existing data on target disk is erased during installation
- ZFS on hardware RAID is unsupported and risks data loss; use ZFS directly on raw disks
- Secure Boot must be disabled for installer versions before 8.1
- ZFS works best with plenty of RAM: ~4 GB base + 1 GB per TB of raw storage
- Advanced users can install on existing Debian, but this requires detailed knowledge of PVE internals
- After installation, log in to the web interface at
https://<IP>:8006with root credentials set during setup
Related
- cluster.md
- storage.md
Networking & SDN
Proxmox VE uses the Linux network stack configured via /etc/network/interfaces. The Software-Defined Networking (SDN) layer adds virtual zones and VNets for fine-grained multi-node guest network control.
Signature / Usage
# Apply network config live (requires ifupdown2)
ifreload -a
# Example /etc/network/interfaces — bridge with VLAN
auto vmbr0
iface vmbr0 inet static
address 192.168.1.10/24
gateway 192.168.1.1
bridge-ports eno1
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
# Example bond configuration
auto bond0
iface bond0 inet manual
bond-slaves eno1 eno2
bond-mode active-backup
bond-miimon 100Options / Props
Traditional networking
| Interface type | Naming | Description |
|---|---|---|
| Physical | eno1, enp3s0 | Physical NIC (systemd naming) |
| Bridge | vmbrX (0–4094) | Virtual switch for guests |
| Bond | bondN | NIC teaming / aggregation |
| VLAN | eno1.50 | Tagged VLAN sub-interface |
SDN zone types
| Zone type | Description |
|---|---|
simple | Isolated bridge, local VMs on a single node |
vlan | VLAN tagging on an existing bridge, multi-node |
qinq | Stacked VLAN (802.1ad) for additional isolation |
vxlan | Layer 2 over UDP tunnel across nodes |
evpn | Routable Layer 3 with BGP/FRRouting |
SDN VNet options
| Option | Description |
|---|---|
| ID | Up to 8 characters |
| Zone | Associated zone |
| Tag | Unique VLAN/VXLAN ID |
| VLAN Aware | Allow guest-level VLAN tagging |
| Isolate Ports | Restrict guest-to-guest traffic on same bridge |
SDN subnet options
| Option | Description |
|---|---|
| CIDR | IP range (e.g. 10.0.1.0/24) |
| Gateway | Default gateway for Layer 3 zones |
| SNAT | Enable Source NAT for external connectivity |
| IPAM | Auto-assign IPs from pool |
| DNS | Register subnet in DNS |
Notes
- Network changes are staged in
/etc/network/interfaces.new; apply with "Apply Configuration" in the web UI orifreload -a(requiresifupdown2) - SDN core packages are installed by default in PVE 8.1+; advanced features require
dnsmasq(DHCP),frr(BGP/EVPN), andifupdown2 - Use a dedicated physical NIC for Corosync cluster traffic separate from VM traffic
- VNets become standard Linux bridges on each node after SDN configuration is applied
Related
- cluster.md
- vm-qemu.md
- container-lxc.md
- firewall.md
Notifications
Proxmox VE routes system alerts to configurable notification targets using matchers. Targets and matchers are managed in the web UI under Datacenter → Notifications.
Signature / Usage
# Example notification target (sendmail)
[sendmail: admin-mail]
mailto-user root@pam
from-address pve@example.com
# Example matcher
[matcher: errors-only]
target admin-mail
match-severity error
match-field type=vzdumpOptions / Props
Notification target types
| Type | Description |
|---|---|
sendmail | Deliver via system sendmail binary (Postfix); queues on failure |
smtp | Send directly to a mail relay; no retry on failed delivery |
gotify | Push notifications via self-hosted Gotify server |
webhook | HTTP POST/PUT/GET to any URL; supports Handlebars templating |
Sendmail / SMTP options
| Option | Description |
|---|---|
mailto | Direct recipient email addresses |
mailto-user | Proxmox user accounts to notify (uses their email) |
from-address | Sender address |
server | SMTP server hostname (smtp only) |
port | SMTP port (smtp only) |
username / password | SMTP auth credentials (smtp only) |
Gotify options
| Option | Description |
|---|---|
server | Gotify base URL |
token | Application token from Gotify UI |
Webhook options
| Option | Description |
|---|---|
url | Target URL (supports Handlebars: {{title}}, {{message}}) |
method | HTTP method: post, put, get |
header | Additional HTTP headers |
body | Request body template |
Matcher filter options
| Option | Description |
|---|---|
target | Notification target name |
match-severity | Alert severity: info, notice, warning, error, unknown |
match-field | Metadata field match: type=vzdump, hostname=pve1, etc. (exact or regex) |
match-calendar | Time-based schedule: e.g. mon-fri 9-17 |
mode | all (all matchers run) or first-match (stop at first match) |
Built-in notification event types
| Event | Description |
|---|---|
vzdump | Backup job success or failure |
replication | Storage replication failure |
fencing | Node fencing event |
package-updates | Pending package updates |
system-mail | Generic system mail forwarding |
Notes
- A matcher with no filter rules always triggers for every event
- Multiple matchers targeting the same notification target will not send duplicate messages
- SMTP target has no retry mechanism; use
sendmail/Postfix for reliable delivery - Webhook bodies support Handlebars helpers: URL encoding, JSON escaping, and metadata field injection
- Common webhook integrations: Discord, Slack, ntfy.sh
Related
- user-access.md
- backup-restore.md
Core
| Name | Description | Path |
|---|---|---|
| Installation | ISO/bare-metal install, ZFS/LVM/BTRFS root, post-install access | installation.md |
| Cluster Management | pvecm, pmxcfs, Corosync quorum, node join/remove | cluster.md |
| Storage | Storage backends (dir/LVM/ZFS/NFS/CIFS/RBD/iSCSI), storage.cfg | storage.md |
| Virtual Machines (QEMU/KVM) | qm CLI, CPU/memory/disk/cloud-init, templates, migration | vm-qemu.md |
| LXC Containers | pct CLI, templates, bind mounts, privileged/unprivileged | container-lxc.md |
| Networking & SDN | bridge/bond/VLAN, SDN zones/VNets/subnets | networking-sdn.md |
| Hyper-Converged Ceph | OSD/MON/MGR setup, pools, hardware recommendations | ceph.md |
| High Availability (HA) | HA resources, node affinity rules, fencing, watchdog | ha.md |
| Backup & Restore | vzdump modes, PBS integration, retention, live-restore | backup-restore.md |
| Firewall | Datacenter/node/VM firewall rules, security groups, IP sets | firewall.md |
| User & Access Management | Users/groups/roles/realms, ACLs, API tokens, 2FA | user-access.md |
| Notifications | Notification targets (sendmail/SMTP/Gotify/webhook), matchers | notifications.md |
Storage
Proxmox VE storage configuration lives in /etc/pve/storage.cfg and is distributed automatically to all cluster nodes. Backends are divided into file-level (flexible content types) and block-level (raw images only).
Signature / Usage
# Add a storage backend via CLI
pvesm add <type> <storage-id> [options]
# Example: add a local directory storage
pvesm add dir local-data --path /mnt/data --content images,backup
# List configured storages
pvesm statusOptions / Props
Storage backend comparison
| Backend | Type | Shared | Snapshots | Typical use |
|---|---|---|---|---|
dir | File | No | qcow2 only | Local directory |
nfs | File | Yes | qcow2 only | Network file share |
cifs | File | Yes | qcow2 only | Windows/SMB share |
zfspool | File+Block | No | Native | Local ZFS pool |
lvm | Block | Possible (iSCSI) | Volume chains | iSCSI / local block |
lvmthin | Block | No | Native | Thin-provisioned local |
rbd | Block | Yes | Native | Ceph distributed storage |
iscsi | Block | Yes | No | iSCSI target |
cephfs | File | Yes | No | Ceph filesystem |
Common storage.cfg properties
| Property | Description |
|---|---|
path | Filesystem path (dir backend) |
content | Allowed content types: images, rootdir, backup, iso, vztmpl, snippets |
nodes | Restrict storage to specific cluster nodes |
format | Default disk image format: raw, qcow2, vmdk |
shared | Mark storage as shared (skips data copy on migration) |
Notes
- Thin provisioning allows volumes larger than available space; monitor utilization carefully to prevent data corruption
- Shared storage (NFS, Ceph RBD, etc.) enables live VM migration without copying disk data
- Snapshot support depends on backend: native on ZFS/LVM-thin/RBD; qcow2-based on file backends
- Never reuse storage configuration (especially locking storage) across multiple independent clusters
Related
- vm-qemu.md
- container-lxc.md
- ceph.md
- backup-restore.md
User & Access Management
Proxmox VE uses role-based access control (RBAC) with users, groups, roles, and authentication realms. Configuration is stored in /etc/pve/user.cfg and distributed to all cluster nodes.
Signature / Usage
# Create a user
pveum user add alice@pve --comment "Alice" --email alice@example.com
# Assign a role on a path
pveum acl modify /vms/100 --user alice@pve --role PVEVMAdmin
# Create a group and assign a role
pveum group add ops-team
pveum acl modify /nodes/pve1 --group ops-team --role PVEAuditor
# Create an API token
pveum user token add alice@pve token1 --privsep 1
# List ACLs
pveum acl listOptions / Props
User identifier format
<username>@<realm>Examples: root@pam, alice@pve, bob@ldap
Authentication realms
| Realm | Type | Description |
|---|---|---|
pam | Linux PAM | System users (root always uses this) |
pve | Built-in | Proxmox internal password store |
ldap | LDAP | External LDAP/AD directory |
ad | Active Directory | Microsoft AD (Kerberos) |
openid | OpenID Connect | OAuth2/OIDC provider |
Built-in roles
| Role | Description |
|---|---|
Administrator | Full access |
PVEAdmin | Most admin tasks, no system config |
PVEAuditor | Read-only |
PVEDatastoreAdmin | Manage storage |
PVEVMAdmin | Full VM management |
PVEVMUser | Start/stop/access VMs |
PVEPoolAdmin | Manage resource pools |
NoAccess | Explicitly deny access |
ACL path templates
| Path | Scope |
|---|---|
/ | All resources |
/nodes/<node> | Specific node |
/vms/<vmid> | Specific VM or container |
/storage/<storageid> | Specific storage |
/pools/<poolname> | Resource pool |
/access/groups | Group management |
pveum acl modify options
| Option | Description |
|---|---|
--user | User to assign role to |
--group | Group to assign role to |
--token | API token to assign role to |
--role | Role name |
--propagate | Inherit to child paths (default: 1) |
API token options
| Option | Description |
|---|---|
--privsep 1 | Separated privileges (token needs explicit ACLs) |
--privsep 0 | Full user privileges (inherits all user permissions) |
--expire | Expiry timestamp (0 = no expiry) |
Two-factor authentication methods
| Method | Description |
|---|---|
| TOTP | Time-based one-time password (RFC 6238) |
| WebAuthn | Hardware security keys, TPM |
| Recovery keys | Single-use backup codes |
Notes
root@pamcannot be deleted and always retains Administrator access- Prefer assigning roles to groups rather than individual users for maintainable ACLs
- API token values are shown only once upon creation; store securely
- By default, tokens use
privsep=1(separated privileges) and require explicit ACL grants - 2FA lockout: 8 failed attempts for TOTP; 100 for WebAuthn and recovery keys
- Permissions propagate down the path hierarchy; user-level permissions override group permissions at the same path
Related
- firewall.md
- notifications.md
Virtual Machines (QEMU/KVM)
Proxmox VE manages KVM virtual machines via the qm CLI and the web UI. Sensible defaults are applied automatically; key settings affect performance, portability, and storage behavior.
Signature / Usage
# Create a VM
qm create <vmid> --name myvm --memory 2048 --cores 2 --net0 virtio,bridge=vmbr0
# Start / stop / status
qm start <vmid>
qm stop <vmid>
qm status <vmid>
# Convert VM to template
qm template <vmid>
# Live migrate to another node
qm migrate <vmid> <target-node> --onlineOptions / Props
CPU
| Option | Description |
|---|---|
--sockets | Number of CPU sockets |
--cores | Cores per socket |
--cpu | CPU model: host (max perf, no migration) or portable types like x86-64-v2-AES |
--cpulimit | Max CPU bandwidth (1.0 = 100% of one core) |
--cpuunits | Relative CPU priority among VMs |
Memory
| Option | Description |
|---|---|
--memory | Maximum memory in MiB |
--balloon | Minimum memory for dynamic allocation (0 = fixed) |
Disk
| Option | Description |
|---|---|
--scsi0 | SCSI disk (VirtIO SCSI controller recommended) |
--ide2 | CD-ROM / ISO attachment |
--scsihw | Controller type: virtio-scsi-pci, virtio-scsi-single (with iothread) |
--discard | Enable TRIM/discard pass-through (requires thin-provisioned storage) |
Network
| Option | Description |
|---|---|
--net0 | NIC config: virtio,bridge=vmbr0 (VirtIO delivers ~3× E1000 throughput) |
--queues | Multiqueue count — set to vCPU count for high packet-rate workloads |
Firmware
| Option | Description |
|---|---|
--bios | seabios (default) or ovmf (UEFI; required for Windows 11) |
--efidisk0 | EFI disk (use efitype=4m for Secure Boot support) |
Cloud-Init
| Option | Description |
|---|---|
--cicustom | Custom cloud-init snippet path |
--ciuser | Default user to create |
--sshkeys | SSH public keys to inject |
--ipconfig0 | Network config: ip=dhcp or ip=x.x.x.x/24,gw=x.x.x.x |
Notes
- Use VirtIO SCSI single with
iothread=1as the modern default disk controller for Linux VMs - Setting
--cpu hostprovides maximum performance but prevents live migration across different CPU families - Dynamic memory (balloon) adds memory when host usage is below 80%; leave enabled unless debugging
qm migrate --onlinerequires shared storage or storage migration support- Memory encryption (SEV) on AMD EPYC prevents snapshots and live migration
Related
- storage.md
- ha.md
- backup-restore.md
Proxmox VE Daemons
Core Proxmox VE background daemons. Each runs as a systemd service and can be controlled with systemctl start|stop|restart|status <name> or the daemon's own CLI.
Signature / Usage
External client
│ HTTPS :8006
▼
pveproxy (www-data)
│ HTTP :85 (privileged ops)
▼
pvedaemon (root)
│ reads/writes
▼
pmxcfs (/etc/pve) ←→ Corosync ←→ other nodesOptions / Props
| Daemon | Service Name | Port | User | Role |
|---|---|---|---|---|
| pvedaemon | pvedaemon | 85 (localhost only) | root | Core API worker. Exposes the full PVE API on 127.0.0.1:85 and executes all privileged operations. Spawns up to 3 worker processes (configurable via MAX_WORKERS in /etc/default/pvedaemon, max 127). |
| pveproxy | pveproxy | 8006 (HTTPS, all interfaces) | www-data | Public HTTPS gateway. Forwards unprivileged API requests itself and proxies privileged requests to pvedaemon. Handles SSL/TLS, host-based ACLs, and automatic cluster-node routing. Configurable via /etc/default/pveproxy. |
| pvestatd | pvestatd | — | root | Status poller. Periodically queries status of VMs, containers, and storage, then distributes collected metrics to all cluster nodes. |
| pve-firewall | pve-firewall | — | root | Distributed firewall. Runs on each node and programs iptables/nftables rules for host, VM/container, and VNet traffic zones. Config files: /etc/pve/firewall/cluster.fw, /etc/pve/nodes/<node>/host.fw, /etc/pve/firewall/<VMID>.fw. |
| pve-ha-crm | pve-ha-crm | — | root | Cluster Resource Manager. Elected master daemon that makes cluster-wide HA decisions, issues start/stop/migrate commands to LRM instances, and handles failover when a node becomes unavailable. |
| pve-ha-lrm | pve-ha-lrm | — | root | Local Resource Manager. Runs on every node; receives commands from CRM, executes them locally (start/stop/migrate), and reports results back. Uses distributed locks via pmxcfs for safe coordination. |
| pmxcfs | pve-cluster | — | root | Cluster File System. FUSE-based, database-backed (SQLite + Corosync) filesystem mounted at /etc/pve. Replicates all cluster configuration in real time. Enforces quorum (read-only when quorum lost). Max capacity: 128 MB. |
| pvescheduler | pvescheduler | — | root | Job scheduler. Triggers scheduled replication jobs and vzdump (backup) jobs according to their configured schedules. Reads job definitions from /etc/pve/jobs.cfg. |
| spiceproxy | spiceproxy | 3128 (TCP) | www-data | SPICE HTTP proxy. Forwards CONNECT requests from SPICE clients to the correct PVE VM's display socket. Shares ACL configuration with pveproxy (/etc/default/pveproxy). |
| qmeventd | qmeventd | Unix socket | root | QEMU event handler. Monitors QMP sockets for SHUTDOWN events; on client disconnect after shutdown, runs /usr/sbin/qm cleanup to remove stale tap devices and vGPU allocations. |
Notes
Key Ports
| Port | Protocol | Purpose |
|---|---|---|
| 8006 | TCP/HTTPS | Web UI & REST API (pveproxy) |
| 85 | TCP/HTTP | Internal API (pvedaemon, localhost only) |
| 3128 | TCP | SPICE proxy (spiceproxy) |
| 5900–5999 | TCP | VNC console sessions |
| 5405–5412 | UDP | Corosync cluster communication |
| 60000–60050 | TCP | Live migration |
| 22 | TCP | SSH (cluster node communication, pvesh proxying) |
pvedaemonandpveproxyare the API stack: never expose port 85 externally.pve-ha-crmandpve-ha-lrmwork together: CRM holds the cluster view, LRM executes on each node. Both rely on pmxcfs locks for coordination.pmxcfsmust be running before most other PVE services start; it provides/etc/pvewhich holds all cluster config.- Worker counts for
pvedaemonandpveproxyare both controlled byMAX_WORKERSin their respective/etc/default/files.
Services
| Name | Description | Path |
|---|---|---|
| Daemons | Core background daemons, communication overview, and key ports | daemons.md |
API Automation
Automate Proxmox VE operations via the REST API (curl + API token) and the pvesh CLI wrapper.
# --- API Token authentication ---
# Create a token in the GUI: Datacenter > Permissions > API Tokens
# Or via pvesh:
pvesh create /access/users/root@pam/token/monitoring --privsep 0
# Token format: USER@REALM!TOKENID=UUID
TOKEN="root@pam!monitoring=aaaaaaaaa-bbb-cccc-dddd-ef0123456789"
BASE="https://pve.example.com:8006/api2/json"
# --- Read operations with curl ---
# List cluster nodes
curl -sk -H "Authorization: PVEAPIToken=${TOKEN}" "${BASE}/nodes"
# Get version info
curl -sk -H "Authorization: PVEAPIToken=${TOKEN}" "${BASE}/version"
# List VMs on a node
curl -sk -H "Authorization: PVEAPIToken=${TOKEN}" "${BASE}/nodes/pve1/qemu"
# List containers on a node
curl -sk -H "Authorization: PVEAPIToken=${TOKEN}" "${BASE}/nodes/pve1/lxc"
# --- Write operations with curl ---
# Start VM 123
curl -sk -X POST -H "Authorization: PVEAPIToken=${TOKEN}" \
"${BASE}/nodes/pve1/qemu/123/status/start"
# Stop VM 123
curl -sk -X POST -H "Authorization: PVEAPIToken=${TOKEN}" \
"${BASE}/nodes/pve1/qemu/123/status/stop"
# Create a container via API
curl -sk -X POST -H "Authorization: PVEAPIToken=${TOKEN}" \
--data-urlencode "vmid=101" \
--data-urlencode "ostemplate=local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst" \
--data-urlencode "hostname=api-ct" \
--data-urlencode "memory=512" \
--data-urlencode "net0=name=eth0,bridge=vmbr0,ip=dhcp" \
--data-urlencode "storage=local-lvm" \
"${BASE}/nodes/pve1/lxc"
# --- pvesh: direct CLI access to the same API ---
# Get cluster node list
pvesh get /nodes
# Get VM status
pvesh get /nodes/pve1/qemu/123/status/current
# Start a container
pvesh create /nodes/pve1/lxc/101/status/start
# List all users
pvesh get /access/users
# Create a new user
pvesh create /access/users --userid deploy@pve
# Update cluster options (e.g., set default console to html5)
pvesh set /cluster/options --console html5
# Inspect available API endpoints under a path
pvesh ls /nodes/pve1Notes
- API tokens with
--privsep 0inherit the owner's full permissions; use--privsep 1and assign minimal ACLs for service accounts. curl -skdisables certificate verification (-k) for self-signed certs; replace with-cacert /etc/pve/pve-root-ca.pemin production.- Write operations (POST/PUT/DELETE) via curl do not need a
CSRFPreventionTokenheader when using API tokens (only ticket-based auth requires it). - All API calls return UPID task IDs for async operations; poll
GET /nodes/{node}/tasks/{upid}/statusto track completion.
Backup and Restore
Back up VMs and containers with vzdump, restore with qmrestore/pct restore, and schedule recurring jobs.
# --- On-demand backups ---
# Snapshot-mode backup of VM 123 to a storage (no guest downtime)
vzdump 123 --storage my_backup_storage --mode snapshot --compress zstd
# Backup a container (suspend mode for consistency)
vzdump 200 --storage my_backup_storage --mode suspend --compress zstd
# Backup all guests at once, send notification email
vzdump --all --mode snapshot --storage my_backup_storage --mailto admin@example.com
# Backup multiple specific guests
vzdump 101 102 103 --storage my_backup_storage --compress zstd
# Backup all guests except specific IDs
vzdump --all --mode suspend --storage my_backup_storage --exclude 101,102
# Limit backup bandwidth to 100 MiB/s
vzdump 123 --storage my_backup_storage --bwlimit 102400
# Backup with retention pruning (keep last 3, last 13 daily, last 9 yearly)
vzdump 123 --storage my_backup_storage --prune-backups keep-last=3,keep-daily=13,keep-yearly=9
# --- Restore ---
# Restore a VM backup to new VMID 601
qmrestore /mnt/backup/vzdump-qemu-123-2024_01_15.vma.zst 601
# Live-restore VM (starts immediately, data loads in background — PBS only)
qmrestore /mnt/backup/vzdump-qemu-123.vma 601 --live-restore
# Restore a container backup to new CTID 600
pct restore 600 /mnt/backup/vzdump-lxc-200-2024_01_15.tar.zst
# Clone a container to CTID 300 via pipe (no intermediate file)
vzdump 200 --stdout | pct restore --rootfs 4 300 -
# --- Default settings via config file ---
# /etc/vzdump.conf
# storage: my_backup_storage
# mode: snapshot
# compress: zstd
# bwlimit: 10000
# --- Schedule daily backups at 22:00 (legacy cron) ---
# Add to /etc/cron.d/vzdump or use the Datacenter > Backup GUI scheduler:
# 0 22 * * * root /usr/sbin/vzdump --all --mode snapshot --storage my_backup_storageNotes
- Backup modes:
snapshot(no downtime, requires snapshot-capable storage),suspend(brief pause),stop(full downtime but always consistent). zstdcompression offers the best speed/ratio trade-off; usegzipwhen compatibility with older tools matters.--prune-backupsruns pruning immediately after backup; configure storage-level retention in Datacenter > Storage for continuous pruning.- Live restore (
--live-restore) is only available with Proxmox Backup Server (PBS) as the storage target.
Cluster Setup
Create a Proxmox VE cluster, join nodes, verify quorum, and remove nodes using pvecm.
# --- On the first node: create the cluster ---
# Create a new cluster (name cannot be changed later)
pvecm create my-cluster
# Verify the cluster was created and check quorum
pvecm status
# List current members
pvecm nodes
# --- On each additional node: join the cluster ---
# Join by specifying an IP address of any existing cluster member
pvecm add 10.0.0.1
# If using a dedicated cluster network on a separate interface:
pvecm add 10.0.0.1 --link0 10.10.0.2
# After joining, verify from any node
pvecm status
pvecm nodes
# --- Removing a node ---
# Ensure the node to be removed is powered off or out of the cluster.
# Run from a remaining cluster node:
pvecm delnode oldnode
# If quorum is lost during removal, temporarily lower the expected votes:
pvecm expected 1
pvecm delnode oldnodeNotes
- The cluster name follows the same naming rules as node names and cannot be changed after creation.
- All nodes must have synchronized time (NTP/Chrony) before forming a cluster; drift causes split-brain.
- Corosync requires UDP ports 5405–5412 to be open between all nodes.
- Recommended maximum latency between nodes is under 5 ms; high latency causes quorum instability.
- After
pvecm add, the new node inherits the cluster configuration from the existing node automatically.
Container Lifecycle
Create, start, configure, snapshot, and restore LXC containers using pct and pveam.
# --- Fetch a container template ---
# Update the template list from online repositories
pveam update
# List available templates (filter by section)
pveam available --section system
# Download a template to local storage
pveam download local debian-12-standard_12.7-1_amd64.tar.zst
# Confirm the template is available locally
pveam list local
# --- Create and start a container ---
# Create container CTID 100 using the downloaded template
# rootfs on local-lvm with 8 GB, 512 MB RAM, bridged network
pct create 100 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
--rootfs local-lvm:8 \
--memory 512 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--hostname mycontainer \
--password secretpassword \
--unprivileged 1
# Start the container
pct start 100
# Open a shell inside the container
pct enter 100
# --- Resource configuration ---
# Set CPU and memory limits; enable auto-start at boot
pct set 100 --cores 2 --cpulimit 0.5 --memory 1024 --onboot 1
# Add a bind-mount from the host
pct set 100 --mp0 /mnt/bindmounts/shared,mp=/shared
# --- Snapshots ---
# Create a snapshot before changes
pct snapshot 100 snap1 --description "Before updates"
# List all snapshots
pct listsnapshot 100
# Roll back to a snapshot (and start the container afterward)
pct rollback 100 snap1 --start 1
# Delete a snapshot
pct delsnapshot 100 snap1
# --- Stop and remove ---
# Graceful stop
pct stop 100
# Destroy the container (remove disk and config)
pct destroy 100Notes
- CTID must be unique across the cluster (range 100–999999999).
- Snapshots require storage that supports them (e.g., ZFS, LVM-thin); classic dir storage does not.
- Use
--unprivileged 1for better isolation; privileged containers run as root on the host and should be avoided unless necessary. pveam downloadstores templates under<storage>:vztmpl/; reference the full path when callingpct create.
samples
| Name | Description | Path |
|---|---|---|
| VM Lifecycle | Create, start, stop, clone, convert to template, and migrate QEMU/KVM VMs using qm. | vm-lifecycle.md |
| Container Lifecycle | Create, start, configure, snapshot, and restore LXC containers using pct and pveam. | container-lifecycle.md |
| Cluster Setup | Create a Proxmox VE cluster, join nodes, verify quorum, and remove nodes using pvecm. | cluster-setup.md |
| Backup and Restore | Back up VMs and containers with vzdump, restore with qmrestore/pct restore, and schedule recurring jobs. | backup-restore.md |
| API Automation | Automate Proxmox VE operations via the REST API (curl + API token) and the pvesh CLI wrapper. | api-automation.md |