Guida alle tecnologie

Btrfs: pooling e mirroring dei dischi su Linux — guida completa

8 min read Linux Aggiornato 25 Sep 2025
Btrfs: pooling e mirroring dei dischi su Linux
Btrfs: pooling e mirroring dei dischi su Linux

Btrfs permette di unire più dischi in un unico storage pool e di attivare mirroring (RAID) senza complesse soluzioni hardware. Questa guida spiega come creare e gestire un filesystem Btrfs su dischi di capacità diverse, convertire profili RAID, gestire guasti, configurare il montaggio automatico e ottimizzare le opzioni di mount. Include checklist, esemempi pratici e una breve matrice dei rischi.

storage-pooling-mirroring

Immagine che mostra più dischi rigidi collegati come pool di archiviazione

Cos’è Btrfs?

Btrfs (abbreviazione di B-tree filesystem, a volte chiamato “Butter FS” o “Better FS”) è un filesystem avanzato per Linux che integra funzionalità che in altri casi richiederebbero software separati. Fra le funzionalità principali ci sono snapshot, pooling dei dispositivi, compressione transparante, e profili di dati e metadata configurabili (ad esempio RAID0, RAID1, RAID10 per dati e metadata).

Definizione rapida: un filesystem è il metodo con cui il sistema operativo organizza file e cartelle su uno o più dispositivi di memorizzazione.

Nota pratica: Btrfs è maturo per molti casi d’uso personali e di small office, ma alcune funzionalità avanzate restano considerate delicate in ambienti di produzione molto critici. Per singoli dischi senza pooling, ext4 rimane ancora una scelta semplice e consolidata.

Quando usare Btrfs e quando evitarlo

  • Usalo se vuoi: pooling di più dischi, snapshot integrati, compressione trasparente, facile espansione del filesystem.
  • Evitalo se: hai requisiti di massima stabilità per dati mission-critical senza backup, o se preferisci una soluzione hardware RAID con controller dedicato per performance/compatibilità garantite.

Importante: Btrfs semplifica molte operazioni ma non sostituisce backup regolari.

Raggruppare i dischi: esempio pratico

Scenario d’esempio usato in questa guida:

  • /dev/sdb: 1 TB
  • /dev/sdc: 1 TB
  • /dev/sdd: 500 GB
  • /dev/sde: 500 GB
  • /dev/sda: disco di sistema/boot (non toccato)

Totale nominale (capacità grezza): 3 TB. A seconda del profilo Btrfs scelto, lo spazio utilizzabile cambia.

Creare un filesystem Btrfs

Per creare un filesystem su un disco singolo:

sudo mkfs.btrfs /dev/sdb

Quindi montalo per iniziare a lavorarci:

sudo mount /dev/sdb /mnt

Se vuoi preparare gli altri dispositivi prima di aggiungerli, puoi formattarli singolarmente:

sudo mkfs.btrfs /dev/sdc
sudo mkfs.btrfs /dev/sdd
sudo mkfs.btrfs /dev/sde

Per aggiungere i dispositivi formattati al pool montato su /mnt:

sudo btrfs device add /dev/sdc /mnt
sudo btrfs device add /dev/sdd /mnt
sudo btrfs device add /dev/sde /mnt

Dopo l’aggiunta, se il primo disco conteneva dati, bilancia il filesystem per distribuire i dati fra i dispositivi:

sudo btrfs filesystem balance /mnt

Opzione alternativa: creare direttamente un filesystem che copra tutti i dispositivi in un unico comando. Se i dischi hanno dimensioni diverse userai il profilo “single”:

sudo mkfs.btrfs -d single /dev/sdb /dev/sdc /dev/sdd /dev/sde

Spiegazione dei flag principali:

  • -d indica il profilo dati (data profile)
  • -m indica il profilo metadata (metadata profile)
  • Valori comuni: single, raid0, raid1, raid10

Esempi di risultati utili nel nostro scenario:

  • -d single: dati stripe fra i dispositivi (simile a RAID0 ma adatto a dischi di taglie diverse)
  • -d raid0: stripe fra dispositivi di pari dimensione
  • -d raid1: copia dei dati su due dispositivi (mirroring); con 1 TB + 1 TB + 500 GB + 500 GB l’usable sarà 500 GB se tutti partecipano al mirroring
  • -d raid10: mix di striping e mirroring; utile con 4 dispositivi minimo

Convertire il profilo RAID di un filesystem esistente

Se il filesystem è già montato, o lo monti prima di convertire, puoi cambiare il profilo di dati/metadata con btrfs balance convert:

sudo mount /dev/sdb1 /mnt
sudo btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt

Note importanti:

  • Il comando tenta di riallocare i chunk secondo il nuovo profilo; la durata dipende dalla quantità di dati.
  • Alcune conversioni richiedono un numero minimo di dispositivi (ad esempio raid10 richiede almeno 4 dispositivi).
  • Puoi usare solo -dconvert se vuoi convertire soltanto i dati e non i metadata.

Cosa succede in caso di guasto di un disco

Per montare un filesystem degradato (con un dispositivo mancante) e rimuovere il disco failed:

sudo mount -o degraded /dev/sdb /mnt
sudo btrfs device delete missing /mnt
  • Se il tuo profilo non prevedeva mirror (raid1/raid10), i dati che stavano solo sul disco guasto sono persi.
  • Se avevi RAID 1 o RAID 10, i dati duplicati su altri dispositivi rimangono accessibili.
  • Dopo la rimozione, puoi sostituire il disco e aggiungerne uno nuovo con btrfs device add, seguito da btrfs balance per ricostruire la ridondanza.

Esempio di sostituzione:

# rimuovi il device fisico (hardware replacement), poi:
sudo btrfs device add /dev/sdf /mnt
sudo btrfs balance start /mnt

Rimuovere un dispositivo volontariamente

Per togliere un disco sano dal pool:

sudo btrfs device delete /dev/sdc /mnt

La rimozione può richiedere tempo perché Btrfs deve spostare i chunk di dati dal dispositivo rimosso agli altri dispositivi. Se non c’è spazio sufficiente su altri dispositivi, l’operazione fallirà.

Montaggio automatico tramite /etc/fstab

Per montare automaticamente il filesystem all’avvio, aggiungi una riga in /etc/fstab. Esempio per il nostro pool:

/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde 0 0

Consiglio: è preferibile usare UUID o LABEL nei casi in cui i nomi dei dispositivi (/dev/sdX) possano cambiare tra boot. Ottieni l’UUID con:

sudo blkid /dev/sdb

Esempio con UUID:

UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde 0 0

Opzioni di mount e ottimizzazioni

Per grandi pool di storage, queste opzioni sono consigliate in /etc/fstab:

compress-force=zlib,autodefrag,nospace_cache

Spiegazione rapida:

  • compress-force=zlib: forza la compressione zlib su tutti i file (migliora densità spazio ma può aumentare uso CPU)
  • autodefrag: utile quando molti file vengono scritti e riscritti in modo frammentato
  • nospace_cache: opzione storica, alcune versioni di btrfs usano space_cache al posto di nospace_cache

Per SSD, opzioni comunemente usate:

noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache
  • noatime: riduce scritture aggiornando l’access time
  • compress=lzo: compressione veloce, meno efficace di zlib ma più leggera per CPU
  • ssd, discard: abilitano ottimizzazioni per SSD (discard usa TRIM)

Esempio completo in /etc/fstab per SSD:

/dev/sdb /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde,noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache 0 0

Attenzione: alcune opzioni possono variare con la versione del kernel/btrfs-progs; prima di applicare in produzione, testare su un sistema non critico.

Mini-metodologia: passaggi raccomandati per creare un pool in produzione non critica

  1. Backup: esegui backup dei dati esistenti.
  2. Pianificazione: decidi il profilo dati (-d) e metadata (-m) in base al numero e alla dimensione dei dischi.
  3. Formattazione: mkfs.btrfs sui dispositivi (se necessario).
  4. Mount iniziale: monta il primo dispositivo su /mnt.
  5. Device add: aggiungi gli altri dischi con btrfs device add.
  6. Balance: esegui btrfs filesystem balance per distribuire i dati.
  7. Test di integrità: leggi/scrivi file di prova e verifica l’integrità.
  8. /etc/fstab: configura montaggio automatico usando UUID quando possibile.
  9. Monitoraggio: integra alert sullo stato dei dispositivi e spazio libero.

Cheat sheet comandi principali

  • mkfs.btrfs /dev/sdX — formatta il dispositivo per Btrfs
  • mount /dev/sdX /mnt — monta il filesystem
  • btrfs device add /dev/sdY /mnt — aggiunge un dispositivo al pool
  • btrfs device delete /dev/sdZ /mnt — rimuove un dispositivo dal pool
  • btrfs filesystem balance /mnt — ribilancia i chunk del filesystem
  • btrfs balance start -dconvert=raid1 -mconvert=raid1 /mnt — converte profili
  • btrfs device delete missing /mnt — elimina device mancanti dopo guasto

Quando Btrfs fallisce o non è la scelta giusta

Esempi di controcasistiche in cui Btrfs può non essere la scelta migliore:

  • Hai bisogno di un supporto commerciale dedicato con garanzie di resilienza estreme.
  • L’ambiente richiede interoperabilità con controller RAID hardware specifici che presentano funzionalità avanzate di cache e battery-backed write cache.
  • Gestisci grandi database con requisiti I/O e latency molto severi senza la possibilità di test approfonditi.

In questi casi, soluzioni alternative: mdadm (software RAID classico), LVM su RAID hardware, ZFS (offre features simili a Btrfs ma con differenze importanti di licensing e maturità in alcuni scenari).

Matrice dei rischi e mitigazioni

  • Rischio: perdita dati per assenza di mirror. Mitigazione: abilitare raid1/raid10 o avere backup regolari.
  • Rischio: fallimento durante btrfs balance. Mitigazione: monitorare spazio libero e avere snapshot/backup prima dell’operazione.
  • Rischio: nomi dispositivi variabili (/dev/sdX). Mitigazione: usare UUID o LABEL in /etc/fstab.
  • Rischio: opzioni di mount inappropriate per SSD/HDD. Mitigazione: testare le opzioni su macchine equivalenti prima del deploy.

Decisione guidata per scegliere il profilo dati

flowchart TD
  A[Quanti dispositivi hai?] -->|1| B[Usa ext4 o Btrfs single]
  A -->|2| C{Dischi stesse dimensioni?}
  C -->|Sì| D[raid0 o raid1]
  C -->|No| E[raid1 o single]
  A -->|3 o più| F{Serve ridondanza?}
  F -->|Sì| G[raid10 o raid1]
  F -->|No| H[raid0 o single]

Checklist per ruoli

Sysadmin:

  • Verificare compatibilità kernel e btrfs-progs
  • Avere procedure di rollback e backup
  • Monitorare SMART e log kernel

Utente domestico:

  • Fare backup regolari su NAS o cloud
  • Usare profili raid1 per sicurezza se non si vuole perdere dati
  • Testare ripristino da backup almeno una volta

Immagini e nomi file

btrfs_gparted

Screenshot che mostra partizionamento e creazione del filesystem Btrfs

btrfs_harddiskstack

Immagine di più dischi rigidi impilati pronti per il pooling

btrfs_fstab

Esempio visivo della configurazione fstab per il montaggio automatico

Compatibilità e migrazione

  • Verifica versione di btrfs-progs e del kernel; alcune funzionalità richiedono versioni recenti.
  • Quando si migra da ext4/LVM a Btrfs, considera la necessità di copiare dati e ricreare layout invece di una conversione in-place.
  • Se i dischi sono di taglie miste, preferisci profili “single” o raid1, evita raid0 puro se cerchi resilienza.

Domande frequenti rapide

  • Posso usare Btrfs come filesystem di root? Sì, ma verifica il supporto del tuo installer e del bootloader. Alcune distribuzioni offrono Btrfs come opzione durante l’installazione.
  • Btrfs sostituisce backup? No. Btrfs facilita snapshot e replicazione, ma non è una soluzione di backup completa.
  • Devo usare device=/dev/sdX in fstab? Meglio usare UUID per stabilità.

Riepilogo

Btrfs offre potenti strumenti per creare pool di storage, aggiungere o rimuovere dischi, convertire profili RAID e gestire guasti in modo relativamente semplice dal terminale. Prima di adottarlo in ambienti critici, pianifica backup, verifica versioni del software e testa le procedure di ripristino. Per uso domestico e piccoli uffici è una soluzione molto valida, soprattutto se si desidera flessibilità nel gestire dischi di diversa capacità.

Pensi che pooling e mirroring via software siano una buona strategia per il tuo ambiente? Condividi la tua esperienza.

Image Credit: William Hook

Autore
Redazione

Materiali simili

Installare e usare Podman su Debian 11
DevOps

Installare e usare Podman su Debian 11

Guida rapida a apt-pinning su Debian
Linux

Guida rapida a apt-pinning su Debian

Forzare FSR 4 con OptiScaler: guida completa
Guide.

Forzare FSR 4 con OptiScaler: guida completa

Dansguardian + Squid NTLM su Debian Etch
Rete

Dansguardian + Squid NTLM su Debian Etch

Riparare errore installazione SD su Android
Android

Riparare errore installazione SD su Android

Cartelle di rete con KNetAttach e remote:/
Linux

Cartelle di rete con KNetAttach e remote:/