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.