Come funziona btrfs scrub e cosa fa?


18

Cosa fa esattamente btrfs scrub? Secondo la pagina del manuale, che è totalmente poco chiara, fa qualche controllo degli errori. Che tipo di controllo errori? Quanto è affidabile? È in grado di recuperare alcuni errori? Come funziona? Funziona su ogni disco btrfs?


3
Contesto: BTRFS memorizza i checksum, quindi è sempre in grado di dire se un file (o metadati) è ok o se è stato danneggiato. Quasi tutti gli altri filesystem come ext4 non hanno il checksum, quindi non ti impediranno di leggere un file che è stato danneggiato da un disco difettoso (che sta per morire e ha già iniziato a corrompere i dati). Questa è un'importante funzione di protezione dei dati in BTRFS e questo rende possibile lo scrubbing.
basic6,

Risposte:


23

Non so se fa qualcos'altro, ma so che almeno btrfs scrubpulisce i dati del disco intero. Fondamentalmente, legge tutti i dati * sul disco, ricalcola il suo checksum e confronta il checksum ricalcolato con quello memorizzato. Quando i checksum memorizzati e ricalcolati non corrispondono, il sistema sa che c'è corruzione.

Una volta rilevato il danneggiamento, il comportamento dipende dalla configurazione del disco. Ad esempio, se si dispone di RAID 1 (mirroring), è btrfs scrubpossibile correggere i dati danneggiati copiando una versione non corrotta da un altro disco. Se tutte le copie di alcuni dati sono danneggiate (ad esempio, danno su più dischi o non avere copie ridondanti in primo luogo), allora non c'è molto altro da btrfs scrubfare oltre a avvisarti.

Il motivo per cui questo è importante è che i dischi rigidi sono affidabili solo al 99.99999999999999% nella lettura e scrittura dei bit. Pertanto, ogni pochi terabyte di I / O di dati, è probabile che si verifichi un errore. Sebbene gli errori possano essere e vengano rilevati (e corretti, supponendo che una copia ridondante sia ancora valida) durante il normale accesso al disco, lo scrubbing su disco pieno di routine è in grado di trovare e correggere gli errori prima che si accumuli abbastanza che tutte le copie degli stessi dati siano danneggiate.

* Sto usando "dati" anziché "file" per includere anche i metadati. Btrfs archivia i file e i metadati corrispondenti (inclusi i checksum) in blocchi di dati, che sono tutti verificati e controllati da btrfs scrub.

Guarda anche:


Non ho contato, ma sono disposto a indovinare che la tua cifra di affidabilità è fuori di alcuni ordini di grandezza. Gli HDD di consumo sono generalmente sottoposti a una velocità UBE di 10 ^ -14 bit. In altre parole, un errore di lettura irrecuperabile per 10 ^ 14 bit letti. Il problema è che questo è per un intero settore; o ottieni l'intero settore o non ottieni nulla (o questa è l'idea; gli errori silenziosi sono completamente un'altra tazza di tè). Quindi l'errore è amplificato dalla dimensione del settore, che con le unità Advanced Format è 32.768 bit. Quindi, il tasso di errore reale è più simile a 10 ^ -10 a 10 ^ -11 errori readbit.
un CVn il

@ MichaelKjörling Non credo che i settori contino qui .... Ho una documentazione degli ultimi scrub da 29 btrfs dei due dischi rigidi interni da 1 TB del mio computer. La quantità di dati è variata tra 270 e 300 GiB (per un totale di 1,35 * 10 ^ 14 a 1,49 * 10 ^ 14 bit letti per tutti gli scrub combinati). Sono stati trovati 3 errori durante questi scrub. Supponendo che l'I / O non scrub non abbia causato né fissato il bit rot, questo è solo da 2 a 2¼ volte il tasso di errore previsto delle unità "99.99999999999999% affidabili". Anche con soli settori a 4096 bit, penso che il tuo argomento si aspetterebbe che i miei dischi abbiano già avuto migliaia di errori.
Mark Haferkamp,

@ MichaelKjörling Per quanto mi risulta le schede tecniche del produttore (Seagate e WD), muoiono errori di bit e non interi settori. E il numero di nove nella risposta è persino ottimista: 100-1/10^14ha 16 nove e il post ne ha solo 14 (corrispondente a 10 ^ 12).
Luc,

@Luc Va bene se la morte del settore è meno comune; settori che muoiono indicano che l'unità è (forse) effettivamente guasta e potrebbe essere necessario sostituirla. Gli errori di bit portano solo alla corruzione silenziosa dei dati, che può essere resa abbastanza rumorosa da ripristinare dai backup. Nota matematica: il calcolo effettivo è 1-10^n, che viene quindi convertito in percentuale perché agli umani non piacciono i decimali iniziali. Inoltre, ho trascurato di menzionare nel mio precedente commento che le unità sono in RAID 1 (quindi gli stessi dati di 270-300 GiB sono su ciascuno di essi), che risolve un altro errore di calcolo apparente.
Mark Haferkamp,

5

Espandere sulla risposta eccellente di Mark Haferkamp, btrfs scrubleggere tutti i dati anziché tutti i file è una proprietà fondamentale ed è ciò che lo rende così utile. Ricorda, btrfs ha il supporto RAID integrato. Supponi di avere un filesystem btrfs che si estende su due unità che hai configurato per utilizzare RAID1. In questo caso, quando si scrive su un file, tale scrittura viene replicata su entrambi i dischi. (Diventa più complicato con un esempio più complesso, ma per questo semplice caso, questo è sempre ciò che accade.) Tuttavia, quando leggi da quel file, la lettura colpirà solo un disco (perché è uno spreco leggere il file in due volte a meno che la prima copia sia inutilizzabile per qualche motivo).

Ora supponiamo che la tua seconda unità btrfs stia degradando e iniziando a corrompere i dati nel tuo filesystem. Quando leggi i blocchi da questo disco, btrfs noterà che il checksum non corrisponde e ripristinerà il blocco in-band da una copia nota, la copia sulla prima unità. Restituirà i dati alla chiamata dell'applicazione read()(o qualsiasi altra cosa) come se non fosse successo nulla.

Ma cosa succede se btrfs non decide di leggere dal secondo disco? Ricorda, ci sono due copie, quindi può leggere dal primo o dal secondo disco. Se legge dal primo disco, non noterà nulla di sbagliato. L'unica volta che noterà che qualcosa non va è quando anche il primo disco si degrada. Ora sei davvero seccato perché è troppo tardi per recuperare i dati - la copia del secondo disco è stata corrotta per un po 'e la prima copia (che è quella che avresti usato per ripristinare il secondo disco) è ora corrotta!

Qui btrfs scrubentra in gioco. Legge tutti i dati , non tutti i file. Ciò include metadati, ma anche copie secondarie di file che normalmente non si troverebbero nel percorso di lettura. Quando legge queste copie secondarie, ciò crea un'opportunità per la correzione degli errori in banda di btrfs di avviare e ripristinare i dati da una copia ridondante.


2
Sei sicuro che nella lettura RAID1 venga eseguita solo da 1 disco? Almeno con mdadm RAID questo non dovrebbe essere il caso. La lettura dovrebbe avvenire in parallelo da entrambi i dischi, ma di dati diversi, il che significa che dovrebbe essere due volte più veloce della lettura da un disco. L'aumento delle prestazioni di lettura è una delle principali funzionalità di RAID 1.
Petr

@Petr sì, hai ragione. i singoli blocchi vengono letti solo da un disco.
Strugee,

@Petr: Per elaborare, - in condizioni normali né MDADM né BTRFS leggono entrambe le copie degli stessi dati da entrambi i dischi. Hanno solo letto una copia. - MDADM è in grado di bilanciare il carico e distribuire la lettura tra copie per ottenere il doppio della velocità di lettura. (poiché tutta la copia A va sul disco 1 e tutta la copia B sul disco 2. Poiché mdadm utilizzerà esattamente 2 dischi). - BTRFS ha più difficoltà. (perché le copie A e B andranno su qualunque 2 dischi (su 2 o più dischi) abbia avuto la maggior quantità di spazio libero al momento - ovvero: le 2 copie si diffonderanno casualmente tra tutti i dischi presenti)
DrYak

e per quanto riguarda la sicurezza: - sia MDADM che BTRFS proveranno l'altra copia in caso di problemi. - per MDADM l'unico problema che è in grado di rilevare è "il disco non risponde" (perché non ha una reale idea dei file archiviati sopra) - per BTRFS è inoltre in grado di rilevare la corruzione silenziosa dei dati (perché i dati sono checksum, e così il livello RAID di BTRFS sa se una copia può essere considerata attendibile o se deve recuperarne un'altra)
DrYak

ultimo ma non meno importante per quanto riguarda RAID5 / 6: - in MDADM funziona e basta . (Ma non rileverà corruzioni silenziose) - in BTRFS la corruzione silenziosa per ora non viene gestita (perché è più semplice recuperare un'altra copia (in RAID1) piuttosto che eseguire il calcolo di Erasure Coding per indovinare quale membro della striscia è corrotto e dovrebbe essere ricostruito dai dati / parità rimanenti). In altre parole: ad oggi (agosto 2017) non usare RAID5 / 6 di btrfs.
DrYak,
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.