▤ Homelab

Storage per le macchine virtuali: LVM-thin, ZFS, qcow2 e raw

Come scegliere lo storage dei dischi virtuali: LVM-thin, ZFS, directory con qcow2 o raw, thin provisioning, snapshot, cache, discard e prestazioni reali.

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:

  1. monitorare la percentuale di occupazione dei pool thin, compresi i metadati, con allerte ben prima del limite;
  2. 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.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica, unisce il rigore dell'analisi tecnica all'attenzione per le persone che usano la tecnologia.

Leggi anche