Introduzione al filesystem BTRFS

Introduzione al filesystem BTRFS
BTRFS (B-Tree Filesystem) è un filesystem moderno di copia-on-write (mucca) per Linux. BTRFS mira a implementare molte funzionalità del filesystem avanzate, concentrandosi sulla tolleranza ai guasti, sulla riparazione e sulla facile amministrazione. Il filesystem BTRFS è progettato per supportare il requisito di server di archiviazione ad alte prestazioni e di grandi dimensioni. È adatto per i data center su scala petabyte e gli smartphone cellulari.In questo articolo, discuterò del filesystem BTRFS e delle sue caratteristiche. Quindi iniziamo.

Copia su Write - Cow Filesystem:

BTRFS è un filesystem Copy-on-Write (Cow). In un filesystem di mucca, quando si tenta di modificare i dati sul filesystem, il filesystem copia i dati, modifica i dati e quindi scrive i dati modificati in una diversa posizione gratuita del filesystem.

Il vantaggio principale del filesystem Copy-on-Write (Cow) è che l'estensione dei dati che desidera modificare viene copiata in una posizione diversa, modificata e memorizzata in una misura diversa del filesystem. L'estensione dei dati originale non è modificata. Pertanto, il filesystem BTRFS può eliminare il rischio di corruzione dei dati o aggiornamenti parziali in caso di insufficienza di corrente durante la modifica dei dati poiché i dati originali sono mantenuti invariati.

Il principale svantaggio del filesystem Copy-on-Write (Cow) è che i grandi file tendono a essere frammentati man mano che vengono modificati. Quindi, la deframmentazione è richiesta una volta ogni tanto. Fortunatamente, il filesystem BTRFS supporta la deframmentazione online. Quindi, non è necessario sconvolgere il filesystem per sbloccare un filesystem BTRFS.

Caratteristiche principali del filesystem BTRFS:

Le caratteristiche principali del filesystem BTRFS sono:

i) Archiviazione di file basata su estensione: In una misura del filesystem basato su estensione, l'unità di archiviazione è chiamata estensione. Una misura è un'area contigua di archiviazione riservata a un file. Un file richiede una misura, non importa quanto sia piccolo il file. Per file più grandi (dimensioni del file maggiore della dimensione dell'estensione), saranno richieste più estensioni. Per file più grandi, i metadati verranno utilizzati per tenere traccia delle estensioni che il file sta utilizzando. Nel filesystem BTRFS, i metadati hanno dimensioni significativamente più piccole. I metadati più piccoli migliorano l'efficienza di archiviazione e le prestazioni del filesystem.

ii) Supporto dimensionale enorme: In un filesystem BTRFS, un singolo file può essere di circa 264 byte o 16 EIB (exbibyte) di dimensioni. Non importa quanto sia grande il tuo file, BTRFS può supportarlo.

iii) imballaggio a efficienza spaziale di piccoli file: Normalmente, non importa quanto sia piccolo un file, richiederà un blocco o una misura per archiviare 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 indicizzati con efficienza spaziale: Le directory del filesystem BTRFS sono indicizzate in due modi diversi. Per la ricerca del fileName, viene utilizzata l'indicizzazione basata sulla chiave. Per fare riferimento ai dati, viene utilizzata l'indicizzazione della chiave 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 inodi: È necessario 1 inodo per riferimento 1 file. Molti filesystems (i.e., Ext4) avere un numero fisso di inodi. Quindi, se crei troppi file piccoli, potresti avere molto spazio sul tuo disco, ma non sarai in grado di creare nuovi file. Inoltre, non è possibile aumentare il numero massimo di inodi una volta creato il filesystem.

BTRFS risolve questo problema allocando gli inodi in modo dinamico come sono richiesti. Quindi, puoi creare tutti i file che desideri finché hai spazio su disco gratuito.

vi) Snapshot scrivibili e istantanee di sola lettura: Il filesystem BTRFS supporta le snapshot. Puoi prendere un'istantanea del filesystem corrente, che puoi utilizzare per ripristinare i dati se hai rimosso accidentalmente alcuni file o corrotti alcuni dati.

Per impostazione predefinita, le snapshot BTRFS sono di sola lettura. Una volta che hai preso un'istantanea di sola lettura, non è possibile modificare alcun file/directory in quell'istantanea. In ogni caso, se si desidera modificare qualsiasi file/directory dopo aver preso un'istantanea del tuo filesystem BTRFS esistente, è possibile modificare l'istantanea di sola lettura in un'istantanea scrivibile e modificare qualsiasi file/directory in quella snapshot.

vii) sottovolumi: Un filesystem BTRFS può avere molti sottovolumi. Un sottovolume è un albero binario denominato (b-albero) (o root del filesystem interno/logico) dell'albero root del filesystem esistente (principale) del filesystem BTRFS. Un sub -volume non è un dispositivo a blocchi a sé stante. Ma puoi montare singolarmente i sottovolum BTRFS. Puoi pensare ai sottovolum come spazi dei nomi.

viii) Supporto quota consapevole del subolume: Puoi anche allocare le quote per i sottovolumi. Una volta superata la quota, non sarai in grado di aggiungere nuovi dati al sottovolume. Non avrai bisogno di programmi separati per creare quote di sub -volume BTRFS.

IX) checksums 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 archiviati nel filesystem per verificare automaticamente gli errori del filesystem e le corruzioni dei dati in background.

BTRFS ha supporto per molti altri algoritmi di checksum: XXHASH, SHA256 e BLAKE2B.

x) Compressione: Il filesystem BTRFS supporta la compressione dei file trasparenti. 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 più dispositivo integrato: I filesystem BTRFS hanno supporto Logical Volume Manager (LVM). È possibile aggiungere più dispositivi di archiviazione in un singolo filesystem BTRFS. È inoltre possibile configurare array RAID sul filesystem BTRFS senza bisogno di alcun software aggiuntivo.

Il filesystem BTRFS supporta la striping dei dati, il mirroring dei dati, il mirroring dei dati+il mirroring e le implementazioni a parità singola e doppia.

Striping dei dati: Se sono stati aggiunti più dispositivi di archiviazione nello stesso filesystem BTRFS, BTRFS può archiviare lo stesso file su diversi dispositivi fisici/partizioni. Questo si chiama Striping dei dati. Striping dei dati migliora le prestazioni di lettura/scrittura del filesystem. RAID-0 utilizza ampiamente la funzione di striping dati.

Mirroring dei dati: Se sono stati aggiunti 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 specchio dei dati. RAID-1 utilizza ampiamente la funzione di mirroring dei dati.

Striping dei dati+parità singola: RAID-5 utilizza i dati di striping e parità distribuita singola. Se sono stati aggiunti 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à attraverso i dispositivi di archiviazione. RAID-5 può sostenere un singolo fallimento dell'unità.

Striping dei dati+doppia parità: RAID-6 utilizza i dati a strisce e parità distribuita a doppia distribuzione. Se sono stati aggiunti più dispositivi di archiviazione in un filesystem BTRFS, RAID-6 rimuoverà i dati su più dispositivi di archiviazione e calcolerà e memorizzerà i blocchi di parità doppi attraverso i dispositivi di archiviazione. RAID-6 può sostenere due fallimenti dell'unità. A parte questo, è lo stesso di RAID-5 (Striping Data+singolo parità).

Striping dei dati+Mirroring: RAID-10 utilizza lo striping dei dati e il mirroring dei dati contemporaneamente. RAID-10 richiede un numero pari di dispositivi di archiviazione della stessa dimensione da aggiungere a un singolo filesystem BTRFS. Il numero minimo di dispositivi di archiviazione che è possibile aggiungere un filesystem RAID-10 BTRFS è 4. La metà del dispositivo di archiviazione verrà utilizzata per lo striping dei dati e l'altra metà verrà utilizzata per rispecchiare i dati della prima metà dei dispositivi di archiviazione (dove i dati sono a strisce).

xii) Consapevolezza e ottimizzazioni SSD: Il filesystem BTRFS è consapevole di SSD e ha alcune funzionalità di ottimizzazione SSD. Il filesystem BTRFS ha anche il supporto TRIM/SCARD per i dispositivi di archiviazione SSD.

La funzione di rivestimento può rilevare e contrassegnare le estensioni dei dati che non vengono più utilizzate. Una volta contrassegnati gli estendi, il filesystem BTRFS può pulirli automaticamente in modo che gli altri file possano utilizzare queste estensioni di dati.

La funzione di scarto rimuoverà tutti i dati estendi dell'SSD. Se vuoi vendere il tuo SSD, questa funzione potrebbe tornare utile.

xiii) backup incrementale efficiente: BTRFS supporta il backup incrementale. La prima volta che esegui il backup di un filesystem BTRFS, impiega un'istantanea del filesystem corrente. Quindi, tutti i backup successivi verranno confrontati con la prima istantanea e solo le modifiche verranno memorizzate sul disco. Quindi, tutti i backup successivi impiegheranno meno spazio su disco e i backup saranno più veloci.

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

xv) Deframmentazione del filesystem online: Ho spiegato in precedenza come funziona il filesystem BTRFS Copy-on-Write. I file Larges sono archiviati in più estensioni del filesystem BTRFS. Man mano che si modificano i file di grandi dimensioni, le estensioni che devono essere modificate vengono copiate in diverse estensioni gratuite del filesystem e modificate lì. Pertanto, le estensioni dei dati non modificate sono anche mantenute nel caso in cui sia necessario per il recupero del filesystem. Ciò provoca frammentazione (le estensioni dei dati di un file di grandi dimensioni non saranno continue e saranno sparse sull'intero dispositivo di archiviazione) sul filesystem quando vengono modificati i file di grandi dimensioni. Troppa frammentazione influisce negativamente sul filesystem (rende più lento il filesystem di lettura/scrittura).

Per risolvere questo problema, il filesystem BTRFS supporta la deframmentazione del filesystem online. Con la deframmentazione online, non è necessario smontare il filesystem per sbloccare il filesystem. Puoi mantenere il filesystem e funzionare e ancora lo deframment. La deframmentazione sposterà le estensioni dei file attorno al filesystem per mantenere l'entità dello stesso file di grandi dimensioni possibile. La deframmentazione migliora le prestazioni del filesystem.

xvi) Controllo del filesystem offline: Il filesystem BTRFS ha molti strumenti integrati che è possibile utilizzare per verificare gli errori del filesystem e risolverli. Puoi anche correggere un filesystem BTRFS rotto (che non può essere montato) con questi strumenti.

XVII) Conversione sul posto dei filesystem Ext2/3/4 e Reiserfs esistenti: Il filesystem BTRFS ha un contenuto di utilità BTRFS integrato, che è possibile utilizzare 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 metadati BTRFS e li archivia sul filesystem. Il filesystem mantiene sia i BTRFS che i metadati EXT2/3/4 (o Reiserfs). Il filesystem BTRFS punta sugli stessi blocchi di file utilizzati dai file del filesystem EXT2/3/4 (o ReiserFS). Il filesystem e i blocchi di dati esistenti sono mantenuti intatti in quanto BTRFS è un filesystem Copy-on-Write (Cow). Quando un file viene modificato, il filesystem BTRFS copia i blocchi di dati originali in nuove estensioni gratuite e li modifica lì.

xviii) Dispositivi di seme: Il filesystem BTRFS supporta i dispositivi di seme. È possibile creare un filesystem di sola lettura e utilizzarlo come modello (dispositivo seed) per creare altri filesystem BTRFS. Il vantaggio di farlo è che solo i dati modificati saranno scritti nel nuovo filesystem. I dati originali (sui dispositivi di seme) saranno mantenuti così com'è. Questa funzione può essere utilizzata per salvare molto spazio su disco e ridondanza dei dati.

xix) Invia/ricevi le modifiche del sottovolume: Il filesystem BTRFS può inviare/ricevere modifiche alvolume. 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 del sottovolume. Questa funzione viene utilizzata per eseguire backup incrementali del filesystem BTRFS a livello locale o remoto. Questo metodo è più veloce ed efficiente di rsync.

xx) Batch/fuori dalla band Deduplicazione: Il filesystem BTRFS supporta il batch o la deduplicazione fuori banda. La duplicazione avviene dopo che un file è stato scritto nel filesystem. Il filesystem BTRFS scansiona attivamente l'intero filesstem per estensioni identiche e mantiene solo una copia di ciascuna misura (rimuove estensioni ridondanti/duplicate). Lo stesso principio di copia-su-write (mucca) viene utilizzato per questo compito. La deduplicazione risparmia molti spazi per discorsi.

xxi) Supporto Swapfile: Se stai usando Linux Kernel 5.0 o più recenti, è possibile creare file swaps sul filesystem BTRFS.

Esistono alcune limitazioni di Swapfile in un filesystem BTRFS:

- Lo swapfile deve essere assegnato come nocow (non copia su write)

- Lo swapfile non deve avere alcuna compressione abilitata.

Stabilità del filesystem BTRFS:

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

Se si desidera utilizzare il filesystem BTRFS sul tuo server di produzione, controlla lo stato ufficiale - pagina wiki BTRFS per scoprire se le funzionalità del filesystem di cui hai bisogno sono abbastanza stabili per te o no. Inoltre, assicurati di eseguire alcuni test prima della distribuzione finale del filesystem BTRFS e ricordati di mantenere 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 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 abbastanza stabili, può sostituire il filesystem EXT4.

Riferimenti:

[1] btrfs wiki - https: // btrfs.wiki.kernel.org/indice.php/main_page
[2] BTRFS - La documentazione dell'albero del kernel - https: // www.kernel.org/doc/html/ultimo/filesystems/btrfs.html
[3] BTRFS - Glossario - https: // btrfs.wiki.kernel.org/indice.php/glossario
[4] Caratteristiche del filesystem "BTRFS" - https: // www.TheGeekdiary.com/caratteristiche di brfs-filesystem/
[5] Confronto di filesystems - https: // en.Wikipedia.org/wiki/confronto_of_file_systems
[6] BTRFS Design - BTRFS Wiki - https: // btrfs.wiki.kernel.org/indice.php/btrfs_design
[7] Forse a corto di inodi potrebbe essere preso "più seriamente"? - https: // lwn.Net/Articoli/724522/
[8] Realizzare una snapshot di sola lettura BTRFS scrivibile - https: // markandruth.co.Regno Unito/2016/12/29/Making-A-Btrfs-Read-Snapshot-Writable-Writable
[9] Striping di dati - https: // en.Wikipedia.org/wiki/data_striping
[10] FAQ - BTRFS Wiki - https: // btrfs.wiki.kernel.org/indice.PHP/FAQ
[11] Livelli RAID standard - https: // en.Wikipedia.org/wiki/standard_raid_levels
[12] trim (calcolo) - https: // en.Wikipedia.org/wiki/trim_ (calcolo)
[13] Solid State Drive - Archwiki - https: // wiki.Archlinux.org/indice.PHP/SOLID_STATE_DRIVE#TRIM
[14] BTRFSCK - BTRFS Wiki - https: // btrfs.wiki.kernel.org/indice.PHP/BTRFSCK
[15] Conversione da Ext3/4 e Reiserfs - BTRFS Wiki - https: // btrfs.wiki.kernel.org/indice.php/conversion_from_ext3
[16] Backup incrementale - BTRFS Wiki - https: // btrfs.wiki.kernel.org/indice.php/incremental_backup
[17] Deduplication - BTRFS Wiki - https: // btrfs.wiki.kernel.org/indice.PHP/deduplicazione
[18] Stato - BTRFS Wiki - https: // btrfs.wiki.kernel.org/indice.PHP/STATO