Cosa significa il numero "di riserva" di mdadm?


8

Ho creato un RAID 5 basato su mdadm da sei dischi rigidi usando il seguente comando:

# mdadm --create /dev/md0 --level=5 --raid-devices=5 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 \
--spare-devices=1 /dev/sdg1

Mi aspettavo che l'array avesse un hot spare, ovvero / dev / sdg1. Tuttavia, il controllo mdadm --detailmostra 2 pezzi di ricambio:

# mdadm --detail --scan 
ARRAY /dev/md0 metadata=1.2 spares=2 name=...

Inoltre, la dimensione dell'array, come mostrato da, dfè di 2 TB, che corrisponderebbe solo a quattro delle mie unità da 500 GB utilizzate.

Allora, di che cosa è esattamente la semantica --spare-devices? La pagina di manuale afferma che "Specifica il numero di dispositivi di riserva (eXtra) nell'array iniziale", ma qui non sembra essere il caso.


1
RAID 5 utilizza la parità di un dispositivo. Non lo so, ed è per questo che sto facendo questo commento, ma potrebbe forse avere qualcosa a che fare con esso? ( mdadm --detailcompresa l'unità di parità nel conteggio "ricambi"). È possibile verificarlo creando un array RAID 6 senza hot spare; se la mia teoria è valida, anch'essa mostrerà spares = 2.
un CVn il

2
Nella terminologia RAID standard, un disco di riserva è solo un disco inattivo per lo più vuoto che può essere automaticamente attivato per aiutare a ricostruire l'array dopo un altro disco guasto. Un disco di parità non è un disco di riserva. Inoltre, il numero di dischi di riserva non è il numero di dischi che possono fallire prima che i dati siano a rischio. (Il numero non è ben definito. Un RAID 10 a quattro dischi potrebbe gestire fino a 2 errori del disco, ma potrebbe anche essere morto con 2 errori del disco.)
200_success

4
Sto indovinando che stai vedendo due parti di ricambio, perché la sua ancora facendo l'init-it matrice iniziale è "ricostruzione" a una delle due parti di ricambio. Una volta fatto (controlla i progressi compiuti cat /proc/mdstat), penso che vedrai l'atteso 1.
derobert

@derobert, hai ragione: dopo che la ricostruzione iniziale è stata completata, ho ricevuto ARRAY / dev / md0 metadata = 1.2 spares = 1 name = [...] da mdadm --detail --scan e informazioni equivalenti da / proc / mdstat.
jstarek,

Risposte:


4

Quell'output è corretto. Hai creato un RAID 5 con 5 dischi (solo 4 di questi saranno "usati" per lo spazio). E hai aggiunto un'unità di riserva aggiuntiva.

Quindi in realtà hai un RAID 5 che consente un errore del disco + un'unità di riserva aggiuntiva.

Se quello che vuoi è effettivamente RAID 5 con 6 dischi e avere lo spazio di 5 dischi, devi modificare il tuo comando in:

mdadm --create /dev/md0 --level=5 --raid-devices=6 \
/dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1 /dev/sdg1

Ma in questo caso puoi tollerare solo un errore del disco secondo le specifiche di RAID 5.

EDIT: Aggiunta del link dalla pagina del raid ufficiale: puoi vedere un raid 5 con 6 dischi e indica spare = 1: Initial Array Creation

AGGIORNAMENTO: Ho deciso di creare un raid 5 nel mio sistema e il valore di riserva scompare quando l'array è in uno stato pulito:

   Raid Devices : 4
  Total Devices : 4
              State : clean, degraded, recovering
     Active Devices : 3
    Working Devices : 4
     Failed Devices : 0
      Spare Devices : 1

Stato pulito:

   Raid Devices : 4
  Total Devices : 4
          State : clean
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0

Quindi è come il commento OP, durante la creazione iniziale del raid 5 ha l'unità di riserva fino al completamento della creazione / sincronizzazione del raid.


1
Penso che le informazioni chiave dalla pagina wiki a cui ti sei collegato sia questa: "Per raid5 c'è un'ottimizzazione: mdadm prende uno dei dischi e lo contrassegna come" di riserva ", quindi crea l'array in modalità degradata." - questo si adatterebbe perfettamente con l'osservazione fatta da derobert nei commenti sopra. A parte questo, temo che tu abbia frainteso la mia domanda: non volevo avere 5 unità di spazio. Menzionare la 2 TB era solo un'osservazione.
jstarek,

3

Per motivi di chiarezza, aggregherò le informazioni fornite da derobert e Alexandre Alves e alcuni altri miei test qui:

mdadmIl --spare-devicesparametro funziona come indicato nella pagina man, ovvero definisce il numero di unità "hot spare" in un array. Un "hot spare", come nella normale terminologia RAID, non ha nulla a che fare con le unità extra presenti in un array RAID 5 o RAID 6: si tratta di un'unità aggiuntiva destinata a subentrare non appena un'unità nell'array è fallito.

Il numero di unità di riserva è indicato al momento della creazione dell'array. Successivamente, può essere verificato utilizzando #mdadm --detail --scan.

Tuttavia, durante il breve periodo di inizializzazione di un RAID 5 basato su mdadm, esiste un'ottimizzazione, descritta in https://raid.wiki.kernel.org/index.php/Initial_Array_Creation , che fa apparire un'unità di riserva aggiuntiva in l'output di quel comando:

"Per raid5 esiste un'ottimizzazione: mdadm prende uno dei dischi e lo contrassegna come 'ricambio'; quindi crea l'array in modalità degradata. Il kernel contrassegna il disco di riserva come 'ricostruzione' e inizia a leggere dal 'buono' dischi, calcola la parità e determina cosa dovrebbe essere sul disco di riserva e quindi scrive solo su di esso. "

Al termine dell'inizializzazione dell'array, il numero di ricambi segnalati ritorna al numero selezionato al momento della creazione.

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.