Btrfs aggiunge i RAID1C3 e RAID1C4

Torniamo a parlare di Btrfs, il filesystem carico di promesse alla nascita e concorrente di ZFS, il Santo Graal del momento anche su Linux. Ma per prima cosa dobbiamo spiegare, per chi non lo sapesse, cosa vuol dire RAID.

Con RAID (Redundant Array of Independent Disks – insieme ridondante di dischi indipendenti), i dati sono divisi in pezzetti (chiamati chunk) che vengono distribuiti sui vari dischi. Le diverse implementazioni, chiamate livelli, permettono di avere più o meno resilienza dei dati, ovvero poter lavorare in sicurezza con la perdita di uno o più dischi. Il tutto grazie alla ridondanza, ovvero scrivere i dati più volte, al costo di prestazioni e spazio utilizzabile.

  • RAID-0
    I dischi sono usati in parallelo e i dati distribuiti. Permette le migliori prestazioni (si sommano quelle dei singoli dischi), ma – a dispetto dell’acronimo – nessuna ridondanza: alla perdita di un disco, tutto il pool risulta inaccessibile.
  • RAID-1
    I dischi sono usati in parallelo e i dati copiati su tutti i dischi. La velocità di scrittura e la capienza sono pari a quella di un singolo disco, mentre la velocità di lettura è la somma – come nel RAID-0.
    Dato che tutti i dischi contengono gli stessi dati, la resilienza è la più alta: permette la perdita di tutti i dischi meno uno.
  • RAID-5
    Per questa configurazione servono almeno 3 dischi. I dati sono distribuiti tra tutti i dischi tranne uno, che invece conterrà un chunk speciale, quello di parità.
    Sopporta la perdita di un disco, ma le prestazioni sono una via di mezzo tra RAID-0 e RAID-1.
  • RAID-6
    Per questa configurazione servono almeno 4 dischi. Come RAID-5, ma i chunk di parità sono due, quindi sopporta la perdita di due dischi.

Per usare RAID ci si deve affidare ad un software apposito (MD – Multi Disk, in Linux), oppure ad un controller hardware apposito, che garantisce prestazioni superiori.

Una delle funzionalità più apprezzate di ZFS è la possibilità di designare più dispositivi (dischi) a formare un unico dispositivo, chiamato zpool, la cui implementazione ricalca quanto avviene con RAID, ma senza la necessità di hardware o software dedicati, cosa che ne semplifica la gestione.
ZFS implementa per i propri zpool tre livelli di resilienza:

  • RAIDZ-1
    Costituito da almeno 3 dischi, permette di perderne uno. Paragonabile a RAID-5.
  • RAIDZ-2
    Costituito da almeno 4 dischi, permette di perderne due. Paragonabile a RAID-6.
  • RAIDZ-3
    Costituito da almeno 5 dischi, permette di perderne tre.

Anche Btrfs, da buon antagonista, prevede fin dall’origine la stessa possibilità, implementando direttamente al suo interno i vari livelli RAID sopra esposti, ma una delle critiche più forti fatte finora è la non affidabilità dell’implementazione attuale dei livelli RAID-5 e RAID-6.
C’è comunque da fare una precisazione per l’implementazione di RAID-1: la distribuzione dei dati non avviene su tutti i dischi, ma viene scritto lo stesso chunk su due dischi diversi.
Questo permette di lavorare con dischi di dimensione diversa, ma al costo di poter perdere solo un disco. In questo senso quindi si può parlare di RAID1C2: RAID-1 con Copia su 2 dischi.

Solo un paio di anni fa è stato risolto un bug per il RAID di Btrfs che aveva il potenziale di far perdere tutti i dati: esattamente quanto non deve accadere con un filesystem. Ma proprio basandosi sull’affidabilità raggiunta, lo sviluppatore David Sterba si è dedicato all’implementazione di due nuove modalità: RAID1C3 e RAID1C4. In queste modalità i dati sono duplicati rispettivamente 2 e 3 volte, permettendo la perdita rispettivamente di 2 o 3 dischi. Proprio come i RAIDZ di ZFS.
A detta dello sviluppatore, per avere ulteriore ridondanza (un RAID1C5, per esempio) il codice andrebbe complicato troppo: meglio trovare un altro sistema. Inoltre, non vede nessuno interessato.

Questa nuova caratteristica interessa sicuramente gli utilizzatori più grandi, tipo Facebook, che possano decidere di investire in più dischi per avere migliori prestazioni (lettura parallela dei dati) e resilienza, al costo dello spazio disco usabile. Ricordiamo infatti che creando un RAID1C4 con 4 dischi da 1 TB l’uno, avremo impegnato 4 TB ma disponibile solo 1 TB: il 25%.

L’uscita dell’ultimo Kernel, il 5.5, ha visto l’accettazione anche di queste modifiche a Btrfs, permettendone l’uso. E Sterba ha pubblicato un mini-manuale d’uso che mostra i comandi per poter creare un filesystem con le nuove funzionalità. E si annunciano già dei miglioramenti per il Kernel 5.7.
Se ci aggiungiamo poi che GRUB, oltre a quanto implementato l’anno scorso, è già compatibile, possiamo dire che chiunque sia interessato ad usare questa possibilità non ha scuse per non farlo.

Non crediamo che questa caratteristica sia l’arma finale per vincere la battaglia del miglior filesystem, per quanto sia una conferma per chi crede ancora in Btrfs. E voi cosa preferite? ZFS, altro?

Ho coltivato la mia passione per l’informatica fin da bambino, coi primi programmi BASIC. In età adulta mi sono avvicinato a Linux ed alla programmazione C, per poi interessarmi di reti. Infine, il mio hobby è diventato anche il mio lavoro.
Per me il modo migliore di imparare è fare, e per questo devo utilizzare le tecnologie che ritengo interessanti; a questo scopo, il mondo opensource offre gli strumenti perfetti.

7 risposte a “Btrfs aggiunge i RAID1C3 e RAID1C4”

  1. Avatar carlo coppa
    carlo coppa

    Spiegato molto bene…

  2. Avatar Marco Bonfiglio
    Marco Bonfiglio

    La precisazione è dovuta, ma è quanto ho scritto, sebbene forse non chiaro.
    Quando dico che “I dati sono distribuiti tra tutti i dischi tranne uno”, non intendo che quello escluso sia sempre lo stesso, quindi un disco dedicato. Ma in effetti, non è nemmeno ben esplicitato. 🙂

  3. Avatar JustATiredMan
    JustATiredMan

    Ho dei dubbi sulla spiegazione del raid5 e di conseguenza sul 6. Se non ricordo male, in quei livelli di raid, la parita’ e’ distribuita su tutti i dischi. Il funzionamento qu’ menzionato, mi pare essere il “vecchio” Raid 3 (o 4 per alcuni) che effettivamente aveva un disco dedicato alla sola parita’

  4. Avatar Denis
    Denis

    Forse una svista, ma vedo scritto 2 volte RAIDZ-1 nell’elenco dei livelli raid zpool.

  5. Avatar Marco Bonfiglio
    Marco Bonfiglio

    Vero: sistemato.
    Grazie della segnalazione! 🙂

  6. Avatar sp82
    sp82

    ATTENZIONE CORREGGERE: “RAID1: I dischi sono usati in parallelo e i dati copiati su tutti i dischi………. Dato che tutti i dischi contengono gli stessi dati, la resilienza è la più alta: permette la perdita di tutti i dischi meno uno.”
    Non è così che funziona. Purtroppo sia BTRFS che ZFS usano “RAID” per identificare il loro livelli di ridondanza è questo causa non pochi problemi. RAID1 in questo caso vuol dire che per ogni file (o per ogni frammento di file, per file di grandi dimensioni) di un certo disco esiste una copia in un altro degli altri dischi. Con questo sistema se si perde un disco non c’è problema perchè una copia di quei dati si trova distribuita nei rimanenti dischi. Però se io ho 20 dischi è perdo anche solo 2 di questi dischi il filesystem è permanentemente corrotto. Per favore correggi l’articolo perchè altrimenti si crea solo altra confusione nell’internet.

  7. Avatar Marco Bonfiglio
    Marco Bonfiglio

    La spiegazione che hai riportato riguarda per l’appunto cosa si intende con RAID-1, e la precisazione che chiedi è già presente dopo:

    C’è comunque da fare una precisazione per l’implementazione di RAID-1: la distribuzione dei dati non avviene su tutti i dischi, ma viene scritto lo stesso chunk su due dischi diversi.
    Questo permette di lavorare con dischi di dimensione diversa, ma al costo di poter perdere solo un disco. In questo senso quindi si può parlare di RAID1C2: RAID-1 con Copia su 2 dischi.

    Infatti, fino a quel punto si tratta di una premessa tecnica necessaria per arrivare a definire quanto anticipato nel titolo:

    lo sviluppatore David Sterba si è dedicato all’implementazione di due nuove modalità: RAID1C3 e RAID1C4. In queste modalità i dati sono duplicati rispettivamente 2 e 3 volte, permettendo la perdita rispettivamente di 2 o 3 dischi

    Pertanto non credo ci siano modifiche da fare, ma rimango aperto a suggerimenti! 😉

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *