Btrfs

Introduzione al filesystem Btrfs

Introduzione al filesystem Btrfs
Btrfs (B-Tree Filesystem) è un moderno filesystem copy-on-write (CoW) per Linux. Btrfs mira a implementare molte funzionalità avanzate del filesystem concentrandosi sulla tolleranza ai guasti, la riparazione e la facilità di amministrazione. Il filesystem btrfs è progettato per supportare i requisiti di alte prestazioni e server di archiviazione di grandi dimensioni. È adatto per data center di dimensioni petabyte e per smartphone cellulari.In questo articolo parlerò del filesystem Btrfs e delle sue caratteristiche. Quindi iniziamo.

Copia in scrittura - Filesystem CoW:

Btrfs è un filesystem copy-on-write (CoW). In un filesystem CoW, quando si tenta di modificare i dati sul filesystem, il filesystem copia i dati, modifica i dati e quindi riscrive i dati modificati in una diversa posizione libera del filesystem.

Il vantaggio principale del filesystem Copy-on-Write (CoW) è che l'estensione dei dati che si desidera modificare viene copiata in una posizione diversa, modificata e archiviata in una diversa estensione del filesystem. L'estensione dei dati originali non viene modificata. Quindi, il filesystem btrfs può eliminare il rischio di corruzione dei dati o aggiornamento parziale in caso di interruzione di corrente durante la modifica dei dati poiché i dati originali vengono mantenuti invariati.

Il principale svantaggio del filesystem Copy-on-Write (CoW) è che i file di grandi dimensioni tendono a frammentarsi man mano che vengono modificati. Quindi, la deframmentazione è necessaria una volta ogni tanto. Fortunatamente, il filesystem btrfs supporta la deframmentazione online. Quindi, non è necessario smontare il filesystem per deframmentare un filesystem btrfs.

Caratteristiche principali del filesystem Btrfs:

Le caratteristiche principali del filesystem Btrfs sono:

i) Archiviazione di file basata sull'estensione: In un filesystem basato sull'estensione, l'unità di archiviazione è chiamata estensione. Un'estensione è un'area di archiviazione contigua riservata a un file. Un file richiede un'estensione, non importa quanto piccolo sia il file. Per file più grandi (dimensioni del file maggiori della dimensione dell'estensione), saranno necessarie più estensioni. Per file più grandi, verranno utilizzati i metadati per tenere traccia delle estensioni utilizzate dal file file. Nel filesystem Btrfs, i metadati sono di dimensioni notevolmente inferiori smaller. Metadati più piccoli migliorano l'efficienza di archiviazione e le prestazioni del filesystem.

ii) Enorme supporto per le dimensioni del file: In un filesystem Btrfs, un singolo file può essere di circa 264 byte o 16 EiB (exbibyte) di dimensione. Non importa quanto grande diventi il ​​tuo file, Btrfs può supportarlo.

iii) Imballaggio salvaspazio di piccoli file: Normalmente, non importa quanto piccolo sia un file, richiederà un blocco o un'estensione per memorizzare il file. Questo spreca molto spazio su disco. Per risolvere questo problema, il filesystem Btrfs incorpora file più piccoli nei metadati per archiviare file più piccoli in modo efficiente.

iv) Directory indicizzate efficienti in termini di spazio: Le directory del filesystem btrfs sono indicizzate in due modi diversi. Per la ricerca del nome del file, viene utilizzata l'indicizzazione basata su chiave. Per fare riferimento ai dati, viene utilizzata l'indicizzazione delle chiavi basata su inode. L'indicizzazione a due livelli migliora le prestazioni di ricerca di directory/file e riduce i requisiti di archiviazione per gli indici.

v) Allocazione dinamica degli inode: Hai bisogno di 1 inode per fare riferimento a 1 file. Molti filesystem (i.e., Ext4) hanno un numero fisso di inode. Quindi, se crei troppi file di piccole dimensioni, potresti avere molto spazio sul disco, ma non sarai in grado di creare nuovi file. Inoltre, non puoi aumentare il numero massimo di inode una volta creato il filesystem.

Btrfs risolve questo problema allocando gli inode in modo dinamico quando sono richiesti. Quindi, puoi creare tutti i file che vuoi finché hai spazio libero su disco.

vi) Snapshot scrivibili e snapshot di sola lettura: Il filesystem Btrfs supporta gli snapshot. Puoi scattare un'istantanea del filesystem corrente, che puoi utilizzare per ripristinare i tuoi dati se hai accidentalmente rimosso alcuni file o danneggiato alcuni dati.

Per impostazione predefinita, le istantanee btrfs sono di sola lettura. Dopo aver scattato un'istantanea di sola lettura, non puoi modificare nessun file/directory in quell'istantanea. In ogni caso, se vuoi cambiare qualsiasi file/directory dopo aver scattato un'istantanea del tuo filesystem Btrfs esistente, puoi cambiare l'istantanea di sola lettura in un'istantanea scrivibile e modificare qualsiasi file/directory in quell'istantanea.

vii) Sottovolumi: Un filesystem Btrfs può avere molti sottovolumi. Un sottovolume è un albero binario denominato (B-tree) (o radice del filesystem interno/logico) dell'albero radice del filesystem esistente (principale) del filesystem btrfs. Un sottovolume non è un dispositivo a blocchi a sé stante. Ma puoi montare i sottovolumi Btrfs individualmente. Puoi pensare ai sottovolumi come spazi dei nomi.

viii) Supporto della quota consapevole del sottovolume: Puoi assegnare quote anche per i sottovolumi. Una volta superata la quota, non potrai aggiungere nuovi dati al sottovolume. Non avrai bisogno di programmi separati per creare quote di sottovolumi Btrfs.

ix) Checksum su dati e metadati: Per evitare la corruzione dei dati, Btrfs utilizza algoritmi di checksum crc32c per i dati e i metadati del filesystem per impostazione predefinita. I checksum sono memorizzati nel filesystem per controllare automaticamente gli errori del filesystem e il danneggiamento dei dati in background.

Btrfs supporta molti altri algoritmi di checksum: xxhash, sha256 e blake2b.

x) Compressione: Il file system Btrfs supporta la compressione dei file trasparente. La compressione e la decompressione dei file in un filesystem btrfs vengono eseguite automaticamente in background.

Btrfs supporta 3 algoritmi di compressione: ZLIB, LZO e ZSTD.

ZLIB è il metodo di compressione predefinito del filesystem btrfs.

xi) Supporto integrato per più dispositivi: I filesystem Btrfs hanno il supporto integrato per il gestore di volumi logici (LVM). Puoi aggiungere più dispositivi di archiviazione in un singolo filesystem btrfs. Puoi anche configurare array RAID sul filesystem btrfs senza bisogno di alcun software aggiuntivo.

Il filesystem Btrfs supporta lo striping dei dati, il mirroring dei dati, lo striping dei dati+mirroring e le implementazioni di parità singola e doppia.

Striscia di dati: Se hai aggiunto più dispositivi di archiviazione nello stesso filesystem btrfs, btrfs può archiviare lo stesso file su diversi dispositivi/partizioni fisiche. Questo si chiama striping dei dati. Lo striping dei dati migliora le prestazioni di lettura/scrittura del filesystem. RAID-0 utilizza ampiamente la funzionalità di striping dei dati.

Mirroring dei dati: Se hai aggiunto più dispositivi di archiviazione nello stesso filesystem btrfs, tutti i dati scritti su un dispositivo di archiviazione verranno scritti su tutti gli altri dispositivi di archiviazione. Questo si chiama mirroring dei dati. RAID-1 utilizza ampiamente la funzione di mirroring dei dati.

Striping dati+parità singola: RAID-5 utilizza lo striping dei dati e la parità distribuita singola. Se hai aggiunto più dispositivi di archiviazione in un filesystem btrfs, RAID-5 rimuoverà i dati su più dispositivi di archiviazione e calcolerà e memorizzerà i blocchi di parità tra i dispositivi di archiviazione. RAID-5 può sostenere un guasto di una singola unità.

Striping dati + doppia parità: RAID-6 utilizza lo striping dei dati e la doppia parità distribuita. Se hai aggiunto più dispositivi di archiviazione in un filesystem btrfs, RAID-6 rimuoverà i dati su più dispositivi di archiviazione e calcolerà e memorizzerà blocchi a doppia parità tra i dispositivi di archiviazione. RAID-6 può sostenere due guasti dell'unità. A parte questo, è lo stesso di RAID-5 (striping dati + parità singola).

Striping dati+mirroring: RAID-10 utilizza contemporaneamente lo striping e il mirroring dei dati. RAID-10 richiede l'aggiunta di un numero pari di dispositivi di archiviazione della stessa dimensione a un singolo filesystem btrfs. Il numero minimo di dispositivi di archiviazione che puoi aggiungere su un filesystem btrfs RAID-10 è 4. Metà del dispositivo di archiviazione verrà utilizzata per lo striping dei dati e l'altra metà per il mirroring dei dati della prima metà dei dispositivi di archiviazione (dove i dati sono sottoposti a striping).

xii) Riconoscimento SSD e ottimizzazioni: Il filesystem btrfs è compatibile con SSD e ha alcune funzionalità di ottimizzazione SSD. Il filesystem btrfs ha anche il supporto TRIM/Discard per i dispositivi di archiviazione SSD.

La funzione TRIM può rilevare e contrassegnare le estensioni dei dati che non vengono più utilizzate. Una volta contrassegnate le estensioni, il filesystem btrfs può cancellarle automaticamente in modo che gli altri file possano utilizzare queste estensioni di dati.

La funzione Elimina rimuoverà tutte le estensioni di dati dell'SSD. Se vuoi vendere il tuo SSD, questa funzione potrebbe tornarti utile.

xiii) Backup incrementale efficiente: Btrfs supporta il backup incrementale. La prima volta che si esegue il backup di un filesystem btrfs, viene eseguita un'istantanea del filesystem corrente current. Quindi, eventuali backup successivi verranno confrontati con la prima istantanea e solo le modifiche verranno archiviate sul disco. Quindi, eventuali backup successivi occuperanno meno spazio su disco e i backup saranno più veloci.

xiv) Scrub di sfondo: È un processo del filesystem Btrfs utilizzato per trovare e correggere gli errori sui file che hanno copie ridondanti (più copie) memorizzate nel filesystem Btrfs.

xv) Deframmentazione del file system online: Ho spiegato in precedenza come funziona il filesystem Btrfs Copy-on-Write. I file di grandi dimensioni sono archiviati in più estensioni del filesystem Btrfs. Quando modifichi file di grandi dimensioni, le estensioni che devono essere modificate vengono copiate in diverse estensioni libere del filesystem e lì modificate. Quindi, le estensioni dei dati non modificate vengono mantenute anche nel caso in cui sia necessario per il ripristino del filesystem. Ciò causa la frammentazione (le estensioni dei dati di un file di grandi dimensioni non saranno continue e saranno sparse per l'intero dispositivo di archiviazione) sul filesystem man mano che i file di grandi dimensioni vengono modificati. Troppa frammentazione ha un impatto negativo sul filesystem (rende l'operazione di lettura/scrittura del filesystem più lenta).

Per risolvere questo problema, il filesystem btrfs supporta la deframmentazione del filesystem online. Con la deframmentazione online, non è necessario smontare il filesystem per deframmentare il filesystem. Puoi mantenere il filesystem attivo e funzionante e ancora deframmentarlo. La deframmentazione sposterà le estensioni dei file nel filesystem per mantenere le estensioni dello stesso file di grandi dimensioni il più continue possibile. La deframmentazione migliora le prestazioni del filesystem.

xvi) Controllo del filesystem offline: Il filesystem Btrfs ha molti strumenti integrati che puoi usare per controllare gli errori del filesystem e risolverli. Puoi anche riparare un filesystem Btrfs rotto (che non può essere montato) con questi strumenti.

xvii) Conversione sul posto di filesystem Ext2/3/4 e ReiserFS esistenti: Il filesystem Btrfs ha un'utilità incorporata btrfs-convert, che puoi usare per convertire un filesystem Ext2/3/4 e ReiserFS esistente in un filesystem Btrfs.

Il programma di conversione del filesystem Btrfs legge i metadati di un filesystem Ext2/3/4 (o ReiserFS) esistente, crea i metadati Btrfs e li memorizza nel filesystem. Il filesystem mantiene sia i metadati Btrfs che Ext2/3/4 (o ReiserFS). Il filesystem Btrfs punta agli stessi blocchi di file usati dai file di filesystem Ext2/3/4 (o ReiserFS). Il filesystem esistente e i blocchi di dati vengono mantenuti intatti poiché Btrfs è un filesystem Copy-on-Write (CoW). Quando un file viene modificato, il filesystem Btrfs copia i blocchi di dati originali in nuove estensioni libere e li modifica lì.

xviii) Dispositivi di semina: Il filesystem Btrfs supporta i dispositivi seed. Puoi creare un filesystem di sola lettura e usarlo come modello (seed device) per creare altri filesystem Btrfs. Il vantaggio di farlo è che solo i dati modificati verranno scritti nel nuovo filesystem. I dati originali (sui dispositivi seed) verranno mantenuti così come sono. Questa funzione può essere utilizzata per risparmiare molto spazio su disco e ridondanza dei dati.

xix) Invia/ricevi modifiche ai sottovolumi: Il filesystem btrfs può inviare/ricevere modifiche ai sottovolumi. Il filesystem Btrfs può inviare le modifiche incrementali di un sottovolume a un altro filesystem Btrfs (può anche risiedere in un altro computer) che può ricevere le modifiche al sottovolume. Questa funzione viene utilizzata per eseguire backup incrementali del filesystem Btrfs in locale o in remoto. Questo metodo è più veloce ed efficiente di rsync.

xx) Deduplicazione batch/fuori banda: Il filesystem Btrfs supporta la deduplicazione batch o fuori banda. La duplicazione avviene dopo che un file è stato scritto nel filesystem. Il filesystem Btrfs scansiona attivamente l'intero filesystem alla ricerca di estensioni identiche e conserva solo una copia di ciascuna estensione (rimuove le estensioni ridondanti/duplicate). Per questo compito viene utilizzato lo stesso principio copy-on-write (CoW). La deduplicazione consente di risparmiare molto spazio su disco.

xxi) Supporto per file di scambio: Se stai usando il kernel Linux 5.0 o successivo, puoi creare file di scambio sul filesystem Btrfs.

Ci sono alcune limitazioni di Swapfile in un filesystem Btrfs:

- Lo swapfile deve essere allocato come NoCoW (non copy-on-write)

- Il file di scambio non deve avere alcuna compressione abilitata.

Stabilità del filesystem Btrfs:

Il filesystem Btrfs è attivamente sviluppato dal team Btrfs. La maggior parte delle funzionalità del filesystem sono stabili al momento della stesura di questo articolo. Alcune delle funzionalità avanzate non sono ancora sufficientemente stabili per un ambiente di produzione. Il team Btrfs sta lavorando duramente per risolvere questi problemi di stabilità stability.

Se desideri utilizzare il filesystem Btrfs sul tuo server di produzione, controlla la pagina ufficiale Status - btrfs Wiki per scoprire se le funzionalità del filesystem di cui hai bisogno sono abbastanza stabili per te o meno. Inoltre, assicurati di eseguire alcuni test prima della distribuzione finale del tuo filesystem Btrfs e ricorda di conservare i backup dei tuoi dati importanti. Mantenere il backup è sempre importante per gli ambienti di produzione.

Sostituzione futura del filesystem Ext4:

Il filesystem Btrfs viene sviluppato rapidamente. Il team di sviluppo di Btrfs si preoccupa anche della stabilità del filesystem. Quindi, fanno del loro meglio per renderlo il più stabile possibile durante lo sviluppo del filesystem btrfs. Una volta che il filesystem btrfs è completamente sviluppato e tutte le funzionalità sono sufficientemente stabili, può sostituire il filesystem Ext4.

Riferimenti:

[1] Wiki btrfs - https://btrfs.wiki.kernel.organizzazione/indice.php/Main_Page
[2] BTRFS - La documentazione dell'albero del kernel - https://www.kernel.org/doc/html/latest/filesystems/btrfs.html
[3] BTRFS - Glossario - https://btrfs.wiki.kernel.organizzazione/indice.php/Glossario
[4] Caratteristiche del filesystem “Btrfs” - https://www.thegeekdiary.com/caratteristiche-del-filesystem-btrfs/
[5] Confronto di filesystem - https://en.wikipedia.org/wiki/Confronto_di_file_systems
[6] Progettazione Btrfs - Wiki btrfs - https://btrfs.wiki.kernel.organizzazione/indice.php/Btrfs_design
[7] forse l'esaurimento degli inode potrebbe essere preso "più sul serio"? - https://lwn.netto/Articoli/724522/
[8] Rendere scrivibile uno snapshot di sola lettura Btrfs - https://markandruth.co.uk/2016/12/29/making-a-btrfs-read-only-snapshot-writable
[9] Striping dei dati - https://en.wikipedia.org/wiki/Data_striping
[10] FAQ - wiki di btrfs - https://btrfs.wiki.kernel.organizzazione/indice.php/FAQ
[11] Livelli RAID standard - https://en.wikipedia.org/wiki/Standard_RAID_levels
[12] Trim (informatica) - https://en.wikipedia.org/wiki/Trim_(informatica)
[13] Unità a stato solido - ArchWiki - https://wiki.archlinux.organizzazione/indice.php/Solid_state_drive#TRIM
[14] Btrfsck - Wiki di btrfs - https://btrfs.wiki.kernel.organizzazione/indice.php/Btrfsck
[15] Conversione da Ext3/4 e ReiserFS - Wiki btrfs - https://btrfs.wiki.kernel.organizzazione/indice.php/Conversion_from_Ext3
[16] Backup incrementale - Wiki btrfs - https://btrfs.wiki.kernel.organizzazione/indice.php/Incremental_Backup
[17] Deduplicazione - Wiki btrfs - https://btrfs.wiki.kernel.organizzazione/indice.php/Deduplicazione
[18] Stato - Wiki btrfs - https://btrfs.wiki.kernel.organizzazione/indice.php/Stato

Come mostrare l'overlay OSD in app e giochi Linux a schermo intero
Giocare a giochi a schermo intero o utilizzare app in modalità a schermo intero senza distrazioni può tagliarti fuori dalle informazioni di sistema ri...
Le 5 migliori carte di acquisizione del gioco
Abbiamo tutti visto e amato i giochi in streaming su YouTube. PewDiePie, Jakesepticye e Markiplier sono solo alcuni dei migliori giocatori che hanno g...
Come sviluppare un gioco su Linux
Un decennio fa, non molti utenti Linux avrebbero previsto che il loro sistema operativo preferito un giorno sarebbe diventato una piattaforma di gioco...