Btrfs: pooling e mirroring dei dischi su Linux — guida completa
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.

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/sdbQuindi montalo per iniziare a lavorarci:
sudo mount /dev/sdb /mntSe 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/sdePer 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 /mntDopo l’aggiunta, se il primo disco conteneva dati, bilancia il filesystem per distribuire i dati fra i dispositivi:
sudo btrfs filesystem balance /mntOpzione 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/sdeSpiegazione 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 /mntNote 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 /mntRimuovere un dispositivo volontariamente
Per togliere un disco sano dal pool:
sudo btrfs device delete /dev/sdc /mntLa 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 0Consiglio: è 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/sdbEsempio con UUID:
UUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX /mnt btrfs device=/dev/sdb,device=/dev/sdc,device=/dev/sdd,device=/dev/sde 0 0Opzioni di mount e ottimizzazioni
Per grandi pool di storage, queste opzioni sono consigliate in /etc/fstab:
compress-force=zlib,autodefrag,nospace_cacheSpiegazione 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 0Attenzione: 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
- Backup: esegui backup dei dati esistenti.
- Pianificazione: decidi il profilo dati (-d) e metadata (-m) in base al numero e alla dimensione dei dischi.
- Formattazione: mkfs.btrfs sui dispositivi (se necessario).
- Mount iniziale: monta il primo dispositivo su /mnt.
- Device add: aggiungi gli altri dischi con btrfs device add.
- Balance: esegui btrfs filesystem balance per distribuire i dati.
- Test di integrità: leggi/scrivi file di prova e verifica l’integrità.
- /etc/fstab: configura montaggio automatico usando UUID quando possibile.
- 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
Screenshot che mostra partizionamento e creazione del filesystem Btrfs
Immagine di più dischi rigidi impilati pronti per il pooling
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