Btrfs è davvero il file system migliore per Linux?

Analizziamo il ruolo strategico dei file system in Linux, concentrandoci su Btrfs, una soluzione che assicura supporto per snapshot, compressione, sottovolumi e RAID nativo. Confrontiamo btrfs con ext4, XFS e ZFS, evidenziandone vantaggi e casi d'uso ideali.

La pubblicazione degli ultimi aggiornamenti di btrfs in vista dell’arrivo del kernel Linux 6.16 ci ha offerto lo spunto per accendere un faro su questo importante file system in ambito Linux.

Parlare di file system è fondamentale quando si affronta qualsiasi tema legato alla gestione dello storage, alle performance, alla sicurezza e all’affidabilità di un sistema operativo. La scelta del file system incide profondamente sul comportamento complessivo del sistema, influenzando tanto le attività quotidiane quanto la resilienza in caso di guasti.

File system: fondamento della gestione dei dati

Il file system è lo strato logico che organizza e struttura i dati su un supporto fisico (come hard disk, SSD, dispositivi esterni, schede di memoria, NAS,…). Ogni file system ha un suo modo specifico per allocare lo spazio su disco, gestire file e directory, scrivere e leggere dati, mantenere coerenza e integrità in caso di errori.

La scelta del file system determina come i dati vengono archiviati, letti, protetti e recuperati. Mentre in Windows la selezione è essenzialmente limitata a file system come NTFS, exFAT (per le unità rimovibili), FAT32 con all’orizzonte il “nuovo” ReFS (da poco, Windows 11 si installa su partizioni ReFS), il kernel Linux supporta decine di file system grazie a un’architettura modulare. Qualsiasi sviluppatore può quindi scrivere e integrare driver per un nuovo file system.

Ogni file system ha prestazioni differenti a seconda del carico di lavoro. Su Linux:

  • ext4 eccelle in operazioni sequenziali e accessi random a bassa latenza.
  • XFS è progettato per alte prestazioni in ambiente server.
  • Btrfs è flessibile, ma leggermente più pesante in scrittura.
  • ZFS garantisce alta affidabilità ma ha requisiti RAM elevati.

Attenzione a parlare di miglior file system su Linux

La scelta del miglior file system per Linux dipende fortemente dall’ambiente di utilizzo e dalle esigenze specifiche. Ognuno presenta vantaggi e limiti che lo rendono più o meno adatto a diversi scenari.

In generale, non esiste e non può esistere un unico “miglior filesystem Linux”: la scelta ottimale dipende dal tipo di utilizzo, dalle esigenze di gestione dei dati e dal livello di esperienza dell’utente.

ext4, ad esempio, è la scelta migliore per la maggior parte degli utenti desktop e laptop grazie a stabilità, semplicità e compatibilità universale. È il file system predefinito nella maggior parte delle distribuzioni Linux e offre un ottimo equilibrio tra prestazioni e affidabilità.

Btrfs, però, si distingue per le funzionalità avanzate come snapshot, compressione e gestione dinamica dei volumi. È ideale per chi necessita di backup frequenti, rollback rapidi o gestisce sistemi NAS e container. Tuttavia, richiede una maggiore competenza tecnica e non raggiunge sempre le performance di ext4.

XFS è raccomandato in ambito enterprise e server, dove la gestione di grandi quantità di dati e la scalabilità sono prioritarie. Offre prestazioni elevate, soprattutto con file di grandi dimensioni e operazioni di I/O parallelo, ma manca di alcune funzioni avanzate presenti in btrfs.

Il file system ZFS è utilizzato in contesti nei quali l’integrità dei dati e la gestione di grandi pool di storage sono fondamentali, ma richiede più risorse hardware e una configurazione più complessa. Spesso semplificata dai principali vendor di soluzioni di storage.

btrfs file system Linux

La storia e le caratteristiche di btrfs in breve

Btrfs (B-tree File System), pronunciato “butter-eff-ess” o “b-tree-eff-ess“, è un file system di nuova generazione progettato per affrontare le limitazioni dei file system tradizionali come ext4.

Nato nel 2007 da un’iniziativa di Chris Mason (all’epoca ingegnere Oracle), btrfs è oggi sponsorizzato da diverse grandi aziende, tra cui Meta e SUSE. La sua architettura copy-on-write (CoW), il supporto per snapshot, la compressione trasparente, la verifica dell’integrità dei dati e il supporto RAID nativo, lo rendono una delle soluzioni più avanzate e flessibili disponibili in ambiente Linux.

Architettura di base

A differenza di file system come ext4, Btrfs è basato su alberi B+ (B-trees) per memorizzare metadati e dati. Questa scelta lo rende estremamente efficiente per operazioni su grandi volumi di dati e consente di gestire in modo dinamico e scalabile la struttura del file system.

Il paradigma CoW è il fulcro dell’efficienza e della sicurezza di Btrfs. Quando un file è modificato, invece di sovrascrivere direttamente i dati, btrfs scrive la nuova versione in un’area libera e aggiorna i puntatori. Ciò consente l’utilizzo di snapshot istantanei e coerenti, maggiore tolleranza agli errori, recuperabilità più semplice di qualunque informazione.

Btrfs, inoltre, calcola un checksum sia per i metadati sia per i dati, salvandoli separatamente. Un meccanismo, questo, che permette di rilevare e correggere errori che potrebbero introdurre una corruzione silente dei dati, spesso indotta da dischi o moduli RAM difettosi.

Come provare btrfs con una distribuzione Linux

Il supporto per btrfs è garantito praticamente da tutte le distribuzioni Linux oggi disponibili. Nel caso di openSUSE, btrfs è il file system di default per la root (/) da anni; dalla versione 33, Fedora usa btrfs di default sulla root; Arch Linux mette a disposizione una routine di installazione flessibile che aiuta a configurare manualmente btrfs, secondo le esigenze dell’utente.

Snapshot e Rollback

Btrfs consente di creare snapshot istantanei, ovvero copie di volumi o sottovolumi che non duplicano i dati (grazie a CoW). Questi snapshot sono estremamente utili per gestire backup differenziali, il rollback del sistema dopo aggiornamenti falliti e la clonazione rapida di ambienti.

Supponete di voler installare e mettere alla prova un aggiornamento critico, ma volete essere sicuro di poter “tornare indietro” in caso di problemi. Il seguente comando permette di chiedere a btrfs di creare uno snapshot prima dell’aggiornamento:

sudo btrfs subvolume snapshot / /@snapshot-pre-upgrade

Dopo aver eseguito l’aggiornamento del sistema (ad esempio con sudo dnf upgrade oppure apt upgrade o pacman -Syu a seconda della distro), è possibile effettuare il rollback se qualcosa andasse storto:

sudo mount -o subvol=@snapshot-pre-upgrade /dev/sdX /mnt

Il risultato è che si ha a disposizione un backup puntuale del sistema senza duplicare tutto il contenuto: è possibile montarlo o ripristinarlo in pochi secondi.

Isolamento logico dei dati con i sottovolumi

Un file system evoluto come btrfs offre l’opportunità di creare snapshot, per esempio, solo del contenuto della directory /home. Così facendo si possono fare backup frequenti senza coinvolgere il resto del sistema. I comandi seguenti permettono di separare /home da /var in modo da generare snapshot completamente indipendenti:

sudo btrfs subvolume create /mnt/@home
sudo btrfs subvolume create /mnt/@var

# Montaggio indipendente in /etc/fstab
UUID=xxxx /home btrfs defaults,subvol=@home 0 0
UUID=xxxx /var btrfs defaults,subvol=@var 0 0

Compressione trasparente

Btrfs supporta la compressione dei dati on-the-fly con algoritmi come zlib, zstd e lzo. L’opzione zstd è spesso preferita per l’ottimo bilanciamento tra compressione e prestazioni.

Il comando seguente permette di montare una partizione btrfs con compressione zstd:

sudo mount -o compress=zstd /dev/sdX /mnt

Dopo aver copiato dei file di test, ad esempio, una bella mole di dati log (cp -r /var/log /mnt/) si può verificare lo spazio occupato, mettendo a confronto lo spazio fisico con quello logico:

sudo btrfs filesystem df /mnt

Snapshot automatici con Snapper

Snapper è uno strumento per la gestione di snapshot su file system btrfs, particolarmente utile per gestire più versioni dei file (versioning) e ripristinare lo stato dei file o dell’intero sistema in modo rapido ed efficiente. È molto usato per creare snapshot automatici, confrontare modifiche tra versioni e fare rollback in caso di problemi, ad esempio dopo un aggiornamento fallito.

Su openSUSE, Snapper è integrato con YaST per creare snapshot automatici ad ogni aggiornamento con zypper. Con Fedora, sebbene btrfs sia presente di default, Snapper va installato manualmente. Nel caso di Arch Linux, Snapper è comunque disponibile nel repository ufficiale.

Facendo l’esempio di openSUSE, per ottenere snapshot automatici ogni volta che si installa un pacchetto, basta digitare quanto segue:

sudo snapper create --description "Prima di installare nginx"
sudo zypper install nginx
sudo snapper list

Il comando permette di accedere alla lista di snapshot via via creati ed è eventualmente possibile servirsi di snapper diff per confrontare modifiche nei file tra due snapshot.

RAID software nativo

L’architettura di btrfs permette di replicare i dati e offrire protezione in caso di guasti. Ad esempio, se si avessero due unità disco e si volesse godere di ridondanza dei dati senza LVM o mdadm, è possibile servirsi di un comando come il seguente:

sudo mkfs.btrfs -m raid1 -d raid1 /dev/sdX /dev/sdY

In questo caso, si crea un file system Btrfs (formattazione di entrambi i dispositivi indicati) con una configurazione RAID1 sia per i metadati che per i dati. Lo spazio disponibile è pari alla capacità del disco più piccolo (se i due dischi hanno capacità diverse), poiché i dati sono duplicati.

Btrfs supporta RAID 0, 1, 10, 5 e 6 a livello di file system (non di blocco), il che consente maggiore flessibilità nella gestione dello storage. È possibile aggiungere o rimuovere dispositivi “a caldo”, senza smontare il volume. Il supporto per RAID 5/6 va tuttavia ancora considerato sperimentale, quindi da evitare, a causa di bug noti e instabilità nel processo di ripristino.

Deframmentazione online

In generale, un sistema tende a divenire più lento se i file memorizzati sono sottoposti a frequenti modifiche. Il comando seguente migliora le performance su dischi molto utilizzati, soprattutto per database o file grandi modificati frequentemente:

sudo btrfs filesystem defragment -r /home

Controllo integrità e autoriparazione

Con btrfs è possibile attivare uno scrub, processo che verifica l’integrità dei dati e dei metadati sul disco, confrontandoli con i checksum memorizzati. Grazie alle informazioni memorizzate, il file system può correggere gli errori recuperando i dati da altre copie. È spesso usato per individuare settori danneggiati e garantire l’affidabilità dei dati nel tempo. Il comando è asincrono: restituisce subito il prompt e il processo prosegue in background.

sudo btrfs scrub start /mnt

Avvalendosi del comando seguente è possibile controllare lo stato attuale dello scrub per il volume montato su /mnt. L’istruzione indica se lo scrub è ancora in corso o terminato, quanti errori ha trovato, quanti sono stati corretti e altre statistiche utili:

sudo btrfs scrub status /mnt

Considerazioni sulle prestazioni

Le prestazioni di btrfs sono buone ma variabili, in funzione del carico di lavoro. Il file system è eccellente per frequenti letture dei dati, ambienti desktop, container, server NAS, snapshot.

Nel caso di database con scritture random ad alta frequenza (ad es. PostgreSQL), file system come ext4 o XFS risultano più prevedibili e, quindi, maggiormente indicati.

Il comando btrfs balance è utile per ottimizzare la distribuzione interna dei dati, ma può essere costoso in termini di I/O, quindi va usato con criterio.

Btrfs offre performance generalmente inferiori a ext4 in alcuni scenari, specialmente con operazioni di scrittura intensiva e in configurazioni non ottimizzate. La compressione trasparente di btrfs può migliorare le prestazioni in casi specifici, ad esempio con thread singoli e flussi I/O consistenti, riducendo anche l’usura dei dispositivi flash; tuttavia, in situazioni con molti thread o elevato uso CPU, la compressione può limitare le prestazioni.

Anche rispetto a XFS, che è ottimizzato per grandi volumi e scritture sequenziali ad alte prestazioni, btrfs è meno performante ma offre funzionalità avanzate che XFS non ha nativamente (snapshot, checksum, gestione dinamica dello spazio).

Importanti novità in vista del kernel Linux 6.16

Come accennato in precedenza e come conferma il changelog di btrfs, il file system ha recentemente ricevuto significativi aggiornamenti in ambito prestazionale.

Gli interventi hanno portato a guadagni massicci nei carichi di lavoro writeback intensivi di metadati. In un test di esempio, è emerso un aumento del throughput del 50% e una diminuzione del tempo di esecuzione del 33%.

Gli sviluppatori hanno inoltre apportato diversi interventi alle strutture alla base di btrfs evitando ricerche non necessarie o ripetute. Ciò si traduce direttamente in un comportamento più reattivo delle applicazioni, specialmente sotto carichi di lavoro pesanti.

Ti consigliamo anche

Link copiato negli appunti