Guida verificata con Ubuntu: 20.04 22.04

Problemi in questa pagina? Segnalali in questa discussione

Introduzione

Btrfs è un moderno filesystem copy on write (CoW) per Linux che mira a implementare funzionalità avanzate con particolare attenzione sulla tolleranza agli errori, sulla riparazione e sulla facile amministrazione.

Sviluppato congiuntamente da più società, Btrfs è concesso in licenza ai sensi della licenza GPL e aperto al contributo di chiunque.

Di seguito sono elencate le principali caratteristiche e funzionalità:

Per approfondire l'argomento leggere la relativa guida (in inglese).

Installare Ubuntu con filesystem Btrfs

Installare Ubuntu, avendo cura in fase di partizionamento di selezionare come tipo di filesystem btrfs al posto di ext4.

Ubuntu 18.04

Il pacchetto btrfs-progs presente nei repository per il rilascio 18.04, necessario per gestire il file system Btrfs, è una versione obsoleta priva di alcune funzioni e dalle prestazioni talora carenti.

Pertanto si consiglia di scaricare e installare la versione presente nel repository per il rilascio 20.04, ora distribuito sotto forma di una suite di più pacchetti.

  1. Scaricare da questo indirizzo i seguenti pacchetti .deb:

    btrfs-progs_5.4.1-2_amd64.deb
    libbtrfs0_5.4.1-2_amd64.deb
    libbtrfsutil1_5.4.1-2_amd64.deb
  2. Spostarsi nella cartella dove sono stati salvati i pacchetti scaricati.

  3. Installare i pacchetti digitando nel terminale il seguente comando:

    sudo dpkg -i *_amd64.deb

Consigli post installazione

Per ottimizzare la gestione degli snapshot e le prestazioni, consultare questo capitolo.

Se la partizione swap è assente, per abilitare lo swapfile in Btrfs consultare la relativa pagina.


Presentazione subvolume

I subvolumi possono essere utilizzati per organizzare e ottimizzare la gestione dei dati. Il vantaggio è presente soprattutto quando si creano snasphot. Gli snapshot sono applicati per subvolume e non sono ricorsivi, sono utili per inviare un subvolume su un disco di backup con btrfs send, per configurare un intero subvolume come nocow, con diverso algoritmo di compressione. Ubuntu di default crea due subvolumi: @ montato su /, @home montato su /home.

Per approfondire l'argomento leggere la relativa guida (in inglese).


Gestione subvolume

Subvolume flat

Il subvolume flat è un subvolume secondario del subvolume di livello superiore, top level (ID 5).

Per creare e/o eliminare un subvolume flat, la radice del filesystem deve essere montata in modo che i subvolumi siano visibili.

Per montare un subvolume flat deve essere specificato nelle opzioni di fstab.

Subvolume nested

Il subvolume nested è un subvolume nidificato dentro un altro subvolume di qualsiasi livello.

Quando si esegue un ripristino da uno snapshot gestito da timeshift, è essenziale considerare che gli snapshot non includono i subvolumi nidificati. Pertanto, per assicurarsi che il contenuto di tali subvolumi sia ripristinato correttamente, è necessario spostare manualmente il subvolume nidificato.

Per creare e/o eliminare un subvolume nested, basta specificare il percorso nel filesystem. È consigliato creare un subvolume nested su cartelle che potrebbero essere rimosse.

Un subvolume nested può essere rimosso come una semplice cartella.

Non si deve specificare nessuna opzione di montaggio in /etc/fstab poiché si montano in automatico.

Un subvolume nested viene escluso dagli snapshot del subvolume superiore, gli snapshot non sono ricorsivi su altri subvolumi.

  1. Creare un subvolume:

    sudo btrfs subvolume create /percorso/nomesubvolume
  2. Creare un subvolume sulla home dell'utente:

    btrfs subvolume create /home/nomeutente/nomesubvolume
  3. Listare i subvolumi:

    sudo btrfs subvolume list -t /
  4. Eliminare un subvolume:

    sudo btrfs subvolume delete /percorso/nomesubvolume


Compressione

La compressione trasparente è una funzionalità di btrfs che consente a un filesystem btrfs di applicare la compressione in base al file. Dei tre algoritmi supportati, zstd è quello con la migliore velocità e rapporto di compressione. L'abilitazione della compressione consente di risparmiare spazio, ma riduce anche l'amplificazione in scrittura e aumenta la durata degli SSD. A seconda del carico di lavoro e dell'hardware, la compressione può anche comportare un aumento delle prestazioni di lettura e scrittura.

Per approfondire l'argomento leggere la relativa guida (in inglese).

Algoritmo di compressione

Livelli di compressione per zstd

Livello

Rapporto

Compressione (MB/s)

Decompressione (MB/s)

1

2.658

438.47

910.51

2

2.744

364.86

886.55

3

2.801

336.33

828.41

4

2.858

286.71

886.55

5

2.916

212.77

556.84

6

2.363

119.82

990.85

7

3.000

154.06

849.30

8

3.011

159.54

875.03

9

3.025

100.51

940.15

10

3.033

118.97

616.26

11

3.036

94.19

802.11

12

3.037

73.45

931.49

13

3.041

55.17

835.26

14

3.087

44.70

716.78

15

3.126

37.30

878.84

Dati estrapolati da questa fonte.

Per usare l'algoritmo zstd il requisito minimo è Ubuntu 19.10 o superiore con la versione minima di GRUB 2.04, dove è stato implementato il supporto a zstd.

Ad oggi non è possibile impostare i livelli di compressione con il comando in spazio utente btrfs filesystem defragment -r -v -czstd, ma ci sono degli sviluppi in corso, e dovrebbe essere resi disponibili in una nuova versione di btrfs-progs.

La compressione lzo comprime meno rispetto a zstd con prestazioni vicini a zstd livello 1, ma ha un minor uso della CPU.

Benchmark orientativo delle differenze di compressione tra lzo, zstd e zlib.

Esempi di compressione

  1. Comprimere un subvolume con zstd:

    sudo btrfs filesystem defragment -r -v -czstd /mnt/@subvolume
  2. Comprimere un file o cartella con zstd:

    sudo btrfs filesystem defragment -r -v -czstd /cartella
  3. Abilita la compressione su file, cartella o subvolume in modo permanente:

    sudo btrfs property set /cartella compression zstd
  4. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/fstab e scrivervi le opzioni di montaggio con zstd livello 1:

    UUID=UUID / btrfs noatime,compress=zstd:1,autodefrag,subvol=@

La compressione di livello 1 zstd:1 potrebbe essere utile in tutti quei casi dove si ha una CPU moderna o un disco rigido a stato solido di tipo SSD/NVME.

La compressione zstd a livelli più alti può aiutare in tutti quei casi in cui si hanno dei dati di backup grandi da gestire, a discapito delle prestazioni in base al livello usato, ma a favore del risparmio di spazio.


Opzioni di montaggio

L'opzione di montaggio consigliata per i dispositivi a stato solido per uso desktop generico da scrivere nel file /etc/fstab è :

noatime,compress=zstd:1

L'opzione di montaggio consigliata per gli hard disk per uso desktop generico da scrivere nel file /etc/fstab è :

noatime,autodefrag,compress=zstd:1

Per approfondire l'argomento e ulteriori opzioni di montaggio leggere la relativa guida (in inglese).

Riparare il filesystem

Consultare la guida dedicata.


Manutenzione

Per eseguire la manutenzione periodica installare il pacchetto btrfsmaintenance.

Trim: Su Ubuntu viene abilitato in automatico tramite timer systemd quando rileva un disco a stato solido.

Dal kernel Linux 6.2 al rilevamento di un disco a stato solito verrà abilitato "discard=async"

Defrag: Se viene abilitato sull'intero filesystem c'è da considerare che rompe il collegamento con gli snapshot occupando tutto lo spazio sul disco. Può essere configurato per deframmentare su una cartella specifica dove si crea molta frammentazione, ad esempio una cartella che contiene: database, immagini VM.

L'opzione di mount autodefrag abilita la deframmentazione automatica dei file. Se abilitato, piccole scritture casuali in un intervallo di alcune decine di kilobyte (attualmente predefiniti a 64 KB), vengono rilevate e messe in coda per il processo di deframmentazione. Non adatto per carichi di lavoro di database di grandi dimensioni. Un buon compromesso per gli utenti desktop

Scrub: Controlla il checksumming dei dati, è sempre utile abilitarlo soprattutto su configurazione mirroring.

Il periodo consigliato è di un mese. L'utilizzo stimato della larghezza di banda del dispositivo è di circa l'80% su un filesystem inattivo. La classe di priorità IO è inattiva per impostazione predefinita, quindi lo scrub in background non dovrebbe interferire in modo significativo con il normale funzionamento del filesystem. Tuttavia, lo scheduler IO impostato per i dispositivi potrebbe non supportare le classi di priorità.

Balance: Sposta e libera gruppo di blocchi di dati e metadati e li compatta. Lo script di manutenzione ha dei filtri a vantaggio di un bilanciamento più veloce e minor IO. Nell'uso generale desktop non è consigliato abilitarlo.

Implicazioni sulle prestazioni: Le operazioni di bilanciamento richiedono molto IO e può essere piuttosto impegnativo per la CPU, con un impatto su altre operazioni del filesystem in corso. In genere grandi quantità di dati vengono copiate da una posizione all'altra, con i corrispondenti aggiornamenti dei metadati.

  1. Abilitare il timer per aggiornare la configurazione all'avvio del sistema (consigliato):

    sudo systemctl enable btrfsmaintenance-refresh.service
  2. Abilitare il timer per balance, di default impostato settimanalmente:

    sudo systemctl enable btrfs-balance.timer
  3. Abilitare il timer per scrub, di default impostato mensilmente:

    sudo systemctl enable btrfs-scrub.timer
  4. Abilitare il timer per il defrag, di default impostato mensilmente:

    sudo systemctl enable btrfs-defrag.timer

Per modificare la configurazione aprire con i privilegi di amministrazione e con un editor di testo il file /etc/default/btrfsmaintenance.

Pagina ufficiale del progetto btrfsmaintenance.


Btrfs send | receive

Btrfs ha alcune funzionalità chiave che consentono soluzioni di backup efficienti.

Il primo invio, chiamato Initial Bootstrapping, è un backup completo e richiederà una quantità di tempo più o meno cospicua a seconda delle dimensioni della partizione. Il secondo invio può essere fatto in modo incrementale, a condizione che l'ultimo snapshot inviato venga conservato. A differenza di rsync e cp, che devono scansionare l'origine e la destinazione per confrontare i cambiamenti e sapere cosa copiare, Btrfs send non ha bisogno di leggere un singolo file sulla sorgente o destinazione per sapere cosa è cambiato, ed è molto più veloce. Btrfs send|receive è adatto per il backup, ma è principalmente uno schema di replica. Non ha opzioni di filtro per escludere o includere cartelle o file. Preserva tutto: date, permessi ecc.

Per approfondire l'argomento leggere la relativa guida (in inglese)

Backup subvolume

Al ripristino di un subvolume montato, richiede un riavvio o un remount per applicare il ripristino.

  1. Ripristino di uno snapshot dal backup:

    sudo btrfs send /percorso/disco/backup/home_snapshot3 | btrfs receive /mnt/
  2. Riportare il subvolume in lettura e scrittura:

    sudo btrfs property set -f /mnt/home_snapshot3 ro false
  3. Rinominare il subvolume attuale, nel caso della home:

    sudo mv /mnt/@home /mnt/@home_backup
  4. Rinominare lo snapshot, nel caso della home rinominarlo nel subvolume precedente:

    sudo mv /mnt/home_snapshot3 /mnt/@home


Ottimizzazione subvolume su Ubuntu

Creare vari subvolumi può portare ad alcuni vantaggi:

Subvolume cartella /var/tmp

  1. Montare la radice su /mnt (la cartella montata è di esempio, si può scegliere o creare altre cartelle per il montaggio):

    sudo mount -t btrfs -o --options-source /dev/sda2 /mnt
  2. Creare subvolume della cartella:

    sudo btrfs subvolume create /mnt/@vartmp
  3. Impostare i permessi della cartella tramite il bit sticky:

    sudo chmod 1777 /mnt/@vartmp
  4. Copiare il contenuto della cartella nel subvolume:

    sudo cp -a /mnt/@/var/tmp/* /mnt/@vartmp/
  5. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/fstab e scriverci le opzioni di montaggio:

    UUID=UUID /var/tmp btrfs noatime,subvol=@vartmp
  6. Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.

  7. Smontare il filesystem:

    sudo umount /mnt

Subvolume cartella /var/cache

  1. Montare la radice su /mnt (la cartella montata è di esempio, si può scegliere o creare altre cartelle per il montaggio):

    sudo mount -t btrfs -o --options-source /dev/sda2 /mnt
  2. Creare subvolume della cartella:

    sudo btrfs subvolume create /mnt/@varcache
  3. Copiare il contenuto della cartella nel subvolume:

    sudo cp -a /mnt/@/var/cache/* /mnt/@varcache/
  4. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/fstab e scriverci le opzioni di montaggio:{{{:

    UUID=UUID /var/cache  btrfs noatime,subvol=@varcache
  5. Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.

  6. Smontare il filesystem:

    sudo umount /mnt

Subvolume cartella /var/log

  1. Montare la radice su /mnt (la cartella montata è di esempio, si può scegliere o creare altre cartelle per il montaggio):

    sudo mount -t btrfs -o --options-source /dev/sda2 /mnt
  2. Creare subvolume della cartella:

    sudo btrfs subvolume create /mnt/@varlog
  3. Copiare il contenuto della cartella nel subvolume:

    sudo cp -a /mnt/@/var/log/* /mnt/@varlog/
  4. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/fstab e scriverci le opzioni di montaggio:

    UUID=UUID /var/log btrfs noatime,compress=zstd:1,subvol=@varlog
  5. Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.

  6. Smontare il filesystem:

    sudo umount /mnt

Subvolume flatpak

È utile in caso di ripristino di sistema da uno snapshot, poiché le applicazioni flatpak non vengono ripristinate.

  1. Montare la radice su /mnt (la cartella montata è di esempio, si può scegliere o creare altre cartelle per il montaggio):

    sudo mount -t btrfs -o --options-source /dev/sda2 /mnt
  2. Creare subvolume della cartella:

    sudo btrfs subvolume create /mnt/@varlibflatpak
  3. Copiare il contenuto della cartella nel subvolume:

    sudo cp -a /mnt/@/var/lib/flatpak/* /mnt/@varlibflatpak/
  4. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/fstab e scriverci le opzioni di montaggio:

    UUID=UUID /var/lib/flatpak btrfs noatime,compress=zstd:1,subvol=@varlibflatpak
  5. Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.

  6. Smontare il filesystem:

    sudo umount /mnt

Subvolume VM gestite da VirtManager

  1. Montare la radice su /mnt (la cartella montata è di esempio, si può scegliere o creare altre cartelle per il montaggio):

    sudo mount -t btrfs -o --options-source /dev/sda2 /mnt
  2. Creare subvolume della cartella:

    sudo btrfs subvolume create /mnt/@varlibvirt

    Da libvirt version 6.6.0 non è più necessario disattivare il COW manualmente, se rileva Btrfs come filesystem, viene disattivato in automatico per le nuove immagini.

    Non disattivare "COW" se di dispone di una configurazione mirroring (raid1|raid1cN|raid10...). Per ulteriore dettagli: https://github.com/kdave/btrfs-progs/issues/481

  3. Disattivare il COW sul subvolume:

    sudo chattr +C /mnt/@varlibvirt
  4. Copiare il contenuto della cartella nel subvolume:

    sudo cp -a /mnt/@/var/lib/libvirt/images/* /mnt/@varlibvirt/
  5. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/fstab e scriverci le opzioni di montaggio:

    UUID=UUID /var/lib/libvirt/images/ btrfs noatime,subvol=@varlibvirt
  6. Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.

  7. Smontare il filesystem:

    sudo umount /mnt

Subvolume immagini di GNOME-Boxes

Per la versione di flatpak che si trova sullo store flathub, il percorso alle immagini VM è /.var/app/org.gnome.Boxes/data/gnome-boxes/images.

Con GNOME-Boxes già installato seguire i seguenti passaggi.

  1. Creare la cartella temporanea:

    sudo mkdir /home/utente/boxtmp
  2. Copiare il contenuto della cartella:

    sudo cp -a /home/username/.local/share/gnome-boxes/images/* /home/username/boxtmp/
  3. Elimina la cartella /images per creare il subvolume:

    sudo rm -r /home/username/.local/share/gnome-boxes/images
  4. Creare subvolume della cartella:

    sudo btrfs subvolume create /home/username/.local/share/gnome-boxes/images
  5. Ripristinare il contenuto della cartella /images:

    sudo cp -a /home/username/boxtmp/* /home/username/.local/share/gnome-boxes/images/

Se GNOME-Boxes non è già installato, prima d'installarlo creare il subvolume /home/username/.local/share/gnome-boxes/images e successivamente installare GNOME-Boxes.

Comandi principali di Btrfs

  1. Leggere e stampare le statistiche di errore IO del dispositivo:

       sudo btrfs device stats / 
  2. Mostrare informazioni dettagliate sulle allocazioni interne nei dispositivi:

       sudo btrfs device usage / 
  3. Mostrare informazioni dettagliate sull'uso del filesystem interno:

       sudo btrfs filesystem usage / 

FAQ

Alcune risposte alle domande più comuni su Btrfs.

Risoluzione dei problemi

Mancato funzionamento del comando (p)locate

A causa del bug #1968190 , la ricerca di file, cartelle ed altro nel sistema, tramite il comando (p)locate, non darà esito.

Per risolvere eseguire la seguente procedura.

  1. Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/updatedb.conf.

  2. Modificare la stringa PRUNE_BIND_MOUNTS = “yes”' in PRUNE_BIND_MOUNTS = “no”.

  3. Salvare e chiudere il file.
  4. Aggiornare il database digitando nel terminale il seguente comando:

    sudo updatedb

Mancato funzionamento della ricerca in Kubuntu

La ricerca di file, cartelle ed altro nel sistema, tramite le applicazioni grafiche come Dolphin, KFind, Konqueror ed altre, potrebbero non dare esito a causa della disattivazione predefinita del servizio d'indicizzazione dei file Baloo.

Per attivare il servizio aprire il menù Menù K → Impostazioni → Impostazioni di sistema → Spazio di lavoro → Ricerca → Ricerca file e spuntare la voce Abilita la ricerca nei file.

Per una ricerca più approfondita nel sistema, utile sopratutto usando l'applicazione grafica KFind, spuntare le voci Indicizza anche i contenuti dei file e/o Indicizza file e cartelle nascosti.

In computer datati e/o dalle prestazioni limitate l'attivazione del servizio può causare malfunzionamenti quali blocchi del sistema, sovraccarico e/o surriscaldamento dei componenti hardware, ecc.

Ulteriori risorse


CategoryAmministrazione

Hardware/DispositiviPartizioni/Btrfs/Introduzione (l'ultima modifica è del 01/10/2024 21.04.25, fatta da andreas-xavier)