Ogni macchina virtuale ha bisogno di uno o più dischi, e il modo in cui l'hypervisor li conserva influenza prestazioni, spazio occupato, snapshot e backup. In Proxmox VE, ma i concetti valgono anche per altri sistemi basati su KVM, le scelte principali sono tre famiglie di storage e due formati di disco.
Due modi di conservare un disco virtuale
Come file
Il disco della VM è un file su un file system normale, ext4, XFS o una condivisione di rete. Sono possibili due formati:
- raw: un'immagine semplice, byte per byte, senza intestazioni; è il formato con meno elaborazione;
- qcow2: il formato nativo di QEMU, che supporta snapshot interni, allocazione dinamica e immagini di base condivise.
Come dispositivo a blocchi
Il disco è un volume logico: un volume LVM, un zvol di ZFS o un'immagine Ceph. L'hypervisor lo presenta alla VM senza un file system intermedio sull'host, e gli snapshot sono gestiti dallo storage stesso.
Le opzioni principali in un homelab
| Storage | Tipo | Snapshot | Thin provisioning | Note |
|---|---|---|---|---|
| LVM-thin | blocchi | sì | sì | predefinito in molte installazioni |
| LVM classico | blocchi | no, salvo configurazioni particolari | no | semplice, spazio preallocato |
| ZFS | blocchi (zvol) | sì | sì | checksum, compressione, replica |
| Directory | file | con qcow2 | con qcow2 o file sparsi | flessibile, prestazioni dipendenti dal file system |
| NFS o SMB | file | con qcow2 | sì | condiviso tra nodi, dipende dalla rete |
LVM-thin
È lo storage che l'installazione di Proxmox VE crea quando si sceglie ext4 o XFS per il disco di sistema. Offre snapshot e thin provisioning con buone prestazioni e pochi requisiti di memoria. Non verifica l'integrità dei dati e non comprime.
ZFS
Aggiunge checksum, compressione e replica verso un altro nodo, al prezzo di più RAM e di qualche attenzione alla configurazione. Per le VM si usano zvol, la cui dimensione di blocco, volblocksize, si fissa alla creazione: il valore predefinito va bene nella maggior parte dei casi.
Directory e qcow2
Utile per dischi esterni, condivisioni di rete o quando si vuole maneggiare i dischi come file da copiare. Il formato qcow2 porta snapshot e allocazione dinamica anche dove lo storage non li offre. Uno svantaggio: le catene di snapshot qcow2 lunghe rallentano le letture e rendono più delicate le operazioni di unione.
Thin provisioning: comodo, ma va sorvegliato
Con il thin provisioning un disco virtuale da 100 GB occupa solo lo spazio effettivamente scritto. Si possono quindi assegnare alle VM più gigabyte di quanti ne esistano fisicamente: si chiama overprovisioning.
Il rischio è evidente: se le VM crescono tutte insieme, lo storage si riempie. Con LVM-thin un pool pieno può mettere le macchine in pausa o, nei casi peggiori, corrompere i dati dei volumi. Due misure:
- monitorare la percentuale di occupazione dei pool thin, compresi i metadati, con allerte ben prima del limite;
- attivare il discard, così lo spazio liberato all'interno della VM viene restituito allo storage.
Per il discard serve abilitare l'opzione sul disco virtuale e, nella VM, eseguire periodicamente fstrim, cosa che molte distribuzioni fanno già con un timer settimanale. Senza questo passaggio, i file cancellati dentro la VM continuano a occupare spazio sull'host.
Impostazioni del disco che contano
- Controller: VirtIO SCSI con il driver adatto offre le migliori prestazioni e supporta discard; il dispositivo IDE emulato serve solo per sistemi molto vecchi.
- IO thread: dedica un thread di I/O al disco, utile con più dischi o carichi intensi.
- Cache: il valore predefinito none è sicuro e adatto alla maggior parte dei casi; le modalità writeback aumentano le prestazioni ma, senza protezione da mancanza di corrente, espongono a perdite di dati in caso di blackout.
- SSD emulation: segnala al sistema ospite che il disco è un SSD, così smette di applicare ottimizzazioni pensate per dischi meccanici.
Conversioni tra formati
Lo strumento qemu-img converte i dischi tra formati, per esempio da un'immagine VMDK di VMware a qcow2 o raw. Proxmox VE permette anche di spostare un disco da uno storage all'altro con la VM accesa, convertendone il formato durante la copia. È il modo più comodo per migrare da un pool vecchio a uno nuovo senza fermare i servizi.
Una regola pratica
Nel mio lavoro, per un homelab con un solo host, scelgo così: ZFS in mirror se la macchina ha RAM a sufficienza e due SSD, LVM-thin se le risorse sono limitate, directory o NFS per i dischi meno importanti e per i file di installazione. Lo storage condiviso via rete ha senso quando i nodi sono più di uno e la rete è veloce.
In sintesi
- I dischi virtuali possono essere file (raw, qcow2) o volumi a blocchi (LVM, zvol).
- LVM-thin è leggero e veloce; ZFS aggiunge integrità, compressione e replica.
- Il thin provisioning risparmia spazio ma richiede monitoraggio dell'occupazione.
- Discard e fstrim restituiscono allo storage lo spazio liberato nelle VM.
- VirtIO SCSI, IO thread e cache «none» sono impostazioni predefinite sensate.