Dimensione: 26380
Commento: correzioni varie
|
← Versione 60 del 19/01/2025 12.41.49 ⇥
Dimensione: 30710
Commento:
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
## page was renamed from AmministrazioneSistema/Filesystem/Btrfs | |
Linea 6: | Linea 7: |
<<Informazioni(forum="https://forum.ubuntu-it.org/viewtopic.php?f=46&t=639190"; rilasci="20.04 18.04")>> | <<Informazioni(forum="https://forum.ubuntu-it.org/viewtopic.php?f=46&t=639190"; rilasci="22.04 20.04 18.04")>> |
Linea 14: | Linea 15: |
Di seguito sono elencate le principali cartteristiche e funzionalità: * Snapshot: Offre la possibilità di creare istantanee per ogni subvolume, inizialmente non occupando spazio, con strumenti già esistenti come Timeshift e un facile ripristino del sistema in caso di problemi. * Compressione: Possibilità di abilitare la compressione trasparente '''zlib|lzo|zstd''' utile al risparmio di spazio a incrementare la durata dell'hardware, in alcuni casi a migliorare le prestazioni. * Checksumming su dati e metadati: garantisce l'integrità dei dati e verificato ad ogni lettura, possibilità di avviare un scrub per un ulteriore verifica. * Gestione multi disco: Possibilità di aumentare lo spazio a disposizione aggiungendo un disco al filesystem, convertire a sistema montato da single a raid1, ecc. Per approfondire l'argomento leggere la [[https://btrfs.wiki.kernel.org/index.php/Main_Page|relativa guida]] (in inglese). |
Di seguito sono elencate le principali caratteristiche e funzionalità: * '''Snapshot''': offre la possibilità di creare istantanee per ogni subvolume, inizialmente non occupando spazio, con strumenti già esistenti come Timeshift e un facile ripristino del sistema in caso di problemi. * '''Compressione''': possibilità di abilitare la compressione trasparente '''zlib|lzo|zstd''' utile al risparmio di spazio a incrementare la durata dell'hardware, in alcuni casi a migliorare le prestazioni. * '''Checksumming su dati e metadati''': garantisce l'integrità dei dati e verificato ad ogni lettura e scrittura, possibilità di avviare [[https://btrfs.readthedocs.io/en/latest/btrfs-scrub.html|scrub]] per una verifica su tutti i dati e metadati. * '''Gestione multi disco''': possibilità di aumentare lo spazio a disposizione aggiungendo un disco al filesystem, convertire a sistema montato da single a raid1, ecc. * '''Zoned Storage''': [[https://btrfs.readthedocs.io/en/latest/Zoned-mode.html|Dal kernel 5.12 Btrfs supporta la modalità a zone.]] Questa modalità viene abilitata sugli hard disk SMR e sui dischi a stato solido NVMe ZNS ([[https://zonedstorage.io/|NVMe Zoned Namespaces]]). Per approfondire l'argomento leggere la [[https://btrfs.readthedocs.io/en/latest/|relativa guida]] (in inglese). |
Linea 25: | Linea 28: |
[[Installazione/InstallareUbuntu#Tipo_di_installazione|Installare]] '''Ubuntu''' scegliendo come tipo di partizionamento '''btrfs''' al posto di '''ext4'''. | [[Installazione/InstallareUbuntu#Tipo_di_installazione|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. 0. Scaricare da questo [[http://it.archive.ubuntu.com/ubuntu/pool/main/b/btrfs-progs|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 }}} 0. [[AmministrazioneSistema/ComandiBase#cd|Spostarsi]] nella cartella dove sono stati salvati i pacchetti scaricati. 0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] i pacchetti digitando nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo dpkg -i *_amd64.deb }}} |
Linea 42: | Linea 62: |
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, inviare un subvolume su un disco di backup con [[https://wiki.ubuntu-it.org/AmministrazioneSistema/Filesystem/Btrfs#Btrfs_send_receive|btrfs send]], configurare un intero subvolume come nocow, con diverso algoritmo di compressione. | 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 [[https://wiki.ubuntu-it.org/AmministrazioneSistema/Filesystem/Btrfs#Btrfs_send_receive|btrfs send]], per configurare un intero subvolume come nocow, con diverso algoritmo di compressione. |
Linea 45: | Linea 65: |
Per approfondire l'argomento leggere la [[https://btrfs.wiki.kernel.org/index.php/SysadminGuide#Subvolumes|relativa guida]] (in inglese). | Per approfondire l'argomento leggere la [[https://btrfs.readthedocs.io/en/latest/Subvolumes.html|relativa guida]] (in inglese). |
Linea 50: | Linea 70: |
Linea 72: | Linea 91: |
sudo btrfs subvolume create /mnt/@<nomesubvolume> | sudo btrfs subvolume create /mnt/<nomesubvolume> |
Linea 75: | Linea 94: |
sudo btrfs subvolume list /mnt | sudo btrfs subvolume list -t /mnt |
Linea 78: | Linea 97: |
sudo btrfs subvolume delete /mnt/@<nomesubvolume> | sudo btrfs subvolume delete /mnt/<nomesubvolume> |
Linea 81: | Linea 100: |
sudo mount -t btrfs -o subvol=@<nomesubvolume> /dev/sda2 /mnt | sudo mount -t btrfs -o subvol=<nomesubvolume> /dev/sda2 /mnt |
Linea 89: | Linea 108: |
Se si effettua un ripristino da uno '''snapshot''' con tool come [[AmministrazioneSistema/BackupDelSistema/Timeshift|timeshift]], gli '''snapshot''' non sono ricorsivi e quindi non si portano dietro i subvolumi nidificati, ma si dovrebbe spostare manualmente il contenuto della cartella del subvolume, ecco perché in caso di ripristino non ci ritroveremo il contenuto dei subvolumi nidificati. | Quando si esegue un ripristino da uno snapshot gestito da [[AmministrazioneSistema/BackupDelSistema/Timeshift|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. |
Linea 96: | Linea 115: |
Non dobbiamo specificare nessuna opzione di montaggio in `/etc/fstab` poiché si montano in automatico. | Non si deve specificare nessuna opzione di montaggio in `/etc/fstab` poiché si montano in automatico. |
Linea 104: | Linea 123: |
sudo btrfs subvolume create /home/nomeutente/nomesubvolume | btrfs subvolume create /home/nomeutente/nomesubvolume |
Linea 107: | Linea 126: |
sudo btrfs subvolume list / | sudo btrfs subvolume list -t / |
Linea 117: | Linea 136: |
'''Btrfs''' supporta la compressione trasparente e automatica riducendo la dimensione dei file e migliorando le prestazioni. In alcuni casi d'uso specifici, ad esempio thread singolo con I/O di file pesanti, in altri casi riducendo le prestazioni, ad esempio attività multithread e/o cpu con grandi attività file I/O. Le prestazioni migliori si ottengono generalmente con gli algoritmi di compressione '''zstd''' e '''lzo''' . Utile ad aumentare la durata dei dischi '''[[https://it.wikipedia.org/wiki/Unit%C3%A0_di_memoria_a_stato_solido|SSD/NVME]]''', poiché riduce il numero di operazioni di lettura e scrittura. Il caso d'uso da parte dell'azienda '''[[https://lwn.net/Articles/824855/|Facebook]]''', che usa '''Btrfs''' in produzione, in cui hanno riscontrato un aumento della durata sugli SSD consumer, con la compressione (compress=zstd:1). Per approfondire l'argomento leggere la [[https://btrfs.wiki.kernel.org/index.php/Compression|relativa guida]] (in inglese). == Supporto 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 [[https://btrfs.readthedocs.io/en/latest/Compression.html|relativa guida]] (in inglese). == Algoritmo di compressione == |
Linea 136: | Linea 147: |
||<rowstyle="background-color: #cccccc;" :15%>'''Livello''' ||<:15%>'''Rapporto''' ||<:35%>'''Compressione (MB/s)''' ||<:35%>'''Decompressione (MB/s)''' || ||<#f7f7f7> '''1''' || 2.658 || 438.47 || 910.51 || ||<#f7f7f7> '''2''' || 2.744 || 364.86 || 886.55 || ||<#f7f7f7> '''3''' || 2.801 || 336.33 || 828.41 || ||<#f7f7f7> '''4''' || 2.858 || 286.71 || 886.55 || ||<#f7f7f7> '''5''' || 2.916 || 212.77 || 556.84 || ||<#f7f7f7> '''6''' || 2.363 || 119.82 || 990.85 || ||<#f7f7f7> '''7''' || 3.000 || 154.06 || 849.30 || ||<#f7f7f7> '''8''' || 3.011 || 159.54 || 875.03 || ||<#f7f7f7> '''9''' || 3.025 || 100.51 || 940.15 || ||<#f7f7f7> '''10''' || 3.033 || 118.97 || 616.26 || ||<#f7f7f7> '''11''' || 3.036 || 94.19 || 802.11 || ||<#f7f7f7> '''12''' || 3.037 || 73.45 || 931.49 || ||<#f7f7f7> '''13''' || 3.041 || 55.17 || 835.26 || ||<#f7f7f7> '''14''' || 3.087 || 44.70 || 716.78 || ||<#f7f7f7> '''15''' || 3.126 || 37.30 || 878.84 || |
||<:15%>'''Livello''' ||<:15%>'''Rapporto''' ||<:35%>'''Compressione (MB/s)''' ||<:35%>'''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 || |
Linea 156: | Linea 167: |
Per usare la compressione '''zstd''' sulla radice di Ubuntu '''/@''' il requisito minimo è d'usare Ubuntu 19.10 o superiore con la versione minima di '''GRUB 2.04''', dove è stato implementato il [[https://www.phoronix.com/scan.php?page=news_item&px=GRUB-Btrfs-Zstd-Support|supporto a zstd]]. | 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 [[https://www.phoronix.com/scan.php?page=news_item&px=GRUB-Btrfs-Zstd-Support|supporto a zstd]]. |
Linea 164: | Linea 175: |
La compressione '''lzo''' comprime meno rispetto a '''zstd''' con prestazioni vicini a '''zstd''' livello 1. | La compressione '''lzo''' comprime meno rispetto a '''zstd''' con prestazioni vicini a '''zstd''' livello 1, ma ha un minor uso della CPU. |
Linea 175: | Linea 186: |
sudo btrfs filesystem defragment -r -v -czstd /percorso | sudo btrfs filesystem defragment -r -v -czstd /cartella }}} 0. Abilita la compressione su file, cartella o subvolume in modo permanente:{{{ sudo btrfs property set /cartella compression zstd |
Linea 194: | Linea 208: |
L'opzione di montaggio consigliata per un uso desktop generico da scrivere nel file `/etc/fstab` è :{{{ noatime,compress=zstd:1,autodefrag |
L'opzione di montaggio consigliata per i [[https://it.wikipedia.org/wiki/Unit%C3%A0_di_memoria_a_stato_solido|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 [[https://it.wikipedia.org/wiki/Disco_rigido|hard disk]] per uso desktop generico da scrivere nel file `/etc/fstab` è :{{{ noatime,autodefrag,compress=zstd:1 |
Linea 200: | Linea 219: |
= Riparare il '''filesystem''' = In caso di problemi col filesystem, evitare di dare comandi a caso ma seguire attentamente le istruzioni dalla wiki di [[https://en.opensuse.org/SDB:BTRFS#How_to_repair_a_broken.2Funmountable_btrfs_filesystem| OpenSUSE]] (in inglese). {{{#!wiki note [[https://www.suse.com|SUSE]] è il maggior contributore al progetto '''Btrfs'''. }}} ---------- = Strumento Scrub = '''Scrub''' è lo strumento per verificare il [[https://it.wikipedia.org/wiki/Checksum|checksum]] dei dati e metadati e cerca di ripararli automaticamente se c'è una ridondanza (raid 1, dup ecc.). È consigliato un controllo periodico, sul come eseguire il suddetto leggere la sezione [[#scrub|Manutenzione]]. Per approfondire l'argomento leggere la [[https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-scrub|relativa guida]] (in inglese). = Strumento Balance = '''Balance''' è lo strumento che serve a liberare spazio sul '''filesystem''' in presenza di carichi di lavoro pesanti. Generalmente per un uso desktop con disco singolo non c'è bisogno di fare un bilanciamento periodico. Utile invece in caso di cambio disco o livello raid per distribuire i gruppi di blocchi su tutti i dispositivi, in modo che corrispondano ai vincoli definiti dai rispettivi profili. Per approfondire l'argomento leggere la [[https://btrfs.wiki.kernel.org/index.php/Manpage/btrfs-balance|relativa guida]] (in inglese). <<Anchor(scrub)>> |
= Riparare il filesystem = Consultare la [[Hardware/DispositiviPartizioni/Btrfs/Riparazione|guida dedicata]]. ---------- |
Linea 231: | Linea 227: |
Per eseguire la manutenzione periodica di '''balance''' e '''scrub''' [[AmministrazioneSistema/InstallareProgrammi|installare]] il pacchetto [[apt://btrfsmaintenance|btrfsmaintenance]]. __Non abilitare__ '''trim''' (poiché viene abilitato in automatico su '''Ubuntu''' tramite ''service systemd'' quando rileva un disco '''[[https://it.wikipedia.org/wiki/Unit%C3%A0_di_memoria_a_stato_solido|SSD/NVME]]''') e ('''defrag''' poiché rompe il collegamento con gli '''snapshot''' occupando tutto lo spazio sul disco). Un buon compromesso è l'opzione di montaggio '''autodefrag'''. {{{#!wiki note '''autodefrag''' abilita la deframmentazione automatica dei file. Se abilitato, piccole scritture casuali in file, 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. }}} __Non abilitare__ la manutenzione se non si ha un carico di lavoro pesante, o si usa un disco singolo (no raid), principalmente questo è pensato per server dove si ha un carico di lavoro pesante. Per uso desktop il consiglio è di non abilitarlo. |
Per eseguire la manutenzione periodica [[AmministrazioneSistema/InstallareProgrammi|installare]] il pacchetto [[apt://btrfsmaintenance|btrfsmaintenance]]. '''Trim''': Su Ubuntu viene abilitato in automatico tramite timer systemd quando rileva un '''[[https://it.wikipedia.org/wiki/Unit%C3%A0_di_memoria_a_stato_solido|disco a stato solido]]'''. {{{#!wiki note Dal kernel Linux 6.2 al rilevamento di un disco a stato solito verrà abilitato [[https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git/commit/?h=for-next&id=4d542835e8d1e43282c83c1a0395b209bdadd475|"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. {{{#!wiki note 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. {{{#!wiki note 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. {{{#!wiki note 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. }}} |
Linea 250: | Linea 261: |
0. Abilitare il timer per il '''defrag''', di default impostato mensilmente:{{{ sudo systemctl enable btrfs-defrag.timer }}} |
|
Linea 253: | Linea 267: |
{{{#!wiki note Durante l'esecuzione di '''balance''' potreste notare un rallentamento per il carico IO generato dal bilanciamento. }}} |
|
Linea 261: | Linea 272: |
= Btrfs send receive = | <<Anchor(send|receive)>> = Btrfs send | receive = |
Linea 265: | Linea 277: |
'''Atomic COW Snapshots''', poiché gli '''snapshot''' sono atomici, quando viene ripristinato uno '''snapshot''', questo appare alle applicazioni come se si fosse verificata una perdita di potenza mentre il '''filesystem''' è tornato a uno stato precedente. Pertanto è possibile eseguire il backup dei database senza arrestarli in anticipo. Trasferimento incrementale dello '''snapshot''', determinazione dei flussi più 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 [[AmministrazioneSistema/BackupDelSistema/Rsync|rsync]], specialmente su file system di grandi dimensioni. Per approfondire l'argomento leggere la [[https://btrfs.wiki.kernel.org/index.php/Incremental_Backup|relativa guida]] (in inglese). ---------- <<Anchor(ottimo)>> = Ottimizzazione subvolume su Ubuntu = Creare vari subvolumi può portare ad alcuni vantaggi: * Possibilità di escluderli dagli '''snapshot''' (ad esempio sulla cartella di sistema `/var/cache` del subvolume '''@''', ovvero `/@/var/cache`, si crea un subvolume della cartella `/var/cache`, che viene esclusa dagli '''snapshot''' del subvolume di sistema '''@''' quando usiamo strumenti come '''[[AmministrazioneSistema/BackupDelSistema/Timeshift|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''' (come unico requisito per usarlo è che la destinazione sia in '''Btrfs'''). |
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 [[https://btrfs.readthedocs.io/en/latest/Send-receive.html|relativa guida (in inglese)]] == Backup subvolume == {{{#!wiki note Per inviare lo snapshot di un subvolume, questo deve essere in sola lettura, la destinazione deve essere una partizione Btrfs. }}} |
Linea 288: | Linea 295: |
`/dev/sda2 on / type btrfs (rw,noatime,compress=zstd:1,ssd,autodefrag,subvolid=983,subvol=/@)`<<BR>> `/dev/sda2 on /home type btrfs (rw,noatime,compress=zstd:1,ssd,autodefrag,subvolid=257,subvol=/@home)`<<BR>> }}} == Subvolume cartella /tmp == 0. Montare la radice su '''/mnt''' (la cartella montata è di esempio, si può scegliere o creare altre cartelle per il montaggio):{{{ |
`/dev/sda2 on / type btrfs (rw,noatime,compress=zstd:1,ssd,subvolid=983,subvol=/@)`<<BR>> `/dev/sda2 on /home type btrfs (rw,noatime,compress=zstd:1,ssd,subvolid=257,subvol=/@home)`<<BR>> }}} 0. Montare la radice su '''/mnt'''(La cartella montata è di esempio, si può scegliere o creare altre cartelle per il montaggio):{{{ |
Linea 297: | Linea 302: |
0. Creare il subvolume della cartella:{{{ sudo btrfs subvolume create /mnt/@tmp |
0. Creare lo snapshot di sola lettura con l'opzione '''-r''' di un subvolume, in questo esempio è /home:{{{ sudo btrfs subvolume snapshot -r /home /mnt/home_snapshot1 }}} 0. Inviare lo snapshot sul disco di backup:{{{ sudo btrfs send /mnt/home_snapshot1 | sudo btrfs receive /percorso/disco/backup/ }}} 0. Creare un secondo snapshot per inviare la differenza (incrementale):{{{ sudo btrfs subvolume snapshot -r /home /mnt/home_snapshot2 }}} 0. Inviare solo la differenza tra lo snapshot '''home_snapshot1''' e '''home_snapshot2''':{{{ sudo btrfs send -p /mnt/home_snapshot1 /mnt/home_snapshot2 | sudo btrfs receive /percorso/disco/backup/ }}} 0. Eliminare il primo snapshot e creare un terzo snapshot, per inviare la differenza del penultimo snapshot e l'ultimo:{{{ sudo btrfs subvolume delete /mnt/home_snapshot1 sudo btrfs subvolume snapshot -r /home /mnt/home_snapshot3 }}} 0. Inviare solo la differenza tra lo snapshot '''home_snapshot2''' e '''home_snapshot3''':{{{ sudo btrfs send -p /mnt/home_snapshot2 /mnt/home_snapshot3 | sudo btrfs receive /percorso/disco/backup/ }}} {{{#!wiki note Al ripristino di un subvolume montato, richiede un riavvio o un remount per applicare il ripristino. }}} 0. Ripristino di uno snapshot dal backup:{{{ sudo btrfs send /percorso/disco/backup/home_snapshot3 | btrfs receive /mnt/ }}} 0. Riportare il subvolume in lettura e scrittura:{{{ sudo btrfs property set -f /mnt/home_snapshot3 ro false }}} 0. Rinominare il subvolume attuale, nel caso della home:{{{ sudo mv /mnt/@home /mnt/@home_backup }}} 0. Rinominare lo snapshot, nel caso della home rinominarlo nel subvolume precedente:{{{ sudo mv /mnt/home_snapshot3 /mnt/@home }}} ---------- <<Anchor(ottimo)>> = Ottimizzazione subvolume su Ubuntu = Creare vari subvolumi può portare ad alcuni vantaggi: * Esclusione dagli '''snapshot''' quando usiamo strumenti come '''[[AmministrazioneSistema/BackupDelSistema/Timeshift|timeshift]]'''). * Disabilitare '''COW''', settare 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''' (come unico requisito è Btrfs come filesystem sul dispositivo di destinazione). {{{#!wiki note Per individuare la lettera e il numero di partizione del '''filesystem''' radice, digitare nel [[AmministrazioneSistema/Terminale|terminale]]:<<BR>> `mount -t btrfs`<<BR>> L'output sarà del tipo:<<BR>> `/dev/sda2 on / type btrfs (rw,noatime,compress=zstd:1,ssd,subvolid=983,subvol=/@)`<<BR>> `/dev/sda2 on /home type btrfs (rw,noatime,compress=zstd:1,ssd,subvolid=257,subvol=/@home)`<<BR>> }}} == Subvolume cartella /var/tmp == 0. 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 }}} 0. Creare subvolume della cartella:{{{ sudo btrfs subvolume create /mnt/@vartmp |
Linea 301: | Linea 367: |
sudo chmod 1777 /mnt/@tmp }}} 0. Disattivare il '''COW''' sul subvolume:{{{ sudo chattr +C /mnt/@tmp |
sudo chmod 1777 /mnt/@vartmp |
Linea 307: | Linea 370: |
sudo cp -a /mnt/@/tmp/* /mnt/@tmp/ }}} 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/fstab` e scriverci le opzioni di montaggio:{{{ UUID=UUID /tmp btrfs noatime,autodefrag,subvol=@tmp |
sudo cp -a /mnt/@/var/tmp/* /mnt/@vartmp/ }}} 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/fstab` e scriverci le opzioni di montaggio:{{{ UUID=UUID /var/tmp btrfs noatime,subvol=@vartmp |
Linea 317: | Linea 380: |
== Subvolume cartella /var/tmp == | == Subvolume cartella /var/cache == |
Linea 323: | Linea 386: |
sudo btrfs subvolume create /mnt/@vartmp }}} 0. Impostare i permessi della cartella tramite il [[https://it.wikipedia.org/wiki/Sticky|bit sticky]]:{{{ sudo chmod 1777 /mnt/@vartmp }}} 0. Disattivare il '''COW''' sul subvolume:{{{ sudo chattr +C /mnt/@vartmp |
sudo btrfs subvolume create /mnt/@varcache |
Linea 332: | Linea 389: |
sudo cp -a /mnt/@/var/tmp/* /mnt/@vartmp/ }}} 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/fstab` e scriverci le opzioni di montaggio:{{{ UUID=UUID /var/tmp btrfs noatime,autodefrag,subvol=@vartmp |
sudo cp -a /mnt/@/var/cache/* /mnt/@varcache/ }}} 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/fstab` e scriverci le opzioni di montaggio:{{{:{{{ UUID=UUID /var/cache btrfs noatime,subvol=@varcache |
Linea 342: | Linea 399: |
== Subvolume cartella /var/cache == | == Subvolume cartella /var/log == |
Linea 348: | Linea 405: |
sudo btrfs subvolume create /mnt/@varcache }}} 0. Disattivare il '''COW''' sul subvolume:{{{ sudo chattr +C /mnt/@varcache |
sudo btrfs subvolume create /mnt/@varlog |
Linea 354: | Linea 408: |
sudo cp -a /mnt/@/var/cache/* /mnt/@varcache/ }}} 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/fstab` e scriverci le opzioni di montaggio:{{{:{{{ UUID=UUID /var/cache btrfs noatime,autodefrag,subvol=@varcache |
sudo cp -a /mnt/@/var/log/* /mnt/@varlog/ }}} 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/fstab` e scriverci le opzioni di montaggio:{{{ UUID=UUID /var/log btrfs noatime,compress=zstd:1,subvol=@varlog |
Linea 364: | Linea 418: |
== Subvolume cartella /var/log == | == Subvolume flatpak == È utile in caso di ripristino di sistema da uno '''snapshot''', poiché le applicazioni '''flatpak''' non vengono ripristinate. |
Linea 370: | Linea 426: |
sudo btrfs subvolume create /mnt/@varlog | sudo btrfs subvolume create /mnt/@varlibflatpak |
Linea 373: | Linea 429: |
sudo cp -a /mnt/@/var/log/* /mnt/@varlog/ | sudo cp -a /mnt/@/var/lib/flatpak/* /mnt/@varlibflatpak/ |
Linea 376: | Linea 432: |
UUID=UUID /var/log btrfs noatime,compress=zstd:1,autodefrag,subvol=@varlog | UUID=UUID /var/lib/flatpak btrfs noatime,compress=zstd:1,subvol=@varlibflatpak |
Linea 383: | Linea 439: |
== Subvolume flatpak == È utile in caso di ripristino di sistema da uno '''snapshot''', poiché le applicazioni '''flatpak''' non vengono ripristinate. |
== Subvolume VM gestite da VirtManager == |
Linea 391: | Linea 445: |
sudo btrfs subvolume create /mnt/@varlibflatpak }}} 0. Copiare il contenuto della cartella nel subvolume:{{{ sudo cp -a /mnt/@/var/lib/flatpak/* /mnt/@varlibflatpak/ }}} 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/fstab` e scriverci le opzioni di montaggio:{{{ UUID=UUID /var/lib/flatpak btrfs noatime,compress=zstd:1,autodefrag,subvol=@varlibflatpak }}} 0. Fare clic su '''Ctrl+S''' per salvare e su '''Ctrl+Q''' per chiudere l'editor. 0. Smontare il filesystem:{{{ sudo umount /mnt }}} == Subvolume immagini di VirtManager == 0. 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 }}} 0. Creare subvolume della cartella:{{{ |
|
Linea 416: | Linea 451: |
{{{#!wiki important Non disattivare COW se si utilizza una configurazione di mirroring (raid1, raid1cN, raid10, ecc.). Per ulteriore dettagli: https://github.com/kdave/btrfs-progs/issues/481 }}} |
|
Linea 424: | Linea 463: |
UUID=UUID /var/lib/libvirt/images/ btrfs noatime,autodefrag,subvol=@varlibvirt | UUID=UUID /var/lib/libvirt/images/ btrfs noatime,subvol=@varlibvirt |
Linea 464: | Linea 503: |
sudo btrfs '''filesystem''' usage / }}} | sudo btrfs filesystem usage / }}} |
Linea 477: | Linea 516: |
btrfs filesystem defragment -c <algoritmo> | sudo btrfs filesystem defragment -c <algoritmo> /percorso/cartella |
Linea 483: | Linea 522: |
btrfs property set <file> compression <zlib|lzo|zstd> | sudo btrfs property set <file> compression <zlib|lzo|zstd> |
Linea 490: | Linea 529: |
btrfs property set <file> compression none | sudo btrfs property set <file> compression none |
Linea 494: | Linea 533: |
= Risoluzione dei problemi = == Mancato funzionamento del comando (p)locate == A causa del bug <<Bug(ubuntu 1968190)>>, la ricerca di file, cartelle ed altro nel sistema, tramite il comando [[AmministrazioneSistema/ComandiBase#locate|(p)locate]], non darà esito. Per risolvere eseguire la seguente procedura. 0. Aprire con i [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]] e con un [[Ufficio/EditorDiTesto|editor di testo]] il file `/etc/updatedb.conf`. 0. Modificare la stringa `PRUNE_BIND_MOUNTS = “yes”'` in `PRUNE_BIND_MOUNTS = “no”`. 0. Salvare e chiudere il file. 0. Aggiornare il database digitando nel [[AmministrazioneSistema/Terminale|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 '''[[https://community.kde.org/Baloo|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'''. {{{#!wiki note 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.}}} |
|
Linea 496: | Linea 561: |
* [[https://btrfs.wiki.kernel.org/index.php/Main_Page|Sito ufficiale]] | * [[https://btrfs.readthedocs.io/en/latest/|Sito ufficiale]] |
Indice
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à:
Snapshot: offre la possibilità di creare istantanee per ogni subvolume, inizialmente non occupando spazio, con strumenti già esistenti come Timeshift e un facile ripristino del sistema in caso di problemi.
Compressione: possibilità di abilitare la compressione trasparente zlib|lzo|zstd utile al risparmio di spazio a incrementare la durata dell'hardware, in alcuni casi a migliorare le prestazioni.
Checksumming su dati e metadati: garantisce l'integrità dei dati e verificato ad ogni lettura e scrittura, possibilità di avviare scrub per una verifica su tutti i dati e metadati.
Gestione multi disco: possibilità di aumentare lo spazio a disposizione aggiungendo un disco al filesystem, convertire a sistema montato da single a raid1, ecc.
Zoned Storage: Dal kernel 5.12 Btrfs supporta la modalità a zone. Questa modalità viene abilitata sugli hard disk SMR e sui dischi a stato solido NVMe ZNS (NVMe Zoned Namespaces).
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.
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
Spostarsi nella cartella dove sono stati salvati i pacchetti scaricati.
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.
Per individuare la lettera e il numero di partizione del filesystem radice, digitare nel terminale:
mount -t btrfs
L'output sarà del tipo:
/dev/sda2 on / type btrfs (rw,noatime,compress=zstd:1,ssd,autodefrag,subvolid=983,subvol=/@)
/dev/sda2 on /home type btrfs (rw,noatime,compress=zstd:1,ssd,autodefrag,subvolid=257,subvol=/@home)
Montare la radice su /mnt:
sudo mount -t btrfs -o noatime,compress=zstd,autodefrag /dev/sda2 /mnt
Creare un subvolume:
sudo btrfs subvolume create /mnt/<nomesubvolume>
Listare i subvolumi:
sudo btrfs subvolume list -t /mnt
Eliminare un subvolume:
sudo btrfs subvolume delete /mnt/<nomesubvolume>
Montaggio di un subvolume:
sudo mount -t btrfs -o subvol=<nomesubvolume> /dev/sda2 /mnt
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.
Creare un subvolume:
sudo btrfs subvolume create /percorso/nomesubvolume
Creare un subvolume sulla home dell'utente:
btrfs subvolume create /home/nomeutente/nomesubvolume
Listare i subvolumi:
sudo btrfs subvolume list -t /
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
lzo non supporta nessun livello di compressione su btrfs.
zlib supporta i livelli di compressione da 1 a 9, predefinito è 3.
zstd supporta i livelli di compressione da 1 a 15 come da seguente tabella, predefinito è 3.
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
Comprimere un subvolume con zstd:
sudo btrfs filesystem defragment -r -v -czstd /mnt/@subvolume
Comprimere un file o cartella con zstd:
sudo btrfs filesystem defragment -r -v -czstd /cartella
Abilita la compressione su file, cartella o subvolume in modo permanente:
sudo btrfs property set /cartella compression zstd
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.
Abilitare il timer per aggiornare la configurazione all'avvio del sistema (consigliato):
sudo systemctl enable btrfsmaintenance-refresh.service
Abilitare il timer per balance, di default impostato settimanalmente:
sudo systemctl enable btrfs-balance.timer
Abilitare il timer per scrub, di default impostato mensilmente:
sudo systemctl enable btrfs-scrub.timer
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
Per inviare lo snapshot di un subvolume, questo deve essere in sola lettura, la destinazione deve essere una partizione Btrfs.
Per individuare la lettera e il numero di partizione del filesystem radice, digitare nel terminale:
mount -t btrfs
L'output sarà del tipo:
/dev/sda2 on / type btrfs (rw,noatime,compress=zstd:1,ssd,subvolid=983,subvol=/@)
/dev/sda2 on /home type btrfs (rw,noatime,compress=zstd:1,ssd,subvolid=257,subvol=/@home)
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
Creare lo snapshot di sola lettura con l'opzione -r di un subvolume, in questo esempio è /home:
sudo btrfs subvolume snapshot -r /home /mnt/home_snapshot1
Inviare lo snapshot sul disco di backup:
sudo btrfs send /mnt/home_snapshot1 | sudo btrfs receive /percorso/disco/backup/
Creare un secondo snapshot per inviare la differenza (incrementale):
sudo btrfs subvolume snapshot -r /home /mnt/home_snapshot2
Inviare solo la differenza tra lo snapshot home_snapshot1 e home_snapshot2:
sudo btrfs send -p /mnt/home_snapshot1 /mnt/home_snapshot2 | sudo btrfs receive /percorso/disco/backup/
Eliminare il primo snapshot e creare un terzo snapshot, per inviare la differenza del penultimo snapshot e l'ultimo:
sudo btrfs subvolume delete /mnt/home_snapshot1 sudo btrfs subvolume snapshot -r /home /mnt/home_snapshot3
Inviare solo la differenza tra lo snapshot home_snapshot2 e home_snapshot3:
sudo btrfs send -p /mnt/home_snapshot2 /mnt/home_snapshot3 | sudo btrfs receive /percorso/disco/backup/
Al ripristino di un subvolume montato, richiede un riavvio o un remount per applicare il ripristino.
Ripristino di uno snapshot dal backup:
sudo btrfs send /percorso/disco/backup/home_snapshot3 | btrfs receive /mnt/
Riportare il subvolume in lettura e scrittura:
sudo btrfs property set -f /mnt/home_snapshot3 ro false
Rinominare il subvolume attuale, nel caso della home:
sudo mv /mnt/@home /mnt/@home_backup
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:
Esclusione dagli snapshot quando usiamo strumenti come timeshift).
Disabilitare COW, settare 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 (come unico requisito è Btrfs come filesystem sul dispositivo di destinazione).
Per individuare la lettera e il numero di partizione del filesystem radice, digitare nel terminale:
mount -t btrfs
L'output sarà del tipo:
/dev/sda2 on / type btrfs (rw,noatime,compress=zstd:1,ssd,subvolid=983,subvol=/@)
/dev/sda2 on /home type btrfs (rw,noatime,compress=zstd:1,ssd,subvolid=257,subvol=/@home)
Subvolume cartella /var/tmp
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
Creare subvolume della cartella:
sudo btrfs subvolume create /mnt/@vartmp
Impostare i permessi della cartella tramite il bit sticky:
sudo chmod 1777 /mnt/@vartmp
Copiare il contenuto della cartella nel subvolume:
sudo cp -a /mnt/@/var/tmp/* /mnt/@vartmp/
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
Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.
Smontare il filesystem:
sudo umount /mnt
Subvolume cartella /var/cache
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
Creare subvolume della cartella:
sudo btrfs subvolume create /mnt/@varcache
Copiare il contenuto della cartella nel subvolume:
sudo cp -a /mnt/@/var/cache/* /mnt/@varcache/
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
Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.
Smontare il filesystem:
sudo umount /mnt
Subvolume cartella /var/log
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
Creare subvolume della cartella:
sudo btrfs subvolume create /mnt/@varlog
Copiare il contenuto della cartella nel subvolume:
sudo cp -a /mnt/@/var/log/* /mnt/@varlog/
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
Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.
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.
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
Creare subvolume della cartella:
sudo btrfs subvolume create /mnt/@varlibflatpak
Copiare il contenuto della cartella nel subvolume:
sudo cp -a /mnt/@/var/lib/flatpak/* /mnt/@varlibflatpak/
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
Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.
Smontare il filesystem:
sudo umount /mnt
Subvolume VM gestite da VirtManager
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
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 si utilizza una configurazione di mirroring (raid1, raid1cN, raid10, ecc.). Per ulteriore dettagli: https://github.com/kdave/btrfs-progs/issues/481
Disattivare il COW sul subvolume:
sudo chattr +C /mnt/@varlibvirt
Copiare il contenuto della cartella nel subvolume:
sudo cp -a /mnt/@/var/lib/libvirt/images/* /mnt/@varlibvirt/
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
Fare clic su Ctrl+S per salvare e su Ctrl+Q per chiudere l'editor.
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.
Creare la cartella temporanea:
sudo mkdir /home/utente/boxtmp
Copiare il contenuto della cartella:
sudo cp -a /home/username/.local/share/gnome-boxes/images/* /home/username/boxtmp/
Elimina la cartella /images per creare il subvolume:
sudo rm -r /home/username/.local/share/gnome-boxes/images
Creare subvolume della cartella:
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/
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
Leggere e stampare le statistiche di errore IO del dispositivo:
sudo btrfs device stats /
Mostrare informazioni dettagliate sulle allocazioni interne nei dispositivi:
sudo btrfs device usage /
Mostrare informazioni dettagliate sull'uso del filesystem interno:
sudo btrfs filesystem usage /
FAQ
Alcune risposte alle domande più comuni su Btrfs.
Come funziona la compressione 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 montaggio compress-force=algoritmo. In tal caso, la compressione viene sempre tentata sul file, per poi essere successivamente scartata, con maggior cicli di lavoro per la CPU. Questo non è ottimale e soggetto a ottimizzazioni e ulteriori sviluppi.Cosa succede se abilito la compressione a dei file già scritti?
Solo i file creati, modificati e montati con l'opzione compress=algoritmo verranno compressi. Per applicare la compressione ai file esistenti usare il comando:sudo btrfs filesystem defragment -c <algoritmo> /percorso/cartella
Posso impostare la compressione di un file, cartella o subvolume senza usare l'opzione di montaggio?
Sì, l'utilità chattr supporta l'impostazione dell'attributo del file c, che contrassegna l'inode per comprimere i nuovi dati scritti. Per impostare la proprietà di compressione di un file usare il comando:sudo btrfs property set <file> compression <zlib|lzo|zstd>
Ciò forza la compressione da usare su quel file, cartella o subvolume usando l'algoritmo specificato.Come posso disattivare la compressione?
Per disattivare la compressione usare il comando:sudo btrfs property set <file> compression none
Si noti che la disattivazione comporta un notevole aumento di uso dello spazio sul disco.
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.
Aprire con i privilegi di amministrazione e con un editor di testo il file /etc/updatedb.conf.
Modificare la stringa PRUNE_BIND_MOUNTS = “yes”' in PRUNE_BIND_MOUNTS = “no”.
- Salvare e chiudere il file.
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.