L'hypervisor open-source che fa girare tutto il tuo datacenter — VM con KVM, container con LXC, cluster a tre nodi con HA, storage ZFS e Ceph, backup incrementali con dedup — su un mini-PC sotto la scrivania o su 20 server in rack. Gratis. Su Debian. Senza Broadcom.
"VMware ci ha appena alzato il listino di 10x dopo l'acquisizione Broadcom, dobbiamo migrare 200 VM entro 6 mesi." — ogni CIO del 2024-2025, prima di scoprire Proxmox.
Un hypervisor type-1 open-source che combina KVM (VM) e LXC (container) con un pannello web, su Debian.
Proxmox Virtual Environment (abbreviato PVE o "Proxmox") è una distribuzione Linux basata su Debian, sviluppata da Proxmox Server Solutions GmbH (Vienna), che integra KVM per le macchine virtuali full e LXC per i container Linux, sotto un'unica web UI (porta 8006) e una CLI coerente.
È un hypervisor di tipo 1 (bare-metal): si installa direttamente sul ferro come sistema operativo dell'host, non gira sopra Windows o un altro OS. Open source (AGPLv3), gratuito da scaricare e usare. Subscription commerciali esistono ma sono opzionali per accedere al repository "enterprise" testato meglio.
Virtualizzazione hardware-assistita per VM Linux/Windows/BSD/macOS. Performance vicine al bare-metal con Intel VT-x / AMD-V.
Container Linux full-OS, alternativa leggera alle VM. Più densi, boot in 1 secondo, condividono il kernel dell'host.
Fino a ~32 nodi sotto un solo pannello. Corosync per messaging, pmxcfs (filesystem distribuito) per la configurazione condivisa.
Failover automatico di VM/CT su altri nodi quando uno cade. Richiede 3+ nodi, watchdog, storage condiviso o replicato.
ZFS, LVM-thin, Ceph (RBD + CephFS), NFS, CIFS, iSCSI, BTRFS, GlusterFS. Tutto astratto dietro l'API "storage".
Backup nativo full con vzdump. Per backup incrementali + deduplicazione + retention serve PBS (gratis, prodotto separato).
Firewall a 3 livelli (cluster / nodo / VM) basato su nftables, configurabile da web UI.
Software-Defined Networking: zones (Simple/VLAN/QinQ/VXLAN/EVPN), VNets, IPAM. Stable da PVE 7.
PAM (utenti Linux), realm Proxmox VE, LDAP, Active Directory, OpenID Connect (SSO). 2FA TOTP/WebAuthn.
Se VMware vSphere è il "Mercedes" della virtualizzazione (raffinato, costoso, ti spiega con condiscendenza che hai bisogno di una Standard Plus), Proxmox è il Toyota Hilux: meno chic, ma porta tre quintali in salita, funziona a -30, lo ripari con quello che hai e non costa più di una macchina al mese. Per il 90% dei carichi del mondo reale, è quello che vuoi.
Lo scenario di mercato 2024-2026 ha cambiato tutto. Vediamo le alternative.
Nel novembre 2023 Broadcom completa l'acquisizione di VMware. Nei mesi successivi: fine del prodotto Free ESXi, listino subscription ridisegnato (con aumenti riportati fino a 10x per molti clienti SMB), eliminazione delle SKU più piccole, partner program ridotto. Conseguenza: esodo di massa verso alternative. Proxmox VE ne è uscito come principale beneficiario.
qm importovf, plus tooling communityQuando VMware era "lo standard" e costava cifre umane, Proxmox era "quello che usano gli homelabber e qualche PMI". Dopo Broadcom, è diventato "quello che usano gli homelabber, le PMI, le università, gli ISP, le PA, e quei team enterprise che hanno smesso di sopportare le quote vSphere". Il software non è cambiato — il mercato sì.
Cosa c'è sotto il cofano: demoni, filesystem distribuito, web UI, API REST.
Un nodo Proxmox è una Debian standard (PVE 8.x = Debian 12 bookworm; PVE 9.x = Debian 13 trixie) con un kernel ottimizzato (Ubuntu kernel, ZFS in-tree) e una serie di demoni Proxmox-specifici sopra.
| Servizio | Cosa fa | Porta |
|---|---|---|
pveproxy | Web server HTTPS (front-end), proxy API REST | 8006 |
pvedaemon | API REST locale (root), backend per le azioni privilegiate | localhost |
pve-cluster | Replica configurazione tra nodi del cluster (pmxcfs) | — |
corosync | Cluster messaging engine (quorum, membership) | 5405 udp |
pvestatd | Polling stato VM/CT/storage, popola la UI | — |
pveha-lrm | HA local resource manager (per-nodo) | — |
pveha-crm | HA cluster resource manager (elegge il master) | — |
spiceproxy | Proxy SPICE (console remota performante) | 3128 |
qmeventd | Notifica eventi delle VM QEMU | — |
pmxcfs (Proxmox Cluster File System) è un FUSE filesystem montato su /etc/pve/ che replica tutta la configurazione del cluster su tutti i nodi, in tempo reale, tramite Corosync. Se scrivi un file su /etc/pve/qemu-server/100.conf da un nodo, in millisecondi tutti gli altri lo vedono. Backend: una SQLite locale per nodo + il bus Corosync per la sincronizzazione.
/etc/pve/ diventa read-only. Se perdi il quorum (es. troppi nodi giù in un cluster), pmxcfs blocca le scritture per evitare split-brain. Le VM continuano a girare, ma non puoi creare/modificare nulla. È per design e ti salva il sedere.
La web UI (Ext JS, lo so, ha 12 anni ma funziona) gira su https://<node>:8006. Sotto, è tutto API REST sotto /api2/json/. La UI è un client API come gli altri — tutto quello che fai cliccando lo puoi fare con pvesh da CLI o con qualunque HTTP client.
# Versione del cluster
$ pvesh get /version
# Lista VM di un nodo
$ pvesh get /nodes/pve1/qemu
# Creazione VM via API
$ pvesh create /nodes/pve1/qemu \
--vmid 200 --memory 4096 --cores 2 --net0 virtio,bridge=vmbr0
# Via curl puro (con ticket)
$ curl -k -d "username=root@pam&password=..." \
https://pve1:8006/api2/json/access/ticket
Macchine virtuali full, kernel proprio, qualunque OS. qm è il tuo comando.
Una VM in PVE è un processo kvm (== qemu-system-x86_64 con accelerazione KVM) avviato da pvedaemon in base al file /etc/pve/qemu-server/<vmid>.conf. Ogni VM ha un vmid intero univoco nel cluster (es. 100, 101, ...).
name: debian-web
memory: 4096
cores: 2
sockets: 1
cpu: host # max perf, no cross-CPU migration
machine: q35
bios: ovmf # UEFI; alt: seabios
scsihw: virtio-scsi-single # virtio paravirt SCSI
scsi0: local-zfs:vm-100-disk-0,size=32G,iothread=1
efidisk0: local-zfs:vm-100-disk-1,efitype=4m,size=1M
net0: virtio=BC:24:11:AA:BB:CC,bridge=vmbr0,tag=10
ide2: local:iso/debian-13.0.0-amd64-netinst.iso,media=cdrom
boot: order=scsi0;ide2;net0
ostype: l26 # Linux 2.6+/3.x/4.x/5.x/6.x kernel
agent: 1 # attiva qemu-guest-agent
balloon: 0 # 0 = disattiva ballooning
| Opzione | Scelta sana | Note |
|---|---|---|
| CPU type | host per perf, x86-64-v2-AES per migrate | host espone tutte le feature CPU host, ma blocca live-migration verso CPU diverse |
| Machine type | q35 | Q35 supporta PCIe nativamente. i440fx è legacy ma compatibile con tutto |
| BIOS | ovmf (UEFI) | Necessario per Secure Boot, GPU passthrough, Win11. Richiede efidisk0 |
| SCSI controller | virtio-scsi-single | Paravirt, supporta TRIM/discard, performance + flessibilità |
| Disk interface | scsi (+ virtio-scsi-single) | Alt: virtio (legacy), sata, ide. Mai ide in prod. |
| iothread=1 | Sì (con virtio-scsi-single) | Thread I/O dedicato per disco, riduce contesa |
| NIC | virtio | Paravirt, ~10 Gbit interno trivialmente. Alt: e1000e per Win senza driver |
| Ballooning | Off per DB, on per workload generici | Riallocazione dinamica RAM. Inutile/dannoso per DB |
| QEMU agent | Sì, installa nel guest | Permette freeze-fs durante backup, IP discovery, shutdown pulito |
Esponi un device PCI (GPU, NIC, controller) direttamente a una VM. Bypass dell'hypervisor: la VM ne ha l'accesso esclusivo, performance native, niente sharing.
Requisiti: IOMMU abilitato in BIOS (Intel VT-d / AMD-Vi), kernel boot con intel_iommu=on o amd_iommu=on, driver vfio-pci agganciato al device prima che lo prenda il driver normale del kernel.
# 1. Abilita IOMMU nel boot
$ echo "intel_iommu=on iommu=pt" >> /etc/kernel/cmdline # systemd-boot
$ proxmox-boot-tool refresh
# 2. Identifica device + vendor ID
$ lspci -nn | grep VGA
01:00.0 VGA compatible controller [0300]: NVIDIA ... [10de:1b06]
# 3. Vincola al driver vfio-pci
$ echo "options vfio-pci ids=10de:1b06" > /etc/modprobe.d/vfio.conf
$ update-initramfs -u
$ reboot
# 4. Aggiungi alla VM
$ qm set 100 -hostpci0 01:00,pcie=1,x-vga=1
PVE supporta nativamente le cloud images (Debian/Ubuntu/Rocky/...) con cloud-init: aggiungi un disco cloudinit, configuri user/password/SSH-key/network dalla UI o CLI, all'avvio la VM si auto-configura. Pattern standard per provisioning veloce.
# Scarica cloud image Debian
$ wget https://cloud.debian.org/images/cloud/trixie/latest/debian-13-genericcloud-amd64.qcow2
# Crea VM e importa disco
$ qm create 9000 --memory 2048 --net0 virtio,bridge=vmbr0 \
--scsihw virtio-scsi-single --serial0 socket
$ qm importdisk 9000 debian-13-genericcloud-amd64.qcow2 local-zfs
$ qm set 9000 --scsi0 local-zfs:vm-9000-disk-0
$ qm set 9000 --ide2 local-zfs:cloudinit
$ qm set 9000 --boot c --bootdisk scsi0
$ qm set 9000 --ciuser selif --sshkey ~/.ssh/id_ed25519.pub
$ qm set 9000 --ipconfig0 ip=dhcp
# Marcalo come template e clona
$ qm template 9000
$ qm clone 9000 100 --name web1 --full
$ qm start 100
Più leggeri delle VM, boot in 1 secondo, condividono il kernel host. pct è il comando.
Sia LXC che Docker usano i namespace + cgroups del kernel. La differenza filosofica:
Per ospitare un'app monoprocesso isolata → Docker. Per ospitare "un Debian con qualche cosa dentro" con boot rapido e gestione classica (systemd, ssh, apt) → LXC.
arch: amd64
hostname: ct-web
memory: 1024
cores: 2
ostype: debian
rootfs: local-zfs:subvol-200-disk-0,size=8G
net0: name=eth0,bridge=vmbr0,ip=dhcp,hwaddr=BC:24:11:AA:BB:CC
unprivileged: 1 # UID/GID mapping = sicurezza
features: nesting=1 # opt-in: Docker dentro l'LXC
onboot: 1
L'opzione cruciale per la sicurezza:
PVE include una libreria di template OS scaricabili via pveam (PVE Appliance Manager): Debian, Ubuntu, Alpine, Rocky, Arch, Devuan, e altri. Ogni template è un .tar.zst con un root filesystem minimale.
# Aggiorna l'indice dei template disponibili
$ pveam update
# Cerca
$ pveam available --section system | grep debian
# Scarica
$ pveam download local debian-13-standard_13.0-1_amd64.tar.zst
# Crea CT da template
$ pct create 200 \
local:vztmpl/debian-13-standard_13.0-1_amd64.tar.zst \
--hostname ct-web --memory 1024 --cores 2 \
--rootfs local-zfs:8 --net0 name=eth0,bridge=vmbr0,ip=dhcp \
--unprivileged 1
$ pct start 200
$ pct enter 200 # shell dentro il container
nesting=1, keyctl=1, ZFS storage driver compatibile o overlay2 con caveats). Il pattern "LXC contenente Docker" è comune in homelab per isolare stack Docker senza dedicare una VM full, ma sappi che aggiungi un layer di astrazione e qualche edge case (cgroup v2, fuse-overlayfs, ...).
La parte più complessa di Proxmox — ma anche la più potente. Locale, condiviso, distribuito.
In PVE uno storage è definito da:
Uno storage definito una sola volta nel cluster è visibile e usabile da tutti i nodi (se è shared) o solo dal nodo locale (se è local).
| Tipo | Shared? | Snapshot | Thin | Note |
|---|---|---|---|---|
dir | no | solo qcow2 | solo qcow2 | Directory POSIX. Semplice, lento per molte VM |
lvm | no* | no | no | Volume LVM "fat". Veloce, no snapshot. |
lvmthin | no | sì | sì | Default per il setup base. Veloce, snapshot nativi |
zfspool | no | sì | sì | ZFS rocks. Compressione, dedup, send/recv per replica |
btrfs | no | sì | sì | Sperimentale-ish in PVE, alcuni edge case |
nfs | sì | solo qcow2 | solo qcow2 | NFSv3/v4. Veloce solo se backend è veloce |
cifs | sì | solo qcow2 | solo qcow2 | SMB. Per shares Windows / NAS |
iscsi | sì (con LVM sopra) | no (raw) | no | Block storage di rete. Spesso con LVM cluster sopra |
rbd (Ceph) | sì | sì | sì | RADOS Block Device. Built-in dal PVE |
cephfs | sì | solo qcow2 | solo qcow2 | Ceph filesystem POSIX. Per ISO, backup, snippet |
pbs | (remoto) | — | — | Solo backup. Server PBS remoto. |
glusterfs | sì | solo qcow2 | solo qcow2 | Deprecato upstream — evita per nuove install |
Disk VM (qcow2/raw/zvol)
Rootfs container LXC
ISO per installazione VM
Template LXC
Archivi vzdump
Hook script, cloud-init custom
Su un nodo single-server o un cluster piccolo, ZFS è la scelta di default per molti: snapshot atomici, compressione trasparente (lz4 di default, ottimo trade-off CPU/spazio), checksumming end-to-end, zfs send/receive per replica incrementale tra nodi, RAID software performante (RAIDZ, mirror).
Vedi anche la guida ZFS dedicata — tutti i caveat (RAM, RAIDZ vs mirror, ZIL/SLOG, ARC tuning) si applicano qui pari pari.
Da PVE 5+ Ceph è integrato nella web UI. Trasformi i dischi locali dei tuoi nodi in uno storage shared distribuito con replica configurabile (default 3 copie). Vantaggio enorme: niente shared storage esterno (SAN), HA che funziona davvero, scaling orizzontale aggiungendo nodi.
Requisiti: 3 nodi minimo (per quorum), rete dedicata 10 GbE+ per il cluster storage (jumbo frames raccomandate), SSD/NVMe per gli OSD in prod. Su HDD funziona ma le latenze diventano serie.
# 1. Crea il pool ZFS (3-way mirror su 3 dischi)
$ zpool create -o ashift=12 rpool-data mirror /dev/sda /dev/sdb /dev/sdc
# 2. Aggiungi come storage PVE
$ pvesm add zfspool local-zfs-fast \
--pool rpool-data \
--content images,rootdir \
--sparse 1
# Equivalente in /etc/pve/storage.cfg
zfspool: local-zfs-fast
pool rpool-data
content images,rootdir
sparse 1
Linux bridges di default, bonds per ridondanza, VLAN per segmentazione, SDN quando le cose si fanno serie.
Su un nodo PVE fresco trovi una sola interfaccia bridged: vmbr0, un Linux bridge che corrisponde all'interfaccia fisica primaria (eno1 o enp1s0). Ogni VM/CT con net0: ...,bridge=vmbr0 ottiene una tap interface agganciata a quel bridge — di fatto, è come uno switch L2 virtuale.
vmbr0 — rete management/admin (web UI 8006, SSH)vmbr1 — rete VM/workload (con VLAN tagging)vmbr2 o interface diretta — rete Corosync (dedicata, basso latency, ridondata)vmbr3 o interface diretta — rete storage Ceph/iSCSI (10G+, jumbo MTU 9000)Le ultime due idealmente separate fisicamente dalla management/VM, su NIC dedicate e switch dedicati.
Un singolo vmbr0 può essere "VLAN-aware": permette a ogni VM di dichiarare un VLAN tag nel suo conf (es. net0: virtio,bridge=vmbr0,tag=10) senza dover creare un bridge per VLAN. Più pulito.
auto bond0
iface bond0 inet manual
bond-slaves enp1s0f0 enp1s0f1
bond-miimon 100
bond-mode 802.3ad
bond-xmit-hash-policy layer2+3
auto vmbr0
iface vmbr0 inet static
address 10.0.0.10/24
gateway 10.0.0.1
bridge-ports bond0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
Combinano 2+ NIC fisiche in una sola logica per throughput e fault tolerance. Modi più usati:
active-backup — una attiva, l'altra di scorta. Funziona con qualunque switch. Sicurezza, no throughput802.3ad (LACP) — aggregazione attiva, ~doppia bandwidth, richiede switch con LACP configuratobalance-rr — round-robin, throughput max ma fuori sequenza (sconsigliato fuori da scenari controllati)Da PVE 7 stable. Astrae la rete fisica in zones e VNets, configurabili dalla web UI in modo centralizzato. Pensato per multi-tenancy o setup più grandi dove configurare ogni nodo a mano in /etc/network/interfaces è insostenibile.
| Zone Type | Per cosa |
|---|---|
Simple | Rete privata isolata locale al nodo (testing) |
VLAN | Tagging 802.1Q su bridge VLAN-aware. Tipico in datacenter |
QinQ | VLAN-in-VLAN (802.1ad), per ISP/cloud provider |
VXLAN | Overlay L2 su L3, scale orizzontale, nessun limite 4094 VLAN |
EVPN | VXLAN + BGP EVPN. Cloud-scale, multi-tenant routing |
PVE include un firewall a 3 livelli basato su nftables (in modalità classica era iptables, ora nftables), configurabili dalla UI o direttamente in /etc/pve/firewall/:
Va abilitato esplicitamente (default off in PVE 8): impostazione cluster firewall on, poi "input policy: drop" dopo aver scritto almeno una regola di accept per SSH/management. Misura due volte, taglia una volta — lockout via firewall è un classico.
Tre nodi minimum. Corosync per il quorum. HA Manager per il failover automatico.
Tecnicamente un "cluster" inizia da 2 nodi, ma 2 nodi è pericoloso: se la rete tra loro cade, ognuno crede di essere "l'unico vivo" e procede a montare gli storage / startare le VM → split-brain (corruzione potenziale di dati).
Per il quorum sano serve un numero dispari di "voti", quindi:
# Sul primo nodo: crea il cluster
pve1$ pvecm create mycluster
# Sul secondo nodo: join
pve2$ pvecm add 10.0.0.10 # IP del primo nodo
# Sul terzo nodo: join
pve3$ pvecm add 10.0.0.10
# Verifica
$ pvecm status
Cluster information
-------------------
Name: mycluster
...
Quorate: Yes
Membership information
----------------------
Nodeid Votes Name
1 1 pve1 (local)
2 1 pve2
3 1 pve3
pvecm delnode <name> dagli altri PRIMA di reinstallare, altrimenti pulizia manuale di /etc/pve/nodes/<name>/.
Corosync è sensibile alla latenza: se la rete passa pacchetti late (jitter, packet loss, congestione), il cluster può perdere quorum spontaneamente, con conseguenze brutte per le VM HA. Best practice:
pvecm supporta multipli "ring" (link0, link1, ...) per failover automaticoCon il cluster su, attivi HA Manager per fare in modo che VM/CT marcate "HA" siano automaticamente riavviate su un altro nodo se quello su cui giravano cade.
Requisiti rigidi:
# Marca VM 100 come HA
$ ha-manager add vm:100 --state started --max_restart 3 --max_relocate 2
# Crea un gruppo HA (nodi preferiti)
$ ha-manager groupadd web-tier --nodes "pve1,pve2,pve3" --restricted 0
# Assegna risorsa al gruppo
$ ha-manager set vm:100 --group web-tier
# Stato HA
$ ha-manager status
quorum OK
master pve1 (active, ...)
lrm pve1 (active, ...)
lrm pve2 (active, ...)
lrm pve3 (active, ...)
service vm:100 (pve1, started)
Spostare una VM accesa tra nodi del cluster senza downtime. Trasferimento memoria iterativo via rete, finché le pagine dirty sono poche, freeze breve, switch atomico.
Per LXC, la migrazione è sempre "restart" (lo stato di processo non si può trasferire come la RAM QEMU). Downtime di alcuni secondi.
# Live migration di VM 100 da pve1 a pve2
$ qm migrate 100 pve2 --online
# Con storage migration (no shared storage)
$ qm migrate 100 pve2 --online --with-local-disks
# CT: sempre "restart"
$ pct migrate 200 pve2 --restart
Backup nativi locali con vzdump. Incrementali e deduplicati con Proxmox Backup Server.
vzdump è il backup tool di PVE: produce un singolo file archivio per VM/CT. Formati: .vma per VM (proprietario, ottimizzato), .tar per CT. Compressione opzionale (gzip, lzo, zstd). Lo schedule lo configuri dalla UI → Datacenter → Backup, con destination uno storage che supporta content type backup.
| Mode | Downtime | Quando |
|---|---|---|
snapshot | zero | Default, richiede storage con snapshot (ZFS, LVM-thin, qcow2). Snapshot del disco, backup dello snapshot, drop. La VM continua a girare |
suspend | ~secondi | VM messa in pausa, RAM scritta su disco, backup, resume. Più sicuro consistency-wise se non hai qemu-guest-agent |
stop | completo | VM spenta, backup pulito, restart. Per chi vuole bullet-proof |
vzdump --mode snapshot chiama fsfreeze sul filesystem del guest prima dello snapshot — il backup è consistente a livello FS (niente corruzione di transazioni DB in-flight). Senza agent è un crash-consistent backup (come fosse un blackout): di solito ok, ma DB possono richiedere recovery.
# Backup di una VM, snapshot, zstd, su storage "backup-nfs"
$ vzdump 100 --mode snapshot --compress zstd --storage backup-nfs
# Backup di tutte le VM/CT del nodo, eccetto 999
$ vzdump --all --exclude 999 --mode snapshot --compress zstd \
--storage backup-nfs --mailnotification failure --mailto [email protected]
# Restore
$ qmrestore /var/lib/vz/dump/vzdump-qemu-100-2026_05_01-03_00_00.vma.zst 105 \
--storage local-zfs
Proxmox Backup Server è un prodotto separato (gratis, Debian-based, web UI dedicata) che integra PVE come destination di backup. Cosa offre rispetto a vzdump+NFS:
# In /etc/pve/storage.cfg (o dalla UI: Datacenter → Storage → Add → PBS)
pbs: pbs-main
server pbs.example.local
datastore main
username backup@pbs
password <...>
fingerprint 12:34:56:... # SHA256 cert del server PBS
content backup
encryption-key /etc/pve/priv/pbs-encryption-key.json
Capire cosa stai usando, cosa paghi, e come usare il software senza pagare ma in modo corretto.
Proxmox è AGPLv3: l'uso completo del software è gratis, anche commerciale. Quello che paghi con una subscription è:
Tier indicativi (per CPU socket, per anno; consultare il sito per i prezzi correnti): Community ~€115, Basic ~€365, Standard ~€530, Premium ~€1060. Niente di gratuito che diventa a pagamento — solo il livello di "supporto e canale di update".
| Repo | Path | Quando |
|---|---|---|
pve-enterprise | /etc/apt/sources.list.d/pve-enterprise.list | Default. Richiede subscription valida (otherwise 401 in apt update). Più testato |
pve-no-subscription | Aggiungere a mano | Gratis, free for all. Release più fresche, "less tested" per design |
pvetest | Aggiungere a mano | Pacchetti di test, da non usare in produzione |
# 1. Disabilita il repo enterprise (no subscription valida)
$ sed -i 's|^deb|# deb|' /etc/apt/sources.list.d/pve-enterprise.list
# 2. Aggiungi il repo no-subscription
$ echo "deb http://download.proxmox.com/debian/pve $(lsb_release -cs) pve-no-subscription" \
> /etc/apt/sources.list.d/pve-no-subscription.list
# 3. (Stesso pattern per ceph se usi Ceph)
$ sed -i 's|^deb|# deb|' /etc/apt/sources.list.d/ceph.list 2>/dev/null
$ apt update && apt full-upgrade -y
Senza subscription, ogni login alla web UI mostra un alert: "You do not have a valid subscription for this server". Non blocca nulla, è un nag. Si può rimuovere modificando un file JS della UI (cerca pvemanagerlib.js), patch ben documentata da terze parti.
Riflessione sana: se Proxmox ti serve davvero per qualcosa di importante, prendere almeno la Community subscription (€115/anno-socket) toglie il popup, ti dà il canale enterprise più testato, e finanzia un progetto open che sta sostenendo migliaia di sysadmin in fuga da Broadcom. Per i tuoi 3 nodi homelab, comunque, no-subscription è perfettamente legittimo.
8.1, 8.2, 9.0). Major bump si allinea spesso a una nuova Debian (PVE 8 = Debian 12, PVE 9 = Debian 13). Upgrade major-to-major fattibile in-place ma serve leggere le release notes — sono dettagliate, riportano breaking changes.
Le cose con cui ti scotti se è la prima volta. Te le risparmi.
zpool status sempre, monitora SMART, fai alertcpu: host con CPU diverse tra i nodi. Soluzione: cpu: x86-64-v3 (o v2-AES per max compat)pvesm set X --content images,rootdir,backup,isonode_exporter + Prometheus + Grafana (oppure Zabbix), alert su disk usage, ZFS pool state, RAM/swap, Corosync ring, temperature CPU. Non è opzionale.
I comandi che userai davvero. Tutto sotto qm, pct, pvecm, pvesm, pvesh.
$ qm list # lista VM
$ qm status 100 # stato di una VM
$ qm start 100 # start
$ qm shutdown 100 --forceStop=1 # shutdown pulito (timeout fallback)
$ qm reboot 100
$ qm reset 100 # hard reset
$ qm stop 100 # hard power off
$ qm config 100 # mostra config
$ qm set 100 --memory 8192 # modifica al volo
$ qm set 100 --cores 4
$ qm resize 100 scsi0 +20G # estende il disco
$ qm clone 100 200 --name web2 --full
$ qm template 100 # marca come template
$ qm migrate 100 pve2 --online
$ qm destroy 100 # elimina (+ disco se purge)
$ qm monitor 100 # entra nella QEMU monitor
$ qm guest cmd 100 ping # comandi al qemu-guest-agent
$ pct list
$ pct status 200
$ pct start 200
$ pct stop 200
$ pct shutdown 200
$ pct enter 200 # shell dentro il CT
$ pct exec 200 -- apt update # un comando one-shot
$ pct config 200
$ pct set 200 --memory 2048
$ pct resize 200 rootfs +5G
$ pct clone 200 201 --hostname ct-new
$ pct template 200
$ pct migrate 200 pve2 --restart
$ pct destroy 200
$ pvecm status # stato cluster + quorum
$ pvecm nodes # lista nodi + voti
$ pvecm create mycluster
$ pvecm add 10.0.0.10 # join
$ pvecm delnode pve3 # remove (sui nodi rimasti)
$ pvecm qdevice setup <ip> # QDevice tiebreaker
$ pvecm expected 1 # forza quorum (DANGER, solo per recovery)
$ pvesm status # tutti gli storage + utilizzo
$ pvesm list local-zfs # dischi VM/CT su uno storage
$ pvesm add zfspool local-fast --pool tank/vm --content images,rootdir
$ pvesm set local --content images,iso,vztmpl,backup,snippets
$ pvesm remove local-old
$ pvesm alloc local-zfs 100 vm-100-disk-2 32G
$ ha-manager status
$ ha-manager add vm:100 --state started --max_restart 3
$ ha-manager groupadd grp1 --nodes "pve1,pve2,pve3" --restricted 0
$ ha-manager set vm:100 --group grp1
$ ha-manager migrate vm:100 pve2 # sposta gestita da HA
$ ha-manager remove vm:100 # de-listo da HA
$ vzdump 100 --mode snapshot --compress zstd --storage backup-nfs
$ vzdump --all --exclude 999 --mode snapshot --compress zstd \
--storage pbs-main --mailto [email protected] --mailnotification failure
$ qmrestore /path/vzdump-qemu-100-2026_05_01.vma.zst 105 --storage local-zfs
$ pct restore 205 /path/vzdump-lxc-200-2026_05_01.tar.zst --storage local-zfs
$ pveam update
$ pveam available --section system | grep debian
$ pveam download local debian-13-standard_13.0-1_amd64.tar.zst
$ pveam list local
$ pvesh get /version
$ pvesh get /nodes
$ pvesh get /nodes/pve1/qemu
$ pvesh get /cluster/resources --type vm
$ pvesh create /nodes/pve1/qemu --vmid 200 --memory 2048 --cores 1 \
--net0 virtio,bridge=vmbr0
$ pvesh set /cluster/firewall/options --enable 1
$ apt update && apt full-upgrade -y
$ pveupgrade # wrapper smart che valida
$ pveversion -v # versione dettagliata di tutti i pkg
$ proxmox-boot-tool refresh # refresh dei boot loader (systemd-boot/grub)