Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "emanuc/pagina-iniziale-btrfs"
Differenze tra le versioni 106 e 107
Versione 106 del 04/08/2020 13.58.36
Dimensione: 24636
Autore: emanuc
Commento:
Versione 107 del 15/12/2022 13.13.24
Dimensione: 24683
Commento:
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 4: Linea 4:
<<Include(NuoviStrumentiWiki/PaginaDiProva)>>


Attenzione! Questa è una Pagina di prova. Le informazioni riportate potrebbero essere incomplete, errate e potenzialmente pericolose. Per contribuire alla realizzazione di questa pagina consultare la discussione di riferimento.

Guida verificata con Ubuntu: 20.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 concentrandosi anche sulla tolleranza agli errori, sulla riparazione e sulla facile amministrazione. Sviluppato congiuntamente da più società, Btrfs è concesso in licenza ai sensi della GPL e aperto al contributo di chiunque.
Date le caratteristiche tecniche, Btrfs è principalmente volto all'ambito server. Tuttavia è da notare come la possibilità di creare snapshot, cioè delle istantanee con dei punti di ripristino applicabili con un clic, abilitare la compressione (oltre al risparmio di spazio, si ha anche un aumento della durata dell'hardware), checksumming dove si ha la garanzia dell'integrità dei dati, restringere e aumentare la partizione online, ''aumentare lo spazio a disposizione aggiungendo un disco a filesystem montato'''.

Per maggiori dettagli.

Installare Ubuntu con filesystem Btrfs

Per installare Ubuntu con il filesystem btrfs e sfruttare tutte le sue funzionalità, dobbiamo procedere con l’installazione manuale indicata QUI, scegliere btrfs al posto di ext4.

Consigli post installazione:

  • Installare timeshift, fatte le configurazioni iniziali, creare uno snapshot o configurare gli snapshot programmati, utile al ripristino del sistema in caso di problemi con gli upgrade.

  • Se si vuole fare ulteriori personalizzazioni per ottimizzare la gestione degli snapshot e le prestazione, consultare questa guida
  • Se non si ha nessuno swap abilitato e si vuole abilitare lo swapfile su btrfs seguire questa guida

Subvolume

Dettagli

Un sottovolume Btrfs è un filetree POSIX montabile indipendentemente e non un dispositivo a blocchi (e non può essere trattato come uno). La maggior parte degli altri filesystem POSIX ha una singola radice montabile, Btrfs ha una radice montabile indipendente per il volume (sottovolume di livello superiore) e per ogni sottovolume; un volume Btrfs può contenere più di un singolo filetree, può contenere una foresta di filetree. Un sottovolume Btrfs può essere pensato come uno spazio dei nomi di file POSIX.

Per Maggiori dettagli

Nota

  • L'installer di Ubuntu di default crea due subvolumi:

    @: È la radice di Ubuntu /@/file di sistema, ci sono tutti i file di sistema.

    @home: È la home degli utente /@home/utenti.

  • Per creare ed eliminare i subvolumi flat sul toplevel, il filesystem radice deve essere montato, nel nostro esempio è montato su /mnt, /dev/sdYN è il numero della partizione radice dove si è installato Ubuntu. Il nome al subvolume @nomesubvolume può essere nominato a piacere, il consiglio è di nominarlo in modo da ricordare il mount.

  • Esempio: per la cartella /var/log è buona norma nominarlo in @varlog; La @ iniziale si mantiene per lo standard di Ubuntu e si mostra subito che è un subvolume btrfs, varlog ci ricorda che è il mount del percorso /var/log.

Gestione subvolume

  • Subvolume flat: È un subvolume secondario del subvolume di livello superiore, top level (ID 5). Per creare, eliminare un subvolume flat, il filesystem radice deve essere montato in modo che i subvolumi siano visibili. È consigliato creare un subvolume flat su cartelle fisse di sistema, ad esempio:/var/cache. Per montare un subvolume flat deve essere specificato nelle opzioni di fstab.

  • Subvolume nested: Un subvolume nested è un subvolume dentro un altro subvolume. Per creare, eliminare un subvolume nested, basta specificare il percorso sul filesystem, ad esempio: sudo btrfs subvolume create /nuovosubvolume. È consigliato creare un subvolume nested su cartelle che potrebbero essere rimosse, ad esempio: /var/lib/flatpak, questo perché quando andiamo a dare un apt purge flatpak va ad eliminare la cartella di flatpak, con un subvolume flat, aptva in errore perché non può rimuovere la cartella /var/lib/flatpak.

Un subvolume nested può essere rimosso come una semplice cartella, inoltre non dobbiamo specificare nessuna opzione di mount su /etc/fstab perché si montano in automatico. Anche un subvolume nested viene escluso dagli snapshot del subvolume superiore, gli snapshot non sono ricorsivi su altri subvolumi.

Subvolume flat

  1. Montare la radice su /mnt:

    sudo mount -t btrfs -o noatime,compress=zstd,autodefrag /dev/sdYN /mnt
  2. Creare un subvolume:

    sudo btrfs subvolume create /mnt/@nomesubvolume
  3. Lista subvolumi:

    sudo btrfs subvolume list /mnt
  4. Eliminare un subvolume:

    sudo btrfs subvolume delete /mnt/@nomesubvolume
  5. Mount di un subvolume:

    sudo mount -t btrfs -o subvol=@nomesubvolume /dev/sdYN /mnt

Subvolume nested

  1. Creare un subvolume:

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

    sudo btrfs subvolume create /home/nomeutente/nomesubvolume
  3. Lista subvolumi:

    sudo btrfs subvolume list /
  4. Eliminare un subvolume:

    sudo btrfs subvolume delete /percorso/nomesubvolume

Compressione

Dettagli

Btrfs supporta la compressione trasparente e automatica. Ciò non solo riduce la dimensione dei file, ma può anche migliorare le prestazioni, in alcuni casi d'uso specifici (ad esempio thread singolo con I/O di file pesanti), danneggiando ovviamente le prestazioni in altri casi (ad esempio attività multithread e/o cpu con grandi attività file I/O). Le prestazioni migliori si ottengono generalmente con gli algoritmi di compressione più veloci, zstd e lzo , e alcuni benchmark forniscono confronti dettagliati.

Utile anche ad aumentare la durata dei dischi SSD/NVME, questo principalmente perché a causa della compressione ci sono meno operazioni di lettura e scrittura. Facebook è la testimonianza di questo caso d'uso (Facebook usa ovunque in produzione Btrfs):

Also keep in mind we pay really close attention to burn rates for our drives, because obviously at our scale it translates to millions of dollars. Btrfs has improved our burn rates with the compression, as the write amplification goes drastically down, thus extending the life of the drives. Obviously the Facebook scale, recoverability, and workload is going to be drastically different from a random Fedora user. But hardware wise we are pretty close, at least on the disk side. Thanks,

Josef

Per maggiori dettagli

Nota

  • Cosa succede ai file incomprimibili?
    • Esiste una semplice logica decisionale: se la prima porzione di dati da comprimere non è più piccola dell'originale, la compressione del file è disabilitata, a meno che non ci sia l'opzione di mount compress-force=algoritmo. In tal caso, la compressione verrà sempre tentata sul file solo per essere successivamente scartata, con maggior cicli di CPU. Questo non è ottimale e soggetto a ottimizzazioni e ulteriori sviluppi.

  • Cosa succede se abilito la compressione con i file già scritti?
    • Solo i file creati, modificati e dopo averli montati con l'opzione compress=algoritmo verranno compressi. Per applicare la compressione ai file esistenti utilizzare il comando "btrfs filesystem defragment -calgoritmo".

  • Posso impostare la compressione di un file, cartella o subvolume senza utilizzare l'opzione di mount?
    • Sì. L'utilità chattr supporta l'impostazione dell'attributo del file c che contrassegna l'inode per comprimere i nuovi dati scritti. L'impostazione della proprietà di compressione di un file utilizzando btrfs property set <file> compression <zlib|lzo|zstd> forzerà la compressione da utilizzare su quel file, cartella o subvolume utilizzando l'algoritmo specificato. Per disattivare la compressione btrfs property set <file> compression none

Supporto compressione:

  • zstd è disponibile dal kernel 4.14, i livelli di compressione per zstd sono disponibili dal kernel 5.1, se non si specifica nessun livello, default è 3.

  • zlib supporta i livelli di compressione da 1 a 9, default è 3.

  • lzo non supporta nessun livello di compressione su btrfs

  • ATTENZIONE: Per usare la compressione zstd sulla radice di Ubuntu /@ il requisito è Ubuntu 19.10 o superiore con la versione di GRUB 2.04, dove è stato aggiunto il supporto a zstd.

  • Ad oggi non è possibile impostare i livelli di compressione con il comando user space btrfs filesystem defragment -r -v -czstd, ma ci sono dei lavori iniziali e presto dovrebbe essere disponibile in una nuova versione di btrfs-progs.

Livelli di compressione per zstd: (Fonte)

Level

Ratio

Compression (MB/s)

Decompression (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

Confronto tra lzo, zstd, zlib: benchmark

Esempi

  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 /percorso
  3. Opzione di mount su /etc/fstab con zstd livello 1:

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

Suggerimenti

  • La compressione di livello 1 zstd:1 potrebbe essere utile in tutti quei casi dove si ha una CPU moderna, un disco moderno come un nvme o ssd.

  • La compressione zstd di livello più alto potrebbe aiutare in tutti quei casi dove si ha dei dati di backup, a discapito delle performance in base al livello usato, ma a favore del risparmio di spazio.

  • La compressione lzo comprime meno rispetto a zstd con performance vicini a zstd livello 1.

Opzioni di mount

Le opzioni di mount consigliate per un uso desktop generico: noatime,compress=zstd:1,autodefrag. Per tutte le altre opzioni di mount e maggiori dettagli seguire il wiki di Btrfs MOUNT_OPTIONS

Riparare il filesystem

Se si hanno problemi con il filesystem, il consiglio è di non provare comandi a caso, ma usare i comandi giusti per non peggiorare la situazione, in questo caso seguire attentamente le istruzioni dalla wiki di openSUSE (SUSE è il maggior contributore di Btrfs) QUI

Scrub

Scrub è lo strumento per verificare il checksumming di dati e metadati e cerca di ripararla automaticamente se c'è una ridondanza (raid 1, dup etc...). È consigliato un controllo periodico, su come fare vai alla sezione Manutenzione

Per maggiori dettagli

Balance

  • Il bilanciamento del filesystem btrfs è un'operazione che prende semplicemente tutti i dati e i metadati sul filesystem e li riscrive in una posizione diversa sui dischi. È stato originariamente progettato per filesystem multi-dispositivo, per diffondere i dati in modo più uniforme su tutti i dispositivi (cioè per "bilanciare" il loro utilizzo). Ciò è particolarmente utile quando si aggiungono nuovi dispositivi a un filesystem quasi completo.
  • A causa del modo in cui funziona l'equilibrio, ha anche alcuni effetti collaterali utili:

Se ci sono molti dati allocati ma inutilizzati o blocchi di metadati, un balance può recuperare parte di quello spazio allocato. Questo è il motivo principale per l'esecuzione di un equilibrio su un file system a dispositivo singolo.

  • Devo eseguire un balance regolarmente?

    • Nell'uso generale, no. balance completamente non filtrato richiede in genere molto tempo e riscrive inutilmente grandi quantità di dati. Potresti voler eseguire un balance solo sui metadati (vedi Balance_Filters) se trovi che hai allocato quantità molto grandi di spazio metadati ma non utilizzato, ma questa dovrebbe essere l'ultima risorsa. Ad un certo punto, questo tipo di pulizia verrà trasformata in un processo automatico in background.

Per maggiori dettagli

Btrfs send receive

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

  • Immediata, Atomic COW Snapshots:

Poiché gli snapshot sono atomici, quando viene ripristinata uno snapshot, questo appare alle applicazioni come se si fosse verificata una perdita di potenza (e il filesystem è tornato a uno stato precedente). Pertanto è possibile eseguire il backup dei database senza arrestarli in anticipo.

  • Trasferimento snapshot incrementale:

Determinazione e streaming efficienti delle differenze tra due snapshot, se sono snapshot dello stesso subvolume o hanno una relazione genitore-figlio. Questo è molto più veloce di quanto potrebbe fare rsync, specialmente su file system di grandi dimensioni. (Ad esempio, rsync non può essere a conoscenza di semplici cambiamenti di metadati come nome file, posizione ecc., Ma lo stesso FS ne è certamente consapevole.)

Per maggiori dettagli

Manutenzione

Per eseguire la manutenzione periodica di balance e scrub bisogna installare il tool btrfsmaintenance presente nei repository universe di Ubuntu.

  • Non abilitare trim perché viene abilitato in automatico su Ubuntu tramite service systemd quando rileva un disco ssd, nè defrag perché rompe il collegamento con le istantanee e quindi viene occupato tutto lo spazio, è un buon compromesso l'opzione di mount autodefrag.

Nota su autodefrag: Abilita la deframmentazione automatica dei file. Se abilitato, piccole scritture casuali in file (in un intervallo di decine di kilobyte, attualmente sono 64 KB) vengono rilevate e messe in coda per il processo di deframmentazione. Non adatto per carichi di lavoro di database di grandi dimensioni.

Non abilitare la manutenzione se non si ha un carico di lavoro pesante, o se si è in single disk (no raid) principalmente questo è pensato per server dove si ha un carico di lavoro pesante. Per uso desktop il consiglio è di non abilitarlo.

  1. Installa btrfsmaintenance:

     sudo apt install btrfsmaintenance
  2. Abilita il timer per aggiornare la configurazione all'avvio del sistema (consigliato):

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

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

     sudo systemctl enable btrfs-scrub.timer

Per modificare la configurazione editare il file che si trova su: /etc/default/btrfsmaintenance

Nota: Durante il processo di balance potreste notare un rallentamento per il carico IO generato da balance.

Pagina del progetto

Ottimizzazione subvolume su Ubuntu

Nota

Creare vari subvolumi si possono avere vari vantaggi:

  • Possibilità di escluderli dagli snapshot. Ad esempio: sulla cartella di sistema /var/cache del subvolume @, quindi /@/var/cache', e si crea un subvolume della cartella /var/cache, questa cartella viene escluda dagli snapshot del subvolume di sistema @ quando usiamo tool come Timeshift

  • Possibilità di disabilitare COW, impostare un diverso algoritmo di compressione o disabilitare la compressione.

  • Inviare l'intero subvolume su un disco esterno o di rete per un backup con Btrfs send, l'unico requisito per usare Btrfs send è che la destinazione sia in Btrfs.

Subvolume cartella tmp

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

    sudo mount -t btrfs -o --options-source /dev/sdYN /mnt
  2. Crea subvolume:

    sudo btrfs subvolume create /mnt/@tmp
  3. Su questa cartella settare i permessi (Sticky bit):

    sudo chmod 1777 /mnt/@tmp
  4. In questa cartella ci sono file temporanei, i file cambiano continuamente, niente di importante, utile disattivare il COW:

    sudo chattr +C /mnt/@tmp
  5. Copia il contenuto della cartella sul subvolume:

    sudo cp -a /mnt/@/tmp/* /mnt/@tmp/
  6. Opzione di mount su /etc/fstab:

    UUID=UUID /tmp btrfs noatime,autodefrag,subvol=@tmp
  7. Se non si vuole creare altro subvolume, si può smontare il filesystem:

    sudo umount /mnt

Subvolume cartella var/tmp

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

    sudo mount -t btrfs -o --options-source /dev/sdYN /mnt
  2. Crea subvolume:

    sudo btrfs subvolume create /mnt/@vartmp
  3. Su questa cartella settare i permessi (Sticky bit):

    sudo chmod 1777 /mnt/@vartmp
  4. In questa cartella ci sono file temporanei, i file cambiano continuamente, niente di importante, utile disattivare il COW:

    sudo chattr +C /mnt/@vartmp
  5. Copia il contenuto della cartella sul subvolume:

    sudo cp -a /mnt/@/var/tmp/* /mnt/@vartmp/
  6. Opzione di mount su /etc/fstab:

    UUID=UUID /var/tmp btrfs noatime,autodefrag,subvol=@vartmp
  7. Se non si vuole creare altro subvolume, si può smontare il filesystem:

    sudo umount /mnt

Subvolume cartella var/cache

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

    sudo mount -t btrfs -o --options-source /dev/sdYN /mnt
  2. Crea subvolume:

    sudo btrfs subvolume create /mnt/@varcache
  3. In questa cartella ci sono file di cache, i file cambiano continuamente, niente di importante, utile disattivare il COW:

    sudo chattr +C /mnt/@varcache
  4. Copia il contenuto della cartella sul subvolume:

    sudo cp -a /mnt/@/var/cache/* /mnt/@varcache/
  5. Opzione di mount su /etc/fstab:

    UUID=UUID /var/cache btrfs noatime,autodefrag,subvol=@varcache
  6. Se non si vuole creare altro subvolume, si può smontare il filesystem:

    sudo umount /mnt

Subvolume cartella var/log

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

    sudo mount -t btrfs -o --options-source /dev/sdYN /mnt
  2. Crea subvolume:

    sudo btrfs subvolume create /mnt/@varlog
  3. In questa cartella ci sono file di log, ci sono continue scritture di file, utile disattivare il COW:

    sudo chattr +C /mnt/@varlog
  4. Copia il contenuto della cartella sul subvolume:

    sudo cp -a /mnt/@/var/log/* /mnt/@varlog/
  5. Opzione di mount su /etc/fstab:

    UUID=UUID /var/log btrfs noatime,autodefrag,subvol=@varlog
  6. Se non si vuole creare altro subvolume, si può smontare il filesystem:

    sudo umount /mnt

Subvolume flatpak

  • Per chi usa le Applicazioni flatpak, è utile in caso di ripristino di sistema da uno snapshot, le applicazioni flatpak non vengono ripristinate.
  • Per chi ha già flatpak e le sue APP installate (chiudere tutte le applciazioni flatpak avviate):

    sudo mkdir /flatpaktmp
  • Copiare temporaneamente il contenuto:

    sudo cp -a /var/lib/flatpak/* /flatpaktmp/
  • Elimina la cartella flatpak per poter creare il subvolume:

    sudo rm -r /var/lib/flatpak
  • Crea subvolume:

    sudo btrfs subvolume create /var/lib/flatpak
  • Ripristinare il contenuto della cartella flatpak:

    sudo cp -a /flatpaktmp/* /var/lib/flatpak/

* Per chi non ha flatpak installato, ma deve ancora installarlo, basta semplicemente creare il subvolume, poi installare flatpak.

Subvolume immagini di Virt-Manager

  • Per chi usa Virt-Manager.
  • Per chi ha già Virt-Manager e immagini VM:

    sudo mkdir /virtmp
  • Copiare temporaneamente il contenuto:

    sudo cp -a /var/lib/libvirt/images/* /virtmp/
  • Elimina la cartella images per poter creare il subvolume:

    sudo rm -r /var/lib/libvirt/images
  • Crea subvolume:

    sudo btrfs subvolume create /var/lib/libvirt/images
  • Ripristinare il contenuto della cartella images:

    sudo cp -a /virtmp/* /var/lib/libvirt/images/

* Per chi non ha Virt-Manager installato, ma deve ancora installarlo, basta semplicemente creare il subvolume, poi installare Virt-Manager.

Subvolume immagini di GNOME-Boxes

  • Per chi usa GNOME-Boxes.
  • Per chi usa la versione flatpak, che si trova sullo store flathub, il percorso delle immagini VM è: /.var/app/org.gnome.Boxes/data/gnome-boxes/images

  • Per chi ha già GNOME-Boxes e immagini VM:

    sudo mkdir /home/utente/boxtmp
  • Copiare temporaneamente il contenuto:

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

    sudo rm -r /home/username/.local/share/gnome-boxes/images
  • Crea subvolume:

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

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

* Per chi non ha GNOME-Boxes installato, ma deve ancora installarlo, basta semplicemente creare il subvolume, poi installare GNOME-Boxes.

Comandi principali di Btrfs

  1. Legge e stampa le statistiche di errore IO del dispositivo:

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

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

       sudo btrfs filesystem usage / 

Ulteriori risorse


CategoryHomepage