Come Ampliare un pool zfs su Proxmox

Migrazione ZFS: da 1×3 TB singolo a RAIDZ1 4×3 TB (con backup intermedio)

Guida step-by-step per passare da una pool ZFS su un solo disco a una pool RAIDZ1 (4×3 TB ≈ 9 TB utili) senza perdita di dati, usando un backup ZFS→ZFS su un disco esterno da 1 TB.

Privacy & Placeholder: in questa guida i dischi sono indicati come DISK1..DISK4 (i 4×3 TB) e BACKUPDISK (il disco da 1 TB). Sostituiscili con i tuoi path reali, preferibilmente by-id (es. /dev/disk/by-id/...).

1) Preparazione

Riduci il mirror a singolo disco (se eri in mirror) e pulisci il disco rimosso:

zpool detach TRE_TB DISK1
zpool status TRE_TB
wipefs -a /dev/DISK1   # oppure: dd if=/dev/zero of=/dev/DISK1 bs=1M status=progress

2) Crea la pool di backup (disco 1 TB)

# Inizializza il disco di backup (consigliati path by-id)
zpool create -f -o ashift=12 -O compression=zstd -O atime=off BACKUP_TRE /dev/BACKUPDISK

# Snapshot ricorsivo della pool sorgente
SNAP=bk_$(date +%Y%m%d-%H%M)
zfs snapshot -r TRE_TB@"$SNAP"

# Copia completa ZFS→ZFS (send/receive)
zfs send -R TRE_TB@"$SNAP" | zfs receive -F BACKUP_TRE/TRE_TB

# Verifica
zfs list -r BACKUP_TRE/TRE_TB

3) Smonta la vecchia pool e pulisci i 4 dischi da 3 TB

# Chiudi mount e processi
zfs unmount -a
umount -l /TRE_TB
zpool export -f TRE_TB

# Cancella GPT/firme su DISK1..DISK4 (es. sda sdb sdc sdd)
for d in DISK1 DISK2 DISK3 DISK4; do
  sgdisk --zap-all /dev/$d
  wipefs -a /dev/$d
done
# Se un disco resta "busy", usa partprobe o riavvia e ripeti il wipefs su quel disco

4) Crea la nuova pool RAIDZ1 (4×3 TB)

# Usa i path by-id dei 4 dischi
zpool create -f -o ashift=12 -O compression=zstd -O atime=off TRE_TB \
  raidz1 \
  /dev/DISK1 /dev/DISK2 /dev/DISK3 /dev/DISK4

zpool status TRE_TB
zfs list TRE_TB   # ~9 TB liberi attesi

5) Ripristina i dati dal backup

# Trova lo snapshot disponibile sul backup
zfs list -t snapshot -o name,creation -r BACKUP_TRE/TRE_TB

# Esempio: BACKUP_TRE/TRE_TB@bk_YYYYMMDD-HHMM
zfs send -R BACKUP_TRE/TRE_TB@bk_YYYYMMDD-HHMM | zfs receive -F TRE_TB

# Verifica dataset e file
zfs list -r TRE_TB
ls -lah /TRE_TB/immich | head

6) Ottimizzazioni & manutenzione

# Autoespansione (utile se in futuro sostituisci i dischi con taglia maggiore)
zpool set autoexpand=on TRE_TB

# Per dataset con media (foto/video): recordsize più ampia
zfs set recordsize=1M TRE_TB/immich

# Crea uno snapshot di riferimento post-restore
zfs snapshot -r TRE_TB@post-restore

# Backup incrementale (solo differenze, la prossima volta)
NEWSNAP=bk_$(date +%Y%m%d-%H%M)
zfs snapshot -r TRE_TB@"$NEWSNAP"
zfs send -R -i TRE_TB@post-restore TRE_TB@"$NEWSNAP" | zfs receive -F BACKUP_TRE/TRE_TB

# Scrub consigliato (es. mensile)
zpool scrub TRE_TB

Note

  • By-id: preferisci sempre /dev/disk/by-id/... per stabilità ai reboot.
  • Ridondanza: RAIDZ1 tollera 1 guasto disco. Per 2 dischi di tolleranza, valuta RAIDZ2 (spazio utile ≈ 6 TB su 4×3 TB).
  • Backup: conserva il disco BACKUP_TRE staccato quando non serve. Fai incrementali periodici.
Torna in alto