BTRFS garantisce la coerenza dei dati in caso di blackout?


11

Come afferma esclusivamente ZFS ,Si dice che ZFS sia invulnerabile ZFS accetta che potrebbe essere vulnerabile a interruzioni di corrente.

Non sono riuscito a trovare una simile affermazione per BTRFS. È (o progettato / pianificato per essere) durevole tra le interruzioni di corrente?


leggi ancora. "Se il pool è danneggiato a causa di un guasto hardware o un'interruzione dell'alimentazione, consultare la sezione Riparazione di danni a livello di pool di archiviazione ZFS." (..) Tentativo di ripristinare il pool utilizzando il zpool clear -F comando
Michael D.

Quindi dici "ZFS non garantisce la coerenza dei dati, tenta solo di recuperare"?
ceremcem,

Sì. Esistono diverse cache da gestire, una cache integrata per dischi rigidi, cache / buffer del sistema operativo. Ad un certo punto c'è un synco flushche scrive le cache sul disco, o no durante un'interruzione di corrente, che i dati andranno persi. ZFS potrebbe funzionare perfettamente se il disco rigido è integro e non vi sono interruzioni di corrente (o un UPS è collegato a un computer correttamente spento in caso di interruzione). Che non puoi dire di FAT32 o giù di lì.
Michael D.

2
La perdita di dati non è una preoccupazione in quanto è una conseguenza naturale quando si verifica una perdita di potenza, ma la coerenza dei dati è una preoccupazione nel mio caso. Un file system potrebbe perdere dati in tali condizioni estreme, ma non dovrebbe causare dati incoerenti nel disco. Ho bisogno della funzione di istantanee continue, quindi continuerò con BTRFS. Tuttavia, NILFS2 è l'opzione più vicina al mio caso.
ceremcem,

1
Ho fatto la domanda su #btrfs IRC, hanno detto should be ok if your hw isn't "buggy"dove non significa "buggy" your hw has correct flush/barrier semantics. Ho pubblicato un link a questa domanda su IRC, si spera che qualcuno si prenda del tempo per elaborare; ma per ora è così.
Ciao Angelo

Risposte:


5

Ho fatto la domanda su #btrfs IRC, hanno detto should be ok if your hw isn't "buggy"dove non significa "buggy" your hw has correct flush/barrier semantics.

TL; DR: ciò significa che btrfs è protetto dalla corruzione dei dati a causa della perdita di potenza in modo simile a ZFS.

Ecco perché: l'idea generale alla base di ZFS e btrfs è simile. Entrambi usano gli alberi Merkle come struttura dati . Le scritture potrebbero richiedere l'aggiornamento di più blocchi sui dischi. Il file system lo gestisce scrivendo i nuovi dati in blocchi vuoti (anche se un file esistente viene modificato, quindi non è necessario modificare i blocchi che riflettono il vecchio stato) e costruendo un nuovo albero aggiornato. Una volta fatto tutto il sollevamento pesante e dati + l'albero aggiornato sono stati scritti sul disco, il puntatore della testa viene aggiornato al nuovo albero rendendo visibile la modifica.

Ecco come dovrebbero comportarsi le cose quando si scrive su un file:

  1. Scrivi i dati su blocchi liberi sul disco.
  2. Crea una copia dell'albero Merkle *, aggiornalo in base alle modifiche scritte in (1).
  3. Chiedi all'hardware di scaricare i dati sul disco: l'hardware scrive tutti i dati in sospeso.
  4. Aggiorna il puntatore head al nuovo albero Merkle.
  5. Vecchi blocchi gratuiti che non sono più necessari.

Se si perde energia dopo (4) la transazione è completa. Se l'alimentazione viene persa durante i passaggi da (1) a (3), il file system presenterà il vecchio stato (i dati scritti nel passaggio (1) vengono persi ma il file system è coerente). Si noti che non è necessario verificare la presenza di errori del file system, il che significa che il file system è immediatamente disponibile, il che rappresenta un grande vantaggio (il controllo di file system di grandi dimensioni può richiedere molto tempo!).

Ecco un esempio di come le cose potrebbero andare storte con l'hardware "buggy":

  1. Scrivi i dati su blocchi liberi sul disco.
  2. Crea una copia dell'albero Merkle *, aggiornalo in base alle modifiche scritte in (1).
  3. Chiedi all'hardware di scaricare i dati sul disco: l'hardware conferma il completamento ma non scarica completamente (ad es. I dati potrebbero rimanere nella cache di riscrittura del disco).
  4. Aggiorna il puntatore head al nuovo albero Merkle. Questi dati vengono scritti su disco prima di altri dati in sospeso (ad es. Perché la testa del disco si trova nella posizione corretta).
  5. I dati scritti nei passaggi (1) e (2) vengono scritti su disco.
  6. Vecchi blocchi gratuiti che non sono più necessari.

Il file system diventerà incoerente se si perde l'alimentazione tra (4) e (5) o durante l'esecuzione del passaggio (5). Di conseguenza l'albero di Merkle e / oi dati potrebbero essere scritti solo in parte, rendendo il file system incoerente.

In pratica devi prestare particolare attenzione quando usi i controller RAID . Di solito disabilitano le cache di write-back sul disco e usano invece la propria cache di write-back. Ci sono due modi comuni in cui le cose vanno male qui:

* Sto semplificando le cose qui. In realtà non è necessario copiare l'intero albero. È necessario aggiungere solo le parti modificate: le parti rimanenti possono essere condivise tra il vecchio e il nuovo albero .


Grazie per questa bella spiegazione. Tuttavia, citazione necessaria per tutte le affermazioni, compresa la conversazione IRC. Quindi la tua risposta sarà accettata.
ceremcem,

Per quanto riguarda i registri IRC, mi riferivo al commento di @ Hi-Angel qui. Forse può fornire un riferimento? Ho aggiunto qualche altro riferimento alle altre parti, però.
Martin,

BTRFS non usa gli alberi Merkle, usa gli alberi B (da qui 'B-TRee FileSystem'), e i tuoi esempi di errore richiedono che le barriere di scrittura non siano correttamente implementate dall'hardware (che in realtà è un caso piuttosto insolito al giorno d'oggi) . Altrimenti, buona risposta.
Austin Hemmelgarn,

Gli alberi usati da btrfs sono in realtà entrambi alberi B (questa proprietà riguarda la "forma" dell'albero e il fatto che si auto-bilanciano) e gli alberi hash / Merkle (le foglie contengono l'hash di alcuni dati, i nodi contengono il hash dei loro figli, quindi ogni cambiamento si propaga fino alla radice). Essere in grado di verificare questi hash è ciò che consente a btrfs e ZFS di rilevare dati danneggiati (e di leggerli da un altro disco se usato in modalità "mirroring").
Martin,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.