Come funziona la parità su un array RAID-5?


31

Sto cercando di creare un piccolo array RAID per backup dedicati. Vorrei avere circa 2-4 TB di spazio disponibile, dato che ho questa brutta abitudine di digitalizzare tutto. Pertanto, ho bisogno di molta memoria e molta ridondanza in caso di guasto dell'unità. Fondamentalmente eseguirò anche il backup di 2-3 /homecartelle di computer utilizzando uno dei cloni "Time Machine" per Linux. Questo array sarà accessibile sulla mia rete locale tramite SSH.

Ho difficoltà a capire come RAID-5 raggiunge la parità e quante unità sono effettivamente richieste. Si potrebbe presumere che abbia bisogno di 5 unità, ma potrei sbagliarmi. La maggior parte dei diagrammi che ho visto mi ha solo confuso. Sembra che sia così che funziona RAID-5, per favore correggimi perché sono sicuro che non lo afferrerò correttamente:

/---STORAGE---\    /---PARITY----\
|   DRIVE_1   |    |   DRIVE_4   |
|   DRIVE_2   |----|     ...     |
|   DRIVE_3   |    |             |
\-------------/    \-------------/

Sembra che le unità 1-3 vengano visualizzate e funzionino come una singola, massiccia unità ( capacity * number_of_drives) e le unità di parità eseguano il backup di tali unità. Ciò che mi sembra strano è che di solito vedo più di 3 unità di archiviazione in un diagramma con solo 1 o 2 unità di parità. Supponiamo che stiamo eseguendo 4 unità da 1 TB in un array RAID-5, 3 storage in esecuzione e 1 parità in esecuzione, abbiamo 3 TB di spazio di archiviazione effettivo, ma ne abbiamo solo 1 TB in parità !?

So che mi manca qualcosa qui, qualcuno può darmi una mano? Inoltre, per il mio caso d'uso, cosa sarebbe meglio, RAID-5 o RAID-6? La tolleranza ai guasti è la massima priorità per me a questo punto, poiché funzionerà su una rete solo per uso domestico, la velocità non è estremamente critica.

Risposte:


30

XORs semplicemente ogni bit corrispondente da ogni unità - Se si perde un'unità, è possibile ricostruire i dati mancanti.

Per lo sfondo:

A B (A XOR B)
0 0    0
1 1    0
0 1    1
1 0    1

Supponi che D sia l'XOR delle altre colonne, quindi finché perdi solo un'unità, puoi capire cosa hai perso.

A B C D
1 0 0 1
0 1 0 1
1 1 0 0

Alcune volte il bit stripe verrà distribuito tra le unità, ma il concetto è lo stesso.

Quindi, per RAID-5, indipendentemente dal numero di unità, è necessaria solo 1 unità per parità uguale o maggiore della più piccola unità dell'array che si desidera RAID.

RAID-5 per uso personale è probabilmente il migliore in quanto la complessità computazionale è molto inferiore a RAID-6.

RAID-6 è più complicato usando Galois Fields per calcolare la parità. E questo può tassare i calcoli della parità. Tuttavia, è possibile perdere più unità, ma se si ricostruisce l'array non appena si verifica un singolo errore, è necessario attenersi a RAID-5.


Risposta eccellente. Stavo pensando su una scala troppo grande, su una base effettiva del disco rigido completo, piuttosto che a livello di bit. Quindi RAID-5 utilizza un'unità dedicata per parità, o meglio tutte le unità per parità? Sono confuso su questo.
Naftuli Kay,

2
Credo che l'approccio moderno sia quello di distribuire la parità in diagonale su tutte le unità. Ciò ha l'effetto di accelerare il tempo di lettura ai bit di parità poiché più richieste IO possono essere inviate in parallelo a diversi azionamenti, ma non citarmi su questo.
Matt,

Esiste una formula matematica che posso usare per determinare la capacità data x unità e yGB disponibili su ciascuna unità?
Naftuli Kay,

2
Sì, è la (dimensione dell'unità più piccola) * (numero di unità nell'array - 1)
Matt

1
Se la parità è solo un XOR degli altri due dischi, come fai a sapere quale dei due dischi è stato danneggiato? Non capovolgere un po 'su entrambi i dischi comporterebbe un piccolo capovolgimento nella parità?
Jay Sullivan

8

Ecco quello che penso sia un diagramma migliore per mostrare come funziona la parità in RAID4 e RAID5

RAID4

Disk1  Disk2  Disk3  Disk4
----------------------------
data1  data1  data1  parity1
data2  data2  data2  parity2
data3  data3  data3  parity3
data4  data4  data4  parity4

RAID5

Disk1   Disk2   Disk3   Disk4
----------------------------
parity1 data1   data1   data1   
data2   parity2 data2   data2  
data3   data3   parity3 data3
data4   data4   data4   parity4

Oppure, dai un'occhiata a questo SVG su Wikipedia en.wikipedia.org/wiki/Standard_RAID_levels#/media/…
Giuseppe Crinò

4

Consiglierei di leggere questo articolo di Wikipedia su Raid 5 e Raid 6

http://en.wikipedia.org/wiki/Standard_RAID_levels#RAID_5_parity_handling

RAID 5 scrive un blocco di parità in ogni strip, quindi per Strip A di un array a 4 dischi scrive il controllo di parità sul 4 ° disco, con Dati sui dischi 1, 2 e 3

Per Strip B, il blocco di parità si trova sul disco 3, con i dati sui dischi 1,2 e 4 .. ecc.

Se si dice che il disco 4 non funziona, i dati possono essere recuperati per la striscia B poiché si conoscono i dati sui dischi 1 e 2 e si ha il controllo di parità sul disco 3.

Se la striscia B ha una parità di "2" e il disco 1 ha dati di "1" e i dati del disco 2 "0", il disco 4 deve avere dati uguali a "1", quindi il disco è scritto con data = "1"

L'intero disco può essere ricreato in questo modo, RAID 6 estende questo avendo 2 blocchi di partito per striscia.

Per quanto riguarda lo spazio per il Raid 5, perdi sempre solo un disco di spazio in parità, poiché scrive solo sul blocco di parità per striscia, mentre con il Raid 6 perderai 2 dischi ma puoi anche perdere due dischi anziché quello in cui puoi perdere Raid 5;)

L'articolo di Wikipedia lo spiega meglio!


3

RAID 5 utilizza un'unità per parità, indipendentemente dal numero di unità dati presenti nell'array. Ciò significa che diventa più efficiente, in termini di spazio utilizzabile, più unità vengono aggiunte.

La parità si ottiene eseguendo un'operazione XOR attraverso lo stesso blocco in ciascuna unità; il contenuto dell'unità di parità viene regolato in modo tale che tutte le unità XOR siano a zero . Ciò significa che RAID 5 è limitato dalla capacità più piccola di tutte le unità dell'array.

RAID 6 è simile tranne per il fatto che possono essere tollerati due guasti simultanei dell'unità. Ciò è utile perché il processo di " resilvering " di un array dopo un guasto di una singola unità può essere abbastanza stressante da causare il fallimento di una seconda unità.


Quindi, ciò significa essenzialmente che posso avere 4 unità da 2 TB e avere 6 TB di spazio di archiviazione ridondante efficace?
Naftuli Kay,

@TK Kocheran Con RAID 5, sì. Si noti che l'archiviazione effettiva sarà leggermente inferiore a causa del file system. Ad esempio, il mio NAS con 4 unità da 2 TB in RAID-Z1 (la versione di RAID 5 di ZFS) ha uno spazio utilizzabile di 5.18 TB.
sblair,

Beh sì, certo :) Succede sempre così. La prossima domanda è quale filesystem usare ...
Naftuli Kay,

0

Se la tolleranza agli errori è il tuo obiettivo, RAID-6 fornirà abbastanza ridondante per perdere due unità. Tipicamente, RAID-5 tollererà solo un singolo guasto dell'unità.


Qual è il rapporto tra unità e parità (memoria totale) per RAID-6? drive_size * (drive_count - 2)?
Naftuli Kay,

1
Oltre alla tolleranza agli errori per una seconda unità che va male prima che tu possa sostituire la prima, c'è un'altra situazione per cui è ottima e mi sono imbattuto più di una volta: un'unità si guasta in un array RAID, quindi un è stata ordinata una nuova unità. Un tizio a caso che non sa nulla degli array RAID entra nella stanza del server con una nuova unità in mano, incasina la numerazione ed espelle l'unità sbagliata dall'array per la sostituzione. Sotto RAID5, l'array è avvitato proprio lì. RAID6 significa che puoi ancora recuperare.
camster342,
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.