Homelab Virtualizzazione Storage Resiliente ⏱️ 12 min lettura

Proxmox VE con ZFS Mirroring: Snapshot, Scrubbing e Backup su NAS

Guida ingegneristica per allestire un nodo Proxmox VE a tolleranza di guasto: storage ZFS mirror a due unità, prevenzione del bit-rot, snapshot atomici e replicazione su storage esterno.

💡 Perché ZFS è lo standard de facto: A differenza di ext4 o XFS su controller RAID convenzionali, ZFS (OpenZFS) calcola il checksum crittografico di ogni singolo blocco scritto su disco. Se uno dei due drive subisce un degrado magnetico o di celle flash (silent data corruption), ZFS rileva l'errore al volo e ricostruisce i dati corretti dal disco sano in tempo reale.

1. Creazione del Pool ZFS in Mirror (RAID1)

In un homelab su Mini PC o server torre, la configurazione ottimale per il sistema operativo e i dischi VM è il Mirroring a due dischi (2-way mirror). Offre il doppio delle IOPS in lettura rispetto a un disco singolo e tempi di ricostruzione (resilver) brevissimi.

Identifica prima i codici univoci dei dischi via terminale Proxmox:

ls -l /dev/disk/by-id/

Crea il pool ZFS specificando l'allineamento dei settori a 4K (ashift=12 per moderni SSD e HDD AF):

zpool create -f -o ashift=12 rpool-data mirror \
  /dev/disk/by-id/nvme-Samsung_SSD_980_1TB_S64BNF0R123456 \
  /dev/disk/by-id/nvme-Samsung_SSD_980_1TB_S64BNF0R654321

Abilita la compressione trasparente LZ4, che velocizza le letture/scritture riducendo lo spazio occupato:

zfs set compression=lz4 rpool-data
zfs set atime=off rpool-data

2. Ottimizzazione della RAM (ZFS ARC Tuning)

Per impostazione predefinita, ZFS assegna fino al 50% della memoria RAM host alla cache di lettura ARC (Adaptive Replacement Cache). Nei server homelab con 32 o 64 GB di RAM, questo può portare le VM a esaurire la memoria (OOM Killer).

Limita la cache ARC (ad esempio a 8 GB) creando il file /etc/modprobe.d/zfs.conf:

# Imposta limite ARC: 8589934592 byte = 8 GB
options zfs zfs_arc_max=8589934592
options zfs zfs_arc_min=2147483648

Aggiorna il ramdisk iniziale per applicare le modifiche al boot:

update-initramfs -u -k all

3. Integrità Dati: Scrubbing Automatico e SSD TRIM

Il comando scrub legge ogni blocco dati confrontandolo con il relativo checksum. Schedula un controllo bisettimanale tramite cron o systemd timer:

# Esegui scrub manuale per test
zpool scrub rpool-data

# Monitora lo stato di avanzamento
zpool status rpool-data

Se utilizzi dischi SSD o NVMe, abilita il TRIM automatico per prevenire il decadimento delle prestazioni di scrittura delle celle flash:

zpool set autotrim=on rpool-data

4. Backup Esterno su NAS (NFS / SMB)

Gli snapshot locali non proteggono da guasti alla scheda madre, picchi di tensione o furto dell'hardware. La regola del backup 3-2-1 impone l'esportazione su storage di rete esterno.

Passaggio 1: Aggiungere lo Storage su Proxmox VE

  1. Nell'interfaccia web di Proxmox, naviga su Datacenter → Storage → Add → NFS (o SMB).
  2. ID: nas-backup-storage
  3. Server: IP del tuo NAS (es. 192.168.1.50)
  4. Export: /share/ProxmoxBackup
  5. Content: Seleziona VZDump backup file.

Passaggio 2: Configurare il Job di Backup Pianificato

In Datacenter → Backup → Add:

  • Node: All (o il tuo nodo specifico)
  • Storage: nas-backup-storage
  • Selection Mode: All Guests
  • Schedule: 03:00 ogni notte
  • Compression: ZSTD (il miglior compromesso tra velocità elevatissima e compressione eccellente)
  • Retention Policy: Keep Last 7, Keep Daily 7, Keep Weekly 4.

❓ Domande Frequenti (FAQ Tecniche)

Perché usare ZFS Mirror invece del classico hardware RAID in Proxmox?

ZFS protegge nativamente dal bit-rot calcolando checksum crittografici su ogni blocco. In caso di rottura del server, puoi spostare i due dischi su qualsiasi altra scheda madre generica e importare il pool con zpool import in 5 secondi.

Qual è la differenza tra Snapshot ZFS e Backup VZDump?

Lo snapshot ZFS è istantaneo, locale e non consuma spazio finché i file non cambiano: serve per ripristini rapidi prima di un aggiornamento. Il backup VZDump su NAS invece copia tutti i dati su un hardware fisico distinto, indispensabile in caso di disastro totale.

Quanta RAM richiede ZFS su Proxmox VE?

ZFS richiede circa 2-4 GB di base per il kernel e l'hypervisor, più 1 GB di ARC per ogni Terabyte di pool dati. È fondamentale limitare zfs_arc_max per evitare che ZFS entri in conflitto con la RAM allocata alle macchine virtuali.